hoomin.kani

KANISAN WEB

インフラ・サーバーサイドを頑張るカニが学んだあれこれ。

ECS on EC2からFargateへの移行(Terraform ver.)

f:id:hoominkani:20190824182840p:plain

はじめに

元々WebシステムをECS on EC2で管理していましたが、EC2の管理から解き放たれるべく、そのままFargateへと移行しました。

今回は移行の際にどのような変更が必要であったかを共有します。

なお、インフラリソースの管理はTerraform v0.11.10を使用しました。

変更対象のリソース

  • EC2
    • 管理不要のため削除
    • 踏み台サーバのみ管理
  • ECS
    • 詳細な変更内容に関しては下記参照

ECS 変更箇所

タスク定義

削除したもの

  • mountPoints
    • ホストサーバとマウントをすることはできないので削除
"mountPoints": [
    {
        "sourceVolume": "${PATH}",
        "containerPath": "${CONTAINER_PATH}"
    }
]
  • volume
 volume {
  name = "nginx.conf"
  host_path = "/nginx.conf"
}
  • portMappings
"hostPort": 80
  • link
    • link設定はできないので削除
"links": [
    "app:app"
]

追加したもの

  • requires_compatibilities
  • network_mode
resource "aws_ecs_task_definition" "app" {
  requires_compatibilities = ["FARGATE"]
  network_mode             = "awsvpc"
}

変更したもの

  • cpu
  • memory

ECS on EC2では自由に設定できていたが、Fargateではあらかじめ定められたパラメータの中から選択することになる。

※ 2018/12/06 現在時点でのパラメータ

CPU メモリ ※1GB=1024
256 512 / 1024 / 2048
512 1024 / 2048 / 3072 / 4096
1024 2048 / 3072 / 4096 / 5120 / 6144 / 7168 / 8192
2048 4096 ~ 16384 ※1024ずつの加算
4096 8192 ~ 30720 ※1024ずつの加算

ECS Service変更箇所

追加したもの

  • Fargate
launch_type = "FARGATE"
 network_configuration {
   subnets = [
     "${aws_subnet.fastladder_public_a.id}",
     "${aws_subnet.fastladder_public_c.id}",
    ]
   security_groups = [
     "${aws_security_group.fastladder_alb.id}",
     "${aws_security_group.fastladder_web.id}",
   ]
   assign_public_ip = "ENABLED"
 }
  • iam_role
execution_role_arn       = "arn:aws:iam::${var.aws_id}:role/ecsAdminRole"

ターゲットグループ変更箇所

追加したもの

  • target_type

Fargateの場合、ターゲットグループのtarget_typeにはipを設定する必要がある。

target_type = "ip"

終わりに

今回は必要最低限の変更内容に関してまとめました。

(EC2のuserdataで実行させていたコマンドを別に移動など、プロジェクトによって別の作業が必要になるケースもありますので、以降前にはご確認を!)