를 사용하여 AWS Batch 및 Fargate 시작하기 AWS CLI - AWS Batch

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

를 사용하여 AWS Batch 및 Fargate 시작하기 AWS CLI

이 자습서에서는 AWS Batch AWS Fargate 오케스트레이션으로 설정하고 AWS Command Line Interface ()를 사용하여 간단한 "Hello World" 작업을 실행하는 방법을 보여줍니다AWS CLI. 컴퓨팅 환경, 작업 대기열, 작업 정의를 생성하고 AWS Batch에 작업을 제출하는 방법을 알아봅니다.

사전 조건

이 튜토리얼을 시작하기 전에 다음 사항을 확인해야 합니다.

  1. AWS CLI. 설치해야 하는 경우 AWS CLI 설치 안내서를 따르세요. 가 포함된를 사용할 AWS CloudShell 수도 있습니다 AWS CLI.

  2. 적절한 자격 증명 AWS CLI 으로를 구성했습니다. 자격 증명을 아직 설정하지 않은 경우 aws configure를 실행합니다.

  3. 명령줄 인터페이스 및 컨테이너화 개념에 대한 기본 지식.

  4. AWS Batch 에서 IAM을 사용하는 방법에서 AWS Batch 리소스, IAM 역할 및 VPC 리소스를 생성하고 관리합니다 AWS 계정.

  5. 에 있는 VPC의 서브넷 ID 및 보안 그룹 ID입니다 AWS 계정. VPC 인증서가 없는 경우 하나를 생성할 수 있습니다. 를 사용하여 이러한 리소스 IDs를 검색 AWS CLI 하는 방법에 대한 자세한 내용은 AWS CLI 명령 참조의 describe-subnetsdescribe-security-groups를 참조하세요.

소요 시간: 이 자습서를 완료하는 데 약 15~20분이 소요됩니다.

비용: 이 자습서에서는 Fargate 컴퓨팅 리소스를 사용합니다. 정리 지침에 따라 완료 직후 리소스를 삭제한다고 가정했을 때, 이 자습서를 완료하는 데 대한 예상 비용은 0.01 USD 미만입니다. Fargate 요금은 vCPU 및 사용된 메모리 리소스를 기준으로 하며, 초당 요금(최소 1분 동안)이 부과됩니다. 요금에 대한 자세한 내용은 AWS Fargate 요금을 참조하세요.

IAM 실행 역할 생성

AWS Batch 에는 Amazon Elastic Container Service(Amazon ECS) 에이전트가 사용자를 대신하여 AWS API를 호출할 수 있는 실행 역할이 필요합니다. 이 역할은 Fargate 태스크가 컨테이너 이미지를 가져오고 Amazon CloudWatch에 로그를 쓰는 데 필요합니다.

신뢰 정책 문서 생성

먼저, Amazon EKS 태스크 서비스가 이 역할을 수임하도록 허용하는 신뢰 정책을 생성합니다.

cat > batch-execution-role-trust-policy.json << EOF { "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF

실행 역할 생성

다음 명령은 방금 생성한 신뢰 정책을 사용해 BatchEcsTaskExecutionRoleTutorial이라는 이름의 IAM 역할을 생성합니다.

aws iam create-role \ --role-name BatchEcsTaskExecutionRoleTutorial \ --assume-role-policy-document file://batch-execution-role-trust-policy.json

필수 정책 연결

Amazon ECS 작업 실행에 필요한 권한을 제공하는 AWS 관리형 정책을 연결합니다.

aws iam attach-role-policy \ --role-name BatchEcsTaskExecutionRoleTutorial \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy

이제이 역할을 AWS Batch Fargate 작업 실행에 사용할 준비가 되었습니다.

컴퓨팅 환경 생성

컴퓨팅 환경은 배치 작업이 실행될 컴퓨팅 리소스를 정의합니다. 이 자습서에서는 작업 요구 사항을 기반으로 리소스를 자동으로 프로비저닝하고 확장하는 관리형 Fargate 컴퓨팅 환경을 생성합니다.

컴퓨팅 환경 생성

다음 명령은 Fargate 컴퓨팅 환경을 생성합니다. 사전 조건 섹션에 따라 예시의 서브넷 및 보안 그룹 ID를 실제 값으로 바꿉니다.

aws batch create-compute-environment \ --compute-environment-name my-fargate-compute-env \ --type MANAGED \ --state ENABLED \ --compute-resources type=FARGATE,maxvCpus=128,subnets=subnet-a123456b,securityGroupIds=sg-a12b3456

다음은 명령이 성공적으로 실행되었을 때 출력이 어떻게 표시되는지 보여줍니다.

{ "computeEnvironmentName": "my-fargate-compute-env", "computeEnvironmentArn": "arn:aws:batch:us-west-2:123456789012:compute-environment/my-fargate-compute-env" }

컴퓨팅 환경이 준비될 때까지 대기

계속하기 전에 컴퓨팅 환경의 상태를 확인하여 준비가 되었는지 확인합니다.

aws batch describe-compute-environments \ --compute-environments my-fargate-compute-env \ --query 'computeEnvironments[0].status'
"VALID"

상태가 VALID로 표시되면 컴퓨팅 환경이 작업을 수락할 준비가 된 것입니다.

작업 대기열 생성

작업 대기열은 AWS Batch 스케줄러가 컴퓨팅 환경의 리소스에서 작업을 실행할 때까지 제출된 작업을 저장합니다. 작업은 대기열 내에서 우선 순위에 따라 처리됩니다.

작업 대기열 생성

다음 명령은 Fargate 컴퓨팅 환경을 사용하는, 우선 순위 900의 작업 대기열을 생성합니다.

aws batch create-job-queue \ --job-queue-name my-fargate-job-queue \ --state ENABLED \ --priority 900 \ --compute-environment-order order=1,computeEnvironment=my-fargate-compute-env

다음은 명령이 성공적으로 실행되었을 때 출력이 어떻게 표시되는지 보여줍니다.

{ "jobQueueName": "my-fargate-job-queue", "jobQueueArn": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue" }

작업 대기열이 준비되었는지 확인

작업 대기열이 ENABLED 상태이고 작업을 수락할 준비가 되었는지 확인합니다.

aws batch describe-job-queues \ --job-queues my-fargate-job-queue \ --query 'jobQueues[0].state' "ENABLED"

작업 정의 생성

작업 정의는 사용할 Docker 이미지, 리소스 요구 사항 및 기타 파라미터를 포함하여 작업을 실행하는 방법을 지정합니다. Fargate에는 기존 vCPU 및 메모리 파라미터 대신 리소스 요구 사항을 사용합니다.

작업 정의 생성

다음 명령은 busybox 컨테이너 이미지를 사용하여 간단한 'Hello World' 명령을 실행하는 작업 정의를 생성합니다. 를 실제 AWS 계정 ID123456789012로 바꾸고 예제를 자신의 AWS 리전 것으로 바꿉니다.

aws batch register-job-definition \ --job-definition-name my-fargate-job-def \ --type container \ --platform-capabilities FARGATE \ --container-properties '{ "image": "busybox", "resourceRequirements": [ {"type": "VCPU", "value": "0.25"}, {"type": "MEMORY", "value": "512"} ], "command": ["echo", "hello world"], "networkConfiguration": { "assignPublicIp": "ENABLED" }, "executionRoleArn": "arn:aws:iam::123456789012:role/BatchEcsTaskExecutionRoleTutorial" }, { "jobDefinitionName": "my-fargate-job-def", "jobDefinitionArn": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1", "revision": 1 }'

작업 정의는 Fargate 태스크의 최소 리소스인 0.25 vCPU 및 512MB 메모리를 지정합니다. 컨테이너가 Docker Hub에서 busybox 이미지를 가져올 수 있도록 assignPublicIp 설정이 활성화됩니다.

작업 제출 및 모니터링

이제 필요한 구성 요소가 모두 있으므로 대기열에 작업을 제출하고 진행 상황을 모니터링할 수 있습니다.

작업 제출

다음 명령은 생성한 작업 정의를 사용하여 작업을 대기열에 제출합니다.

aws batch submit-job \ --job-name my-hello-world-job \ --job-queue my-fargate-job-queue \ --job-definition my-fargate-job-def

다음은 명령이 성공적으로 실행되었을 때 출력이 어떻게 표시되는지 보여줍니다.

{ "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job", "jobName": "my-hello-world-job", "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a" }

응답에서 반환된 jobId를 기록해 두세요. 이는 작업 진행 상황을 모니터링하는 데 사용됩니다.

작업 상태 모니터링

작업 ID를 사용하여 작업의 상태를 확인합니다. 작업 진행 상황은 SUBMITTED, PENDING, RUNNABLE, STARTING, RUNNING 상태를 거쳐 마지막으로 SUCCEEDED 또는 FAILED 상태에 도달합니다.

aws batch describe-jobs --jobs 1509xmpl-4224-4da6-9ba9-1d1acc96431a

다음은 명령이 성공적으로 실행되었을 때 출력이 어떻게 표시되는지 보여줍니다.

{ "jobs": [ { "jobArn": "arn:aws:batch:us-west-2:123456789012:job/my-hello-world-job", "jobName": "my-hello-world-job", "jobId": "1509xmpl-4224-4da6-9ba9-1d1acc96431a", "jobQueue": "arn:aws:batch:us-west-2:123456789012:job-queue/my-fargate-job-queue", "status": "SUCCEEDED", "createdAt": 1705161908000, "jobDefinition": "arn:aws:batch:us-west-2:123456789012:job-definition/my-fargate-job-def:1" } ] }

상태가 SUCCEEDED로 표시되면 작업이 성공적으로 완료된 것입니다.

작업 출력 보기

작업이 완료되면 Amazon CloudWatch Logs에서 출력을 볼 수 있습니다.

로그 스트림 이름 찾기

먼저 작업 세부 정보에서 로그 스트림 이름을 검색합니다. 예시 작업 ID를 실제 ID로 바꿉니다.

aws batch describe-jobs --jobs 1509xmpl-4224-4da6-9ba9-1d1acc96431a \ --query 'jobs[0].attempts[0].containers[0].logStreamName' \ --output text
my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a

작업 로그 보기

로그 스트림 이름을 사용하여 CloudWatch Logs에서 작업의 출력을 검색합니다.

aws logs get-log-events \ --log-group-name /aws/batch/job \ --log-stream-name my-fargate-job-def/default/1509xmpl-4224-4da6-9ba9-1d1acc96431a \ --query 'events[*].message' \ --output text

출력에는 작업이 성공적으로 실행되었음을 확인해 주는 'Hello World'가 표시됩니다.

리소스 정리

요금이 계속 청구되지 않게 하려면 이 자습서에서 생성한 리소스를 정리합니다. 종속성으로 인해 리소스를 올바른 순서로 삭제해야 합니다.

작업 대기열 비활성화 및 삭제

먼저 작업 대기열을 비활성화한 다음 삭제합니다.

aws batch update-job-queue \ --job-queue my-fargate-job-queue \ --state DISABLED
aws batch delete-job-queue \ --job-queue my-fargate-job-queue

컴퓨팅 환경 비활성화 및 삭제

작업 대기열이 삭제된 후 컴퓨팅 환경을 비활성화하고 삭제합니다.

aws batch update-compute-environment \ --compute-environment my-fargate-compute-env \ --state DISABLED
aws batch delete-compute-environment \ --compute-environment my-fargate-compute-env

IAM 역할 정리

정책 연결을 제거하고 IAM 역할을 삭제합니다.

aws iam detach-role-policy \ --role-name BatchEcsTaskExecutionRoleTutorial \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
aws iam delete-role \ --role-name BatchEcsTaskExecutionRoleTutorial

임시 파일 제거

생성한 신뢰 정책 파일을 삭제합니다.

rm batch-execution-role-trust-policy.json

모든 리소스가 성공적으로 정리되었습니다.

프로덕션으로 이동

이 자습서는가 Fargate에서 AWS Batch 작동하는 방식을 이해하는 데 도움이 되도록 설계되었습니다. 프로덕션 배포의 경우 다음과 같은 추가 요구 사항을 고려하세요.

보안 고려 사항:
  • 기본 보안 그룹을 사용하는 대신, 최소화된 필수 액세스 권한을 가진 전용 보안 그룹을 생성합니다.

  • 컨테이너에 대한 퍼블릭 IP 할당 대신 NAT 게이트웨이와 함께 프라이빗 서브넷을 사용합니다.

  • 퍼블릭 리포지토리를 사용하는 대신 Amazon ECR에 컨테이너 이미지를 저장합니다.

  • AWS 서비스 통신을 위한 VPC 엔드포인트를 구현하여 인터넷 트래픽 방지

아키텍처 고려 사항
  • 고가용성을 위해 여러 가용 영역에 배포합니다.

  • 오류 처리를 위해 작업 재시도 전략 및 Dead Letter Queue(DLQ)를 구현합니다.

  • 워크로드 관리를 위해 우선순위가 다른 여러 작업 대기열을 사용합니다.

  • 대기열 깊이 및 리소스 사용률을 기반으로 오토 스케일링 정책을 구성합니다.

  • 작업 실패 및 리소스 사용률에 대한 모니터링 및 알림을 구현합니다.

운영 고려 사항:
  • 모니터링을 위한 CloudWatch 대시보드 및 경보를 설정합니다.

  • 적절한 로깅 및 감사 추적을 구현합니다.

  • 코드형 인프라 AWS CDK 에 CloudFormation 또는 사용

  • 백업 및 재해 복구 절차를 수립합니다.

프로덕션에서 바로 사용할 수 있는 아키텍처에 대한 포괄적인 지침은 AWS Well-Architected 프레임워크AWS 보안 모범 사례를 참조하세요.

다음 단계

이제이 자습서를 완료했으므로 고급 AWS Batch 기능을 살펴볼 수 있습니다.

  • 작업 대기열 - 작업 대기열 예약 및 우선 순위 관리에 대해 알아봅니다.

  • 작업 정의 - 환경 변수, 볼륨 및 재시도 전략을 포함한 고급 작업 정의 구성을 살펴봅니다.

  • 컴퓨팅 환경 AWS Batch - 다양한 컴퓨팅 환경 유형과 규모 조정 옵션에 대해 이해합니다.

  • 다중 노드 병렬 작업 - 여러 컴퓨팅 노드에 걸쳐 작업을 실행합니다.

  • 배열 작업 - 많은 수의 유사한 작업을 효율적으로 제출합니다.

  • 의 모범 사례AWS Batch - 프로덕션 워크로드를 위한 최적화 기법에 대해 알아봅니다.