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ポリシー作成
{
"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
{
"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バケットの削除