{Batch}より少ないコストで大規模なバッチジョブを実行する

https://aws.amazon.com/jp/getting-started/hands-on/run-batch-jobs-at-scale-with-ec2-spot/
https://zenn.dev/takamin55/articles/a44ba888ebca3a

 


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version


-- 1.2 jqインストール
sudo yum -y install jq


-- 2. IAMポリシー作成

vim policy01.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "*"
    }
  ]
}

 

aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json


-- 3. IAMロール作成
vim role01.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}


aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json


-- 4. ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--role-name role01

 

-- 5. EC2 スポットインスタンスを基盤とするコンピューティング環境を作成する


aws batch create-compute-environment \
--compute-environment-name env01 \
--type MANAGED \
--state ENABLED \
--compute-resources ' {
                "type": "FARGATE_SPOT",
                "maxvCpus": 256,
                "instanceTypes": ,
                "subnets": [
                    "subnet-11111111111111111",
                    "subnet-22222222222222222",
                    "subnet-33333333333333333"
                ],
                "securityGroupIds": [
                    "sg-44444444444444444"
                ],
                "tags": {},
                "ec2Configuration":

            }' \
--service-role arn:aws:iam::999999999999:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch

 

aws batch describe-compute-environments

aws ecs list-clusters

 

-- 6. ジョブキューを作成する


aws batch create-job-queue \
--job-queue-name jq01 \
--state ENABLED \
--priority 1 \
--compute-environment-order '[
                {
                    "order": 1,
                    "computeEnvironment": "arn:aws:batch:ap-northeast-1:999999999999:compute-environment/env01"
                }
            ]'

aws batch describe-job-queues

 

-- 7. ジョブ定義を作成する

aws batch register-job-definition \
--job-definition-name def01 \
--type container \
--parameters '{}' \
--container-properties '{
                "image": "public.ecr.aws/amazonlinux/amazonlinux:latest",
                "command": [
                    "echo",
                    "hello world"
                ],
                "executionRoleArn": "arn:aws:iam::999999999999:role/role01",
                "volumes": ,
                "environment":
,
                "mountPoints": ,
                "ulimits":
,
                "resourceRequirements": [
                    {
                        "value": "1",
                        "type": "VCPU"
                    },
                    {
                        "value": "2048",
                        "type": "MEMORY"
                    }
                ],
                "secrets": [],
                "networkConfiguration": {
                    "assignPublicIp": "ENABLED"
                },
                "fargatePlatformConfiguration": {
                    "platformVersion": "1.4.0"
                }
            }' \
--no-propagate-tags \
--timeout '{
                "attemptDurationSeconds": 180
            }' \
--platform-capabilities '[ "FARGATE" ]'

 

aws batch describe-job-definitions


-- 8. ジョブを実行して結果を確認する


aws batch submit-job \
--job-name job01 \
--job-queue jq01 \
--job-definition def01:1 \
--container-overrides '{
    "resourceRequirements": [
        {
            "value": "0.25",
            "type": "VCPU"
        },
        {
            "value": "512",
            "type": "MEMORY"
        }
    ]
}'

 


aws batch list-jobs \
--job-queue jq01

aws batch describe-jobs \
--jobs 55555555-5555-5555-5555-555555555555

 


-- 9. クリーンアップ

-- ジョブ定義の削除

aws batch describe-job-definitions

aws batch deregister-job-definition \
--job-definition def01:1

 

 

-- ジョブキューの削除

aws batch describe-job-queues

aws batch update-job-queue \
--job-queue jq01 \
--state DISABLED

aws batch delete-job-queue \
--job-queue jq01

 

-- コンピューティング環境の削除

aws batch describe-compute-environments

aws batch update-compute-environment \
--compute-environment env01 \
--state DISABLED

aws batch delete-compute-environment \
--compute-environment env01

 

aws ecs list-clusters

 

-- IAMロールの削除
aws iam list-roles | grep role01

aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::999999999999:policy/policy01

aws iam delete-role --role-name role01


-- IAMポリシーの削除
aws iam list-policies | grep policy01

aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01

 

-- S3バケットの削除