AWS Batch(Fargate)で、
Subnet外にアクセスできないPrivateSubnet上の
ComputingEnvironmentでECRのPrivateRepositoryからimageをpullして実行する手順をまとめておきます。

作成するシステムの構成は、次の図のとおりです。

awsbatch-1

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を確認します。

以上。