AWS Batch
AWS Batch は、リージョン内の複数のアベイラビリティーゾーン間で実行中のバッチジョブを簡略化するリージョナルサービスです。
https://gyazo.com/8f9f41eaf7e46f40955654776f6ef272
https://gyazo.com/133f9cff9c9697ef755cfec8e45b0bf0
hiroki.iconBatchでコンピューティング環境(minvcpu 0)だけ用意しておいて、使いたい時にJobを登録するという使い方をすれば料金はオンデマンドでインスタンスの面倒をみる必要もないから最強のコンピューティング環境になるな
運用なし
必要なだけのリソースがその場で立ち上がる
いつでもReady
code:terraform
// コンピュート環境用意
// min_vcpus=0でお金かからない
resource "aws_batch_compute_environment" "general_batch" {
compute_environment_name = "general-batch"
compute_resources {
type = "SPOT"
spot_iam_fleet_role = "${aws_iam_role.ec2_spot_fleet_role.arn}"
bid_percentage = "${var.spot_bid_percentage}"
subnets = "${var.subnets}"
security_group_ids = "${var.security_groups}"
instance_role = "${aws_iam_instance_profile.ecs_instance_role.arn}"
instance_type = "${var.instance_types}"
image_id = "${var.image_id}"
min_vcpus = "${var.instance_settings"min_vcpus"}"
max_vcpus = "${var.instance_settings"max_vcpus"}"
tags {
Name = "aws-batch-${local.name}-for-image-${terraform.workspace}"
}
}
service_role = "${aws_iam_role.aws_batch_service_role.arn}"
state = "ENABLED"
type = "MANAGED"
depends_on = "aws_iam_role_policy_attachment.aws_batch_service_role"
lifecycle {
ignore_changes = [
"compute_resources.0.desired_vcpus",
]
}
}
// ジョブキューの用意
resource "aws_batch_job_queue" "general_batch_queue" {
name = "general-batch-queue"
state = "ENABLED"
priority = 1
compute_environments = "${aws_batch_compute_environment.factor_visualization_for_image.arn}"
}
hiroki.iconJobはawscliなどからやる。ここではコンピューティングreadyにするだけ
必要なロール
バッチクラスターの作成に必要なロール
aws batchサービスロール
aws batchがawsサービスを呼び出せる。
EC2SpotFleetロール
スポットフリートがec2にタグ付を行うため
ECSインスタンスロール
ECSのコンテナに付与されるロール。バッチのプログラムに必要な権限を割り当てる
ECSクラスターのEC2/Fargateに割り当てられるロール。EC2インスタンスプロファイルで渡すことになる
ジョブ定義でのロール
ジョブロール
コンテナに付与されるロール
実行ロール
ECSエージェントに付与されるロール。ECSのタスク実行ロールに同じ
ロググループとかを作れるようにecsTaskExecutionRoleを与えてやる
ログの設定はジョブ定義で行う
https://gyazo.com/29b4528a17f201dbd0d5073bc6cc1319
hiroki.icon上のようなoption項目がある。terraformで使う
youtube-backup:github
ジョブ定義のコンテナプロパティ
https://docs.aws.amazon.com/batch/latest/APIReference/API_RegisterJobDefinition.html
ジョブをsubmitする時のプロパティ
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/batch.html#Batch.Client.submit_job
依存関係
N_TO_NでジョブIDを指定して前段のジョブが正常終了した時に後続を実行できる
hiroki.iconこの依存関係で表現が難しい場合はAWS Step Functionsを利用する