この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!コンサル部のinomaso(@inomasosan)です。
2021/11/23のAWSアップデートでFargateがGraviton2に対応しました。
このアップデートを受けTerraformでもAWSプロバイダーのv3.69.0より、CPUアーキテクチャにARM64を指定できるようになりました!
概要
2021/12/10にv3.69.0で#22016のプルリクがマージされました。
このアップデートによりaws_ecs_task_definition
にruntime_platform
が追加され、Fargateのタスクが実行されるオペレーティングシステムにLinuxやWindows Server 2019、CPUアーキテクチャにX86_64やARM64を指定できるようになりました。
以下、Pull Requestに記載されているサンプルコードとなります。
runtime_platform {
operating_system_family = "WINDOWS_SERVER_2019_CORE"
cpu_architecture = "X86_64"
}
やってみた
ARM64に対応したコンテナイメージを起動できるか試してみました。
検証環境
今回実行した環境は以下の通りです。
項目 | バージョン |
---|---|
macOS BigSur | 11.6.1 |
Terraform | 1.0.7 |
AWSプロバイダー | 3.69.0 |
ARM64イメージアーキテクチャを明示的に指定
弊社の以下ブログを参考に、Docker Hubからイメージのアーキテクチャを指定します。
今回はDIGESTを指定で、nginxのARM64イメージアーキテクチャをFargateで起動させます。
Terraformコード
ECSタスク定義
runtime_platform
にFargateのオペレーティングシステムとCPUアーキテクチャを指定します。
aws_ecs_task.tf
resource "aws_ecs_task_definition" "task" {
family = "nginx-task"
#0.25vCPU
cpu = "256"
#0.5GB
memory = "512"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
container_definitions = file("./container_definitions.json")
runtime_platform {
operating_system_family = "LINUX"
cpu_architecture = "ARM64"
}
}
コンテナ定義
image
に先ほど調べたDIGESTを、:@sha256:
で指定します。
container_definitions.json
[
{
"name": "nginx-container",
"image": "nginx:latest@sha256:f3d58e8e62f8e897e13e60fcef9802a6de34c6adc83aa18ca5397fa7d6121a0b",
"essential": true,
"memory": 128,
"portMappings": [
{
"protocol": "tcp",
"containerPort": 80
}
]
}
]
確認
コンテナ起動が完了し、nginxのページが表示されることを確認できました。
またAWSマネージメントコンソール上からタスク定義を確認したところruntimePlatform
は意図した通りに定義されていました。
"runtimePlatform": {
"cpuArchitecture": "ARM64",
"operatingSystemFamily": "LINUX"
},
"requiresCompatibilities": [
"FARGATE"
],
参考URL
まとめ
Terraformを利用中でARM64イメージアーキテクチャを検討していた方にとって、待望のアップデートだったのではないでしょうか。
この記事が、どなたかのお役に立てば幸いです。それでは!