[アップデート] TerraformでECS FargateのCPUアーキテクチャにARM64を指定できるようになりました

TerraformでECS FargateのCPUアーキテクチャにARM64を指定できるようになったので、アップデート内容をまとめました。
2021.12.14

この記事は公開されてから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_definitionruntime_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イメージアーキテクチャを検討していた方にとって、待望のアップデートだったのではないでしょうか。

この記事が、どなたかのお役に立てば幸いです。それでは!