AWS Batch를 사용할 때까지 요약

4438 단어 AWSBatchS3AWS

소개



AWS Batch를 사용하여 S3에 정적 콘텐츠를 업로드하고 전달하고 싶었습니다만, 초보적인 곳에서 걸리는 부분이 몇 가지 있었으므로, 비망록적으로 정리해 둡니다.
만들고 싶은 구성은 굉장히 다음과 같습니다.


IAM 역할을 사용하여 AWS CLI 인증



공식 설명은 이쪽
하지만 이 작업을 수행하기 전에 IAM에 액세스하여 액세스 키를 생성해야 합니다.

AWS CLI를 사용하여 ECR에 로그인



공식 설명은 이쪽 에 있습니다만, 우선 로그인 부분의 여기
aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
--username AWS 는 그대로 괜찮습니다. 적자 부분만 바꾸면 됩니다만, 조금 고민했습니다.

Batch 실행



공식 설명은 이쪽
ECR에 대한 PUSH가 성공하면 Batch를 만들 때 ECR의 이미지 전체 경로를 복사하기만 하면 됩니다.
실행에서 로그가 나오기까지 잠시 시간이 걸리기 때문에 초조히 기다리자.
로그는 Cloud Watch로 출력되는 것 같습니다.

스팟 인스턴스에서 실행



스팟 플리트롤이 필요한 것 같습니다. 공식 설명은 이쪽
다음 두 명령을 포티포치 실행하면 스팟 인스턴스를 실행하기 위한 역할을 할 수 있는 것 같습니다.
나중에 컴퓨팅 환경을 설정할 때 스팟을 선택하면 스팟 인스턴스에서 실행할 수 있습니다.
$ aws iam create-role --role-name AmazonEC2SpotFleetRole \
    --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Sid":"","Effect":"Allow","Principal":{"Service":"spotfleet.amazonaws.com"},"Action":"sts:AssumeRole"}]}'
$ aws iam attach-role-policy \
    --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole \
    --role-name AmazonEC2SpotFleetRole

S3로 파일 보내기



다음과 같이 DockerFile을 만들고 hello-world 이미지를 업데이트합니다.
FROM ubuntu:18.04

# Install dependencies
RUN apt-get update && \
 apt-get -y install curl unzip && \
 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
 unzip awscliv2.zip && \
 ./aws/install

# Create Index File & POST To S3
RUN echo 'echo "Hello World From ECR!" `date` > /root/index.html' > /root/run_awscli.sh && \
 echo 'aws s3 cp --acl public-read /root/index.html $AWS_BUCKET_URI' >> /root/run_awscli.sh && \
 chmod 755 /root/run_awscli.sh

CMD /root/run_awscli.sh

환경 변수를 주어 기동하면(자), S3에 파일이 배치되어 브라우저로부터 파일을 참조할 수 있습니다 (런타임의 환경 변수에 대해서는 여기 를 참조. AWS_BUCKET_URI 는 자전입니다).
$ docker run -e AWS_ACCESS_KEY_ID=xxxx -e AWS_SECRET_ACCESS_KEY=xxxx -e AWS_BUCKET_URI=xxxx hello-world

후에는, 이 이미지를 ECR에 PUSH 해, AWSBatch의 작업 정의를 재작성하면 S3에 파일을 PUT 할 수 있습니다.

정기 실행



공식 설명은 이쪽
CloudWatch 이벤트 - 규칙에서 작성한 대로 설정하기만 하면 됩니다.
매우 쉬웠습니다.

결론



Docker조차도 익숙하다면 꽤 쉽게 일괄 실행을 할 수있었습니다.
더 쉬운 방법 등이 있으면 알려주세요 mm

좋은 웹페이지 즐겨찾기