AWS Batch(Fargate)で、PrivateSubnet上のComputingEnvironmentでECRのPrivateRepositoryからimageをpullして実行する手順
AWS Batch(Fargate)で、
Subnet外にアクセスできないPrivateSubnet上の
ComputingEnvironmentでECRのPrivateRepositoryからimageをpullして実行する手順をまとめておきます。
作成するシステムの構成は、次の図のとおりです。
Subnet外のAmazonECRのRepositoryにアクセスするため、
VPC Endpointを利用する構成とします。
右側のAWS Batchの部分を「AWS Batchの環境とJobの準備」の章で
左側のEndPointsの部分を「ECR用のEndpointの作成」の章で説明します。
手順の前提
- AmazonECR上のPrivateRepository (AWS Batchで実行したいイメージをpushしておく)
- VPCとPrivateSubnet
AWS Batchの環境とJobの準備
AWS Batchについては、以下を参考にして作業を行います。
AWS Batch とは? | docs.aws.amazon.com https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/what-is-batch.html
ExecutionRoleの作成
AWS Management Consoleで、
IAM → Access Management / Roles → Create roleと辿り、
次の設定のRoleを作成する。
- Trusted entity type: AWS Service
- Use case: EC2
- Add permission:
- AmazonECSTaskExecutionRolePolicy
- AmazonEC2ContainerRegistryReadOnly
- その他、実行するbatchに応じたpermissionを追加
- Role name: awsbatch-execution-role
JobDefinitionの作成
AWS Management Consoleで、
AWS Batch → Job definition → Createと辿り、
次の設定のJobDefinitionを作成する。
- Orchestration Type: Fargate
- Name: my-job
- Fargate platform version: LATEST (Batchに応じて任意)
- Runtime platform: X86_64 (Batchに応じて任意)
- Assign public IP: DISABLE
- Execution role: AWS Batch用に作成したRole (awsbatch-execution-role)
- Image: 実行に利用するイメージ
(your account).dkr.ecr.(your region).amazonaws.com/(your image):(version) - Command: 実行コマンド
- Parameters: Batchに応じて任意
- Environment Configuration: Batchに応じて任意
- Linux configuration: Batchに応じて任意
- Logging configuration: Batchに応じて任意
# インターネットにアクセス可能なSubnetであれば
# ここで「Assign public IP」を有効にすれば、ECR用のEndpointは不要。
ComputingEnvironmentの作成
AWS Management Consoleで、
AWS Batch → Computing environments → Createと辿り、
次の設定のComputingEnvironmentを作成する。
- Compute environment configuration
- Type: Fargate
- Name: awsbatch-env
- Service Role: BatchServiceRolePolicyを持つRole (AWSServiceRoleForBatch)
- Maximum vCPUs: 任意
- Network configuration
- Virtual Private Cloud ID: BatchJobを動かすVPC
- Subnets: BatchJobを動かすSubnet
- Security groups: BatchJobを動かすSecurityGroup、OutboundのHTTPS/Allがアクセスできればよい、VPCのdefault等でよい
JobQueueの作成
AWS Management Consoleで、
AWS Batch → Job queue → Createと辿り、
次の設定のJobQueueを作成する。
- Orchestration Type: Fargate
- Job queue configuration:
- Name: awsbatch-queue
- Priority: 任意
- Connected compute environments: BatchJobを動かすComputingEnvironment(awsbatch-env)
ECR用のEndpointの作成
Amazon ECRについては、以下を参考にして作業を行います。
Amazon ECR プライベートリポジトリ | docs.aws.amazon.com
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/Repositories.html
SecurityGroupの作成
AWS Management Consoleで、
VPC → Security / Security Groups → Create security groupと辿り、
次の設定のSecurityGroupを作成する。
- Security Group: ecr-endpoint
- VPC: BatchJobを動かすVPC
- Inbound rules:
- Type: HTTPS
- Source: BatchJobを動かすSubnetのIPアドレス範囲
- Outbound rules:
- Type: HTTPS
- Destination: 0.0.0.0/0
Endpointの作成
AWS Management Consoleで、
VPC → Virtual private cloud / Endpoint → Create Endpointと辿り、
次の設定のEndpointを作成する(2つ作成)。
1つ目
- Name: ecr-api-endpoint
- Service category: AWS Service
- Services: com.amazonaws.(your region).ecr.api
- VPC: BatchJobを動かすVPC
- Subnets: BatchJobを動かすSubnet
- Security Groups: Endpoint用に作成したSecurityGroup (ecr-endpoint)
2つ目
- Name: ecr-dkr-endpoint
- Service category: AWS Service
- Services: com.amazonaws.(your region).ecr.dkr
- VPC: BatchJobを動かすVPC
- Subnets: BatchJobを動かすSubnet
- Security Groups: Endpoint用に作成したSecurityGroup (ecr-endpoint)
AWS BathcのJob実行
AWS Management Consoleで、
AWS Batch → Job definition と辿り、
実行したいJobを選んで「Submit new job」を押下する。
ECRへのアクセスに関するネットワークのエラーが出る場合は、SecurityGroupを確認します。
権限周りのエラーであればExecutionRoleを確認します。
以上。