이번 블로그에서는 전편에서 구성한 AWS Batch 환경을 기반으로, AWS Service Catalog를 활용하여 Job Definition을 표준화하고,
간단한 파라미터 입력만으로 누구나 쉽게 Job Definiton을 구성하는 방법을 살펴보겠습니다.
AWS Batch로 작업을 실행하는 경우, 실행 환경에 변화가 생기면 ECR에 저장된 Docker 이미지를 갱신하게 됩니다.
이때 매번 Job Definition을 새로 생성해야 한다면 다음과 같은 문제가 발생합니다.
- 동일한 Job이라도 사용자별 설정이 달라질 수 있음
- 매번 수동 설정이 필요해 운영 효율 저하
- 표준 환경 유지가 어려움
AWS Service Catalog를 활용하면 표준화된 Job Definition 템플릿을 구성할 수 있습니다.
이를 통해 Batch 가 수정 및 업데이트 되어 컨테이너 이미지가 변경되더라도 템플릿 기반 재생성이 가능하고, 실행 시 특정 파라미터만 입력하여 누구나 쉽게 Job을 실행할 수 있습니다.
먼저 AWS Service Catalog에서 Portfolio 를 만들고, 그 Portfolio 에 AWS Batch 관련 Product를 등록하겠습니다.
우선 Create portfolio 를 클릭한 후 AWS Batch 라는 이름으로 Portfolio 를 생성합니다.
‘AWS Batch’라는 이름의 Portfolio 를 만들었습니다. 해당 Portfolio 내에 첫 번째 제품(Product)으로 Job Definition 생성을 위한 Prouduct 를 생성해 보겠습니다.
해당 Product 를 실행 시 AWS 의 IaC 서비스인 CloudFormation 탬플릿을 사용하여 Job Definition을 생성하도록 하겠습니다.
아래 CloudFormation 템플릿은 AWS Batch Job Definition의 표준 예시입니다. 콘솔로 생성하는 방법은 이전 블로그를 참고해주세요(https://mcmp.cloudz.co.kr/blog/detail/237). 템플릿을 표준화해 두면 Service Catalog로 누구나 동일한 구성의 Job Definition을 일관되게 생성할 수 있습니다.
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS Batch Job Definition (Fargate 기반)
Parameters:
JobDefinitionName:
Type: String
Description: "Job Definition Name (e.g. Create_Batch_JobDef_v0.1)"
Default: "JobDefinitionName: (Required)"
ContainerImage:
Type: String
Default: "3814xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/main/well-archi-batch:0.0.1"
Resources:
BatchJobDefinition:
Type: AWS::Batch::JobDefinition
Properties:
JobDefinitionName: !Ref JobDefinitionName
Type: container
PlatformCapabilities:
- FARGATE
ContainerProperties:
Image: !Ref ContainerImage
ResourceRequirements:
- Type: VCPU
Value: "2"
- Type: MEMORY
Value: "8192"
Command: ["echo", "Hello from AWS Batch!"]
ExecutionRoleArn: arn:aws:iam::3814xxxxxxx:role/BatchEcsTaskExecutionRole
JobRoleArn: arn:aws:iam::3814xxxxxxx:role/BatchEcsTaskExecutionRole
User: app
NetworkConfiguration:
AssignPublicIp: DISABLED
Outputs:
JobDefinitionArn:
Value: !Ref BatchJobDefinition
Description: ARN of the created Batch Job Definition
위에서 작성한 템플릿을 .yaml 확장자로 저장한 뒤, 아래 화면의 Choose file을 클릭해 해당 파일을 선택하고 Product 생성(Create product) 을 진행합니다 .
생성한 Product가 Service Catalog 콘솔의 Provisioning → Products 목록에 표시되려면, AWS Service Catalog의 ‘AWS Batch’ 포트폴리오에서 Access 탭을 열어 현재 콘솔 사용자(또는 해당 IAM 사용자/그룹/역할)를 Principal로 추가해야 합니다. 포트폴리오 단위로 권한을 부여하면 해당 포트폴리오에 속한 Product에 액세스 권한을 제어할 수 있습니다.
설정을 완료하면 아래 그림처럼 ‘Create_AWS_Batch_JobDef’가 Provisioning → Products 목록에 표시됩니다. 해당 Product를 실행하려면 Launch product 버튼을 클릭하세요.
Provisioned Product Name을 입력합니다. Product를 Launch하면 해당 이름으로 Provisioned Product가 생성됩니다. 이후 템플릿 변경 없이 값 조정만 필요하디면 Provisioned Product 업데이트로 파라미터만 변경해 간단히 운영할 수 있습니다.
Launch 화면에서 CloudFormation 템플릿에 정의한 두 파라미터(ContainerImage, JobDefinitionName)를 입력합니다. 배치 구성 변경으로 컨테이너 이미지가 바뀌면 이에 맞춰 Job Definition 이름, ContainerImage URI 도 달라질 수 있으므로, 두 값을 파라미터로 노출해 유연하게 수정할 수 있게 했습니다. 아래 그림의 빨간 박스 영역을 채운 뒤 Launch product를 클릭하여 Job Definition을 생성하세요
Launch가 완료되면 아래와 같이 Job Definitions가 생성됩니다.생성된 Job Definition의 상세 정보를 확인하면, 앞서 정의한 CloudFormation 템플릿 설정이 실제로 적용되었음을 확인할 수 있습니다. 이처럼 AWS Service Catalog를 사용하면 콘솔에서 수동으로 생성할 때 소요되는 시간을 줄이고, 누구나 동일한 표준 설정으로 일관되게 배포할 수 있습니다.

이번 글에서는 AWS Service Catalog를 통해 AWS Batch Job Definition을 생성(프로비저닝)하는 방법을 살펴보았습니다.
다음 편에서는 AWS Service Catalog와 AWS Lambda 를 연동하여 AWS Batch 작업을 실행하는 방법을 알아보겠습니다.
감사합니다.