https://zenn.dev/ponta/articles/a0437927ce0c6a

og-base_z4sxah.png

はじめに

元々、AWS Elastic Beanstalkで動いていたAPIサーバをFargateに移行しました。 移行作業で行ったことを書いていきます。

なぜ移行したのか

以上の理由から移行することにしました。

その1 Dockerfileを本番用に修正

まず、開発環境でDockerを利用していたものの、Fargateで利用することを考慮していなかったため、Docker環境を修正しました。 ちなみにAPIサーバはLaravelを使用しており、Nginx & Laravelの構成にしました。

一点だけNginxとLaravel間はTCPで通信しているのですが、 ローカルとFargateではネットワークが異なるため、

${PHP_HOST}としてDocker起動時にsedで書き換えることにしました。

その2 既存インフラのコード化

次に既存インフラのコード化していきました。 既存インフラは既にサービスとして動いていたので、Terraformを使用して慎重にコード化していきました。 最初はAWS CDKで構築しようか迷っていたのですが、情報量の多さからTerraformを選択しました。

その3 Fargate環境の作成

次にFargate環境をTerraformで作成していきました。

ECR Dockerイメージをプッシュする場所としてECRを作成しました。 M1 MacでビルドしたイメージはFargateのLinux環境で使用できなかったため、DockerのビルドとプッシュはGitHub Actionsで自動化することにしました。
ECS クラスター作成、タスク定義作成、サービスの作成を行った後でサービスの更新(デプロイ)はGitHub Actionsで自動化することにしました。 `amazon-ecs-render-task-definition`を利用することでタスク定義の更新とサービス更新(デプロイ)が自動化できます。