12
8

Terraformを使用してECS環境構築し、Laravelサイトを立ち上げてみた。

Last updated at Posted at 2023-01-01

はじめに

naritomoと申します。

最近Terraformによるコードでのインフラ作成にハマっていて、
色んなところで使用されているGitHubActionsによるCI/CDにも気になっていたため、
とりあえず一通りの構築ができるTerraform/Laravelソースを公開してみました。

いろいろアドバイスいただけると嬉しいです。

立ち上げ概要

以下のことを実施しています。

  • TerraformによるECSインフラ環境構築

  • Laravelサイトのローカル環境構築/ブランチ更新によるGitHubActionを使用したECS環境への自動デプロイ実施

必要なソースは以下にまとめてあります。

構成図

構築される構成は以下になります。

Terraform(IaC)にてAWS内に構成図のインフラを構築し、
GitHubActionを使用してECS Fargateへlaravelサイトをデプロイします。

image.png

動作確認済みのOS

  • Windows11(wsl2上のUbuntuから稼働)

参考書籍

TerraformでFargateを構築してGitHub Actionsでデプロイ!Laravel編

TerraformでFargateを構築してGitHub Actionsでデプロイ!Laravel編 同人版

本書籍により、かなり理解が進みました。
ありがとうございます。

参考サイト

UbuntuでAWS CLIを使えるようにする

ubuntuにHomebrewをインストール

【初心者向け】MacにTerraform環境を導入してみた

【Route53】AWS上で独自ドメインを取得する方法について解説

Docker Desktop インストール手順

nodejs、npm の最新版をインストールする(Ubuntu)

参考動画

本サイトを構築した後、本動画を見るとよりコンテナサービスについてイメージが
つくかと思います。

事前作業

以下のコマンドを利用できている状態になっていること。(参考サイト参照)

git
→githubアカウント準備までできてること。
docker-compose
aws
→awsアカウント設定まで実施していること。
npm
brew
tfenv

AWSアカウント作成後、Route53にてドメイン取得すること。

またはお名前ドットコム(又は外部サービス)でドメイン取得し、
Route53に結び付けることもできます。

構築方法(インフラ)

ソースを入手する。

以下のgitコマンドで入手する。

git clone https://github.com/naritomo08/laravel-fargate-infra-public.git laravel-fargate-infra
cd laravel-fargate-infra
rm -rf .git

指定バージョン(1.1.3)のterraformを導入する。

tfenv install

ドメイン名設定

Rout53にて外向けドメインを入手し、
以下のファイル内のドメイン名設定を実施する。

vi envs/prod/routing/appfoobar_link/route53.tf
name = "<外向けドメイン名>"を書き換える。

サブドメインを使用したい場合

xxx.<外向けドメイン名>のように使用したい場合、
以下の設定も行うこと。

今後の設定では、xxx.<外向けドメイン名>でドメイン名設定を
実施すること。

envs/prod/network/routing/appfoobar_link/route53.tf

以下の部分を"xxx.<ドメイン名>"に変更する。

name    = data.aws_route53_zone.this.name

envs/prod/network/routing/appfoobar_link/acm.tf

以下の部分を"xxx.<ドメイン名>"に変更する。

domain_name = data.aws_route53_zone.this.name

s3バケット名、dynamodb名変更

全てのソースから以下の名前になっているS3バケット名/dynamodb名を置換する。
特にs3については他の方が使用していない名前にする必要がある。

S3:
terraform-state

dynamodb:
terraform_state_lock

インフラモジュール構築

以下の順番で構築すること。

tfstate用S3
cd tfstate
terraform init
terraform plan
terraform apply

ネットワーク周り
cd ../envs/prod/network/main
terraform init
terraform plan
terraform apply

ALB用ログ取得S3作成
cd ../../log/alb
terraform init
terraform plan
terraform apply

DBロググループ
cd ../../log/db_foobar
terraform init
terraform plan
terraform apply

Laravelロググループ
cd ../../log/app_foobar
terraform init
terraform plan
terraform apply

SSL証明書/DNSCNAME/ALB作成
cd ../../routing/appfoobar_link
terraform init
terraform plan
terraform apply
*6分かかる

ECR/ECS/.env用S3作成
*ECSキャパシティープランナーのエラーが出ても、もう一回行う。
cd ../../app/foobar
terraform init
terraform plan
terraform apply

AIMユーザ/ポリシー/ecspresso設定作成
cd ../../cicd/app_foobar
terraform init
terraform plan
terraform apply

作成コマンド解説:

terraform init
*初回構築実行のみ

terraforn plan
*作成前の確認コマンド
*確認失敗が出た場合適宜対応すること。

terraform apply
terraform apply -target <モジュール名>
*作成失敗が出た場合適宜対応すること。

RDSを作成する

cd ../../db/foobar
terraform init
terraform plan
terraform apply
*12分近くかかる。

RDS/SystemsManagerへのDBパスワード登録

*DB起動時に実施すること。
aws rds modify-db-instance \
--db-instance-identifier "example-prod-foobar" \
--master-user-password "Passw0rd"

*以下のコマンドは初期構築のみでよい。
aws ssm put-parameter \
--name "/example/prod/foobar/DB_PASSWORD" \
--type "SecureString" \
--value "Passw0rd"

Redisを作成する

cd ../../cache/foobar
terraform init
terraform plan
terraform apply
*14分近くかかる。

Redis/RDS CNAMEレコードを作成する

cd ../../routing/foobar_internal
terraform init
terraform plan
terraform apply

EFSを作成する。

EFS作成
cd ../../efs/foobar
terraform init
terraform plan
terraform apply

作成結果から以下の値を控える。
efs_id
efs_point_id

アプリ側の構築実施

続けてアプリ側の構築を実施する。

構築方法(アプリ)

ソースを入手する。

ホームディレクトリにて、
以下のgitコマンドで入手する。

cd
git clone https://github.com/naritomo08/laravel-fargate-app-public.git laravel-fargate-app
cd laravel-fargate-app
rm -rf .git

ローカルdocker立ち上げ

docker-compose build --no-cache --force-rm
docker-compose up -d

.envファイルコピー

cd backend
cp .env.example .env

Laravelコマンド実施

docker-compose exec app composer install -n --prefer-dist --no-dev
docker-compose exec app php artisan key:generate
docker-compose exec app php artisan storage:link
docker-compose exec app chmod -R 777 storage bootstrap/cache

権限設定(macでは不要)

cd ..
sudo chown -R $USER:$USER backend
sudo chgrp -R www-data backend/storage backend/bootstrap/cache
sudo chmod -R ug+rwx backend/storage backend/bootstrap/cache

npmコマンド実施

cd backend
npm ci
npm run prod

DBマイグレート実施

docker-compose exec app php artisan migrate --force

ローカルでのサイト確認

ソースのGit登録

githubでの新規リポジトリを作成していること。

以下のコマンドを入力してソースをgithubに登録する。

[name]は自身のユーザ名,[email]は自身のメールアドレスを入れる。

cd ..
git init
git config --local user.name [name]
git config --local user.email [email]
git add .
git commit -m "first commit"
git branch -M main
git remote add origin <作成したリポジトリパス>
git push -u origin main

.env.prodファイルを更新する。

vi backend/.env.prod

ファイル内容
---------------------

APP_URL=https://<外向けドメイン名>

外向けドメイン名を編集すること。
---------------------

デプロイ設定実施

デプロイ実施ファイルを編集する。

cd .github/workflows
mv deploy.yml.org deploy.yml
vi deploy.yml

修正箇所

run: aws s3 cp .env.$ENV_NAME s3://terraform-state-$SYSTEM_NAME-$ENV_NAME-$SERVICE_NAME-env-file/$IMAGE_TAG/.env
→"terraform-state"のS3バケット名を編集する。

デプロイ設定ファイルも更新する。

cd ../../ecspresso
vi config_prod.yml

修正箇所

url: s3://terraform-state/example/prod/cicd/app_foobar_v1.0.0.tfstate
→"terraform-state"のS3バケット名を編集する。

GitHubへのAWS ID登録

作業実施する前に以下の値を控える。

AWS IAMユーザ一覧から、example-prod-foobar-githubユーザの
アクセスキーを新規作成し、
アクセスキー/シークレットアクセスキーを控える。

GitHubリポジトリページに入り、Settings→secrets→Actionより、
以下の値を追加する。

名前:
PROD_AWS_ACCESS_KEY_ID
→控えたアクセスキーを入れる。
PROD_AWS_SECRET_ACCESS_KEY
→控えたシークレットアクセスキーを入れる。
PROD_AWS_ASSUME_ROLE_ARN
→arn:aws:iam::[AWSアカウントID]:role/example-prod-foobar-deployer

SystemsManagerでのLaravel APP_KEY登録

laravel-fargate-appフォルダで以下のコマンドで入力して出力結果を控える。

docker-compose up -d
docker-compose exec app php artisan key:generate --show
→出てくるコマンド結果を全て控える(base64:も含む。)

AWS SystemsManagerに入り、パラメータストアにて
以下の値を登録する。

名前:
/example/prod/foobar/APP_KEY
値:
先程控えた出力結果。

利用枠は標準とする。
タイプは安全な文字列とする。
KMSキーソースは現在のアカウントとする。
KMSキーIDは「alias/aws/ssm」とする。

以下のコマンドでも登録が可能

aws ssm put-parameter \
--name "/example/prod/foobar/APP_KEY" \
--type "SecureString" \
--value "<前の手順で控えた結果>"

EFS情報登録

以下のコマンドを実施し、EFS情報の登録を実施する。

本ファイルの上の方にそれぞれのコンテナのマウント先を指定しているが、必要に応じ変更すること。

vi ecspresso/ecs-task-def.json

以下の部分について、EFSのパラメータに書き換える。(ファイル最後の部分)
"fileSystemId": "<efs_idの値>",
"accessPointId": "<efs_point_idの値>",

GitHubAction実施

mainブランチへのコミット/プッシュを実施して、
正常にGitHubActionが稼働することを確認する。

稼働状況はgithubの対象リポジトリのActionタブから確認できる。

コミットするものがない場合、以下のコマンドで実施が可能。

git commit --allow-empty -m "empty commit"
git push

失敗した場合は、何回かジョブ再実施してみて、同じところで失敗する場合、
構築している手順に漏れが無いか確認すること。

以降はmainブランチ更新で自動的にデプロイされる。

ECSサイト確認

以下のURLサイトを参照する。

https://<外向けドメイン名>

サービス一時削除/起動方法(インフラソースで実施)

一時削除の際は次の項目から実施し、起動の際は反対から行う。

余計な課金を防ぐため、なるべく環境を使用しない際は本作業で削除しておくとよい。

状況によってはRDS/Redis/CNAMEレコードを残してもよい。

ECSサービス削除/起動

サービス起動後、タスクが自動的に起動しないため、
アプリブランチでのmainブランチコミット/プッシュ
でタスクを立ち上げること。

またはgithubのActionページから最近実行したActionを動かすこと。

cd laravel-fargate-infra/envs/prod/app/foobar
terraform destroy -target aws_ecs_service.this
terraform apply

Redis/RDS CNAMEレコード削除/起動

cd laravel-fargate-infra/envs/prod/routing/foobar_internal
terraform destroy
terraform apply

Redis削除/起動

cd laravel-fargate-infra/envs/prod/cache/foobar
terraform destroy
terraform apply
*14分近くかかる。

RDS削除/起動

cd laravel-fargate-infra/envs/prod/db/foobar
terraform destroy
terraform apply
*12分近くかかる。

RDS/SystemsManagerへのDBパスワード登録

*RDS起動時に実施すること。
aws rds modify-db-instance \
--db-instance-identifier "example-prod-foobar" \
--master-user-password "Passw0rd"

*以下のコマンドは初期構築のみでよい。
aws ssm put-parameter \
--name "/example/prod/foobar/DB_PASSWORD" \
--type "SecureString" \
--value "Passw0rd"

ALB削除/起動

cd laravel-fargate-infra/envs/prod/routing/appfoobar_link
terraform apply -var='enable_alb=false'
terraform apply

NAT削除/起動

cd laravel-fargate-infra/envs/prod/network/main
terraform apply -var='enable_nat_gateway=false'
terraform apply

別ソースから本環境に入れてのECS立ち上げ(アプリソースで実施)

以下の手順で別途立ち上げているLaravelソースを立ち上げることができます。

新規作成の場合、予めインフラリソースを作成していること。

アプリベースソース入れ直し(Laravel9/10の場合)

以下の操作でphp8.2版アプリベースソースを入手する。

cd
git clone -b main2 https://github.com/naritomo08/laravel-fargate-app-public.git laravel-fargate-app
cd laravel-fargate-app
rm -rf .git

上記作業実施後新たにリポジトリを作成しプッシュしておくこと。

git init
git config --local user.name [name]
git config --local user.email [email]
git add .
git commit -m "first commit"
git branch -M main
git remote add origin <作成したリポジトリパス>
git push -u origin main

mainソースから別ブランチを作る。

ブランチ名はsitetestにしておく。

backendフォルダを削除する。

sudo rm -rf backend

backendフォルダでgit cloneを実施する。

git clone <gitソースURL> backend
cd backend
rm -rf .git

.env.prodファイルを作成する。

vi backend/.env.prod

ファイル内容
下記以外必要なパラメータがあれば随時追記すること。
---------------------
APP_NAME=foobar
APP_ENV=production
# APP_KEY=parameter_store
APP_DEBUG=false
APP_URL=https://<外向けドメイン名>←編集すること。

LOG_CHANNEL=stderr
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=db.foobar.internal
DB_PORT=3306
DB_DATABASE=foobar
DB_USERNAME=foobar
# DB_PASSWORD=parameter_store

SESSION_DRIVER=redis
SESSION_LIFETIME=120

REDIS_HOST=cache.foobar.internal
REDIS_PASSWORD=null
REDIS_PORT=6379
---------------------

deploy.shファイルを作成する。

cd backend
mkdir scripts
vi deploy.sh

ファイル内容
ECSコンテナ立ち上げるコマンドになるため、
他に必要なものがあれば追加すること。
---------------------
#!/bin/bash

set -eu

php artisan storage:link
php artisan config:cache

chown -R www-data:www-data /work/backend/storage

php-fpm
---------------------

chmod +x deploy.sh

ローカル立ち上げ直し

docker-compose build --no-cache --force-rm
docker-compose up -d

.envファイル作成

cd backend
cp ../.env.example .env

* cpコマンド前に編集が必要なところあれば編集すること。

Laravelコマンド実施

docker-compose exec app composer install -n --prefer-dist --no-dev
docker-compose exec app php artisan key:generate
docker-compose exec app php artisan storage:link
docker-compose exec app chmod -R 777 storage bootstrap/cache

権限設定(macでは不要)

sudo chown -R $USER:$USER backend
sudo chgrp -R www-data backend/storage backend/bootstrap/cache
sudo chmod -R ug+rwx backend/storage backend/bootstrap/cache

npmコマンド実施

cd backend
npm ci
npm run prod

合わせて、以下のフォルダについて"backend/.gitignore"でコメントアウトすること。

/public/css
/public/js
/public/mix-manifest.json

httpsアクセス許可

cd backend/app/Http/Middleware
vi TrustProxies.php

protected $proxies;
protected $proxies = "*";
→上記を下記に修正する。

DBマイグレート実施

docker-compose exec app php artisan migrate --force

ローカルでのサイト確認

デプロイ設定実施

デプロイ実施ファイルを編集する。

cd .github/workflows
mv deploy.yml.org deploy.yml
vi deploy.yml

修正箇所

on:
  push:
    branches:
      - main
      - sitetest ←追記する

  if: github.ref == 'refs/heads/main'
  if: github.ref == 'refs/heads/sitetest'
  →2箇所ある上記記載について、上から下に修正する。

run: aws s3 cp .env.$ENV_NAME s3://terraform-state-$SYSTEM_NAME-$ENV_NAME-$SERVICE_NAME-env-file/$IMAGE_TAG/.env
→"terraform-state"のS3バケット名を編集する。

デプロイ設定ファイルも更新する。

cd ../../ecspresso
vi config_prod.yml

修正箇所

url: s3://terraform-state/example/prod/cicd/app_foobar_v1.0.0.tfstate
→"terraform-state"のS3バケット名を編集する。

GitHubへのAWS ID登録

作業実施する前に以下の値を控える。

AWS IAMユーザ一覧から、example-prod-foobar-githubユーザの
アクセスキーを新規作成し、
アクセスキー/シークレットアクセスキーを控える。

GitHubリポジトリページに入り、Settings→secrets→Actionより、
以下の値を追加する。

名前:
PROD_AWS_ACCESS_KEY_ID
→控えたアクセスキーを入れる。
PROD_AWS_SECRET_ACCESS_KEY
→控えたシークレットアクセスキーを入れる。
PROD_AWS_ASSUME_ROLE_ARN
→arn:aws:iam::[AWSアカウントID]:role/example-prod-foobar-deployer

SystemsManagerでのLaravel APP_KEY登録

laravel-fargate-appフォルダで以下のコマンドで入力して出力結果を控える。

docker-compose up -d
docker-compose exec app php artisan key:generate --show
→出てくるコマンド結果を全て控える

AWS SystemsManagerに入り、パラメータストアにて
以下の値を登録する。

名前:
/example/prod/foobar/APP_KEY
値:
先程控えた出力結果。

利用枠は標準とする。
タイプは安全な文字列とする。
KMSキーソースは現在のアカウントとする。
KMSキーIDは「alias/aws/ssm」とする。

以下のコマンドでも登録が可能

aws ssm put-parameter \
--name "/example/prod/foobar/APP_KEY" \
--type "SecureString" \
--value "<前の手順で控えた結果>"

EFS情報登録

以下のコマンドを実施し、EFS情報の登録を実施する。

本ファイルの上の方にそれぞれのコンテナのマウント先を指定しているが、必要に応じ変更すること。

vi ecspresso/ecs-task-def.json

以下の部分について、EFSのパラメータに書き換える。(ファイル最後の部分)
"fileSystemId": "<efs_idの値>",
"accessPointId": "<efs_point_idの値>",

GitHubAction実施

mainブランチへのコミット/プッシュを実施して、
正常にGitHubActionが稼働することを確認する。

稼働状況はgithubの対象リポジトリのActionタブから確認できる。

コミットするものがない場合、以下のコマンドで実施が可能。

git commit --allow-empty -m "empty commit"
git push

失敗した場合は、何回かジョブ再実施してみて、同じところで失敗する場合、
構築している手順に漏れが無いか確認すること。

編集後”sitetest"へのコミット/プッシュを実施して、
正常にGitHubActionが稼働することを確認する。

ECSサイト確認

以下のサイトを参照する。

https://<外向けドメイン名>

ECSタスク数変更方法(アプリソースで実施)

標準ではタスク数が1つしか立ち上がらないが、
以下の方法で増やすことができる。

cd ecspresso
vi ecs-service-def.json

変更箇所:

"desiredCount": 2,

→"desiredCount"の数字を変更する。

mainブランチにコミットしてタスクを更新後、
ECSのタスク数が変更されることを確認する。

環境削除(アプリ)

デプロイ設定実施

cd .github/workflows
mv deploy.yml deploy.yml.org

コミット・デプロイを実施してActionが稼働しないことを確認する。

docker環境の削除を実施する。

docker-compose down

作業フォルダ削除する。

sudo rm -rf laravel-fargate-app

GitHubへのAWS情報登録解除

GitHubリポジトリページに入り、Settings→secrets→Actionより、
以下の値を削除する。

名前:
PROD_AWS_ACCESS_KEY_ID
PROD_AWS_SECRET_ACCESS_KEY
PROD_AWS_ASSUME_ROLE_ARN

SystemsManagerでのLaravel APP_KEY/DB_PASS削除

AWS SystemsManagerに入り、パラメータストアにて
以下の値を削除する。

名前:
/example/prod/foobar/APP_KEY
/example/prod/foobar/DB_PASS

環境削除(インフラ)

ECSサービスを削除する。

cd laravel-fargate-infra/envs/prod/app/foobar
terraform destroy -target aws_ecs_service.this

Redis/RDS CNAMEレコードを削除する。

cd ../../routing/foobar_internal
terraform destroy
terraform state list

Redisを削除する。

cd ../../cache/foobar
terraform destroy
→6分かかる
terraform state list

RDSを削除する。

cd ../../db/foobar
terraform destroy
→6分かかる
terraform state list

ALBを削除する。

cd ../../routing/appfoobar_link
terraform apply -var='enable_alb=false'

NATを削除する。

cd ../../network/main
terraform apply -var='enable_nat_gateway=false'

ECSデプロイ用アカウントアクセスキー削除

AWS IAM管理画面から、example-prod-foobar-githubユーザの
アクセスキーを削除する。

その他モジュール削除(Terraform)

以下の順番で削除すること。

EFS
cd ../../efs/foobar
terraform destroy
terraform state list

AIMユーザ/ポリシー/ecspresso設定
cd ../../cicd/app_foobar
terraform destroy
terraform state list

Laravelロググループ
cd ../../log/app_foobar
terraform destroy
terraform state list

DBロググループ
cd ../../log/db_foobar
terraform destroy
terraform state list

ECR/ECS/.env用S3
手動でECR内のリポジトリを削除する。
*ECSキャパシティープランナーのエラーが出ても、もう一回行う。
cd ../../app/foobar
terraform destroy
terraform state list

SSL証明書/DNSCNAME/ALB
cd ../../routing/appfoobar_link
terraform destroy
terraform state list

ALB用ログ取得S3
*バケットエラーが出ても、もう一度行う。
cd ../../log/alb
terraform destroy
terraform state list

ネットワーク周り
cd ../../network/main
terraform destroy
terraform state list

tfstate用S3
cd
cd laravel-fargate-infra/tfstate
terraform destroy
terraform state list

削除コマンド解説

terraform destroy
terraform destroy -target <モジュール名>

以下のコマンドを入力して、残っているモジュールがないことも確認すること。

terraform state list
リスト確認
結果で残っているモジュールがないか確認できる。
残っているものがある場合"aws_"で始まるモジュールを削除するか、
管理コンソール画面から手動で削除すること。

削除しきれていないモジュールの削除

AWS IAM管理画面に入り、以下の設定を削除する。

ロール:
AWSServiceRoleForECS
AWSServiceRoleForElastiCache
AWSServiceRoleForElasticLoadBalancing
AWSServiceRoleForRDS
AWSServiceRoleForAmazonElasticFileSystem

作業フォルダ削除する。

sudo rm -rf laravel-fargate-infra

課金確認

1日放置して、課金されているところがないか確認する。

書籍からの手順修正箇所

参考書籍の内容で構築して私が引っかかった部分を記載します。

1.5.1 Larabel Breezeインストールコマンド

docker-compose exec app composer require laravel/breeze:1.10 --dev

1.5.5 トランスコンパイル実行

コンテナでのnpm系コマンド実施前に、以下のコマンドを直前に行うこと。

macでは必要ない。

sudo chown -R root:root backend

作業後は以下のコマンドを入力して使用できるようにする。

sudo chown -R $USER:$USER backend
sudo chgrp -R www-data backend/storage backend/bootstrap/cache
sudo chmod -R ug+rwx backend/storage backend/bootstrap/cache

コンテナでのnpm系コマンド実施しなくても、いきなり上記の権限修正後
backendフォルダ内で"npm run prod"を稼働しても良い。

ログイン確認した際に画面がおかしくなった場合

vite使用箇所の修正をする。

以下のコマンドを入れる。

sudo rm -f backend/vite.config.js
cd /backend/resource/views/layouts/
sudo vi app.blade.php
sudo vi guest.blade.php

書き換え内容

変更前

        <!-- Scripts -->
        @vite(['resources/css/app.css', 'resources/js/app.js'])

変更後

        <!-- Styles -->
        <link rel="stylesheet" href="{{ asset('css/app.css') }}">

        <!-- Scripts -->
        <script src="{{ asset('js/app.js') }}" defer></script>

make npm-devを実施して、正常に画面表示されるか確認すること。

参照先URL

4.16 トランスコンパイル実行

deploy.ymlでの以下行はなぜかgithubAction上の環境では動かないため、
対象コマンドはコメントアウトすること。

- run: docker-compose exec -T web npm run prod

合わせて、以下のフォルダについて"backend/.gitignore"でコメントアウトすること。

/public/css
/public/js
/public/mix-manifest.json

git rm -r --cached .
→コメントアウト後上記コマンドを入力しコミット/プッシュすること。

7.11.2 ECSサービスの作成

参考書籍を参考中ではそのままで問題ないが、
ECSタスクをecspressoで管理するようになったときは、
以下の書き換えを行いスクが自動稼働しないようにすること。

vi laravel-fargate-infra/envs/prod/app/foobar/variables.tf

以下の部分を書き換える(1を0にする。)
default = 0

ECSサービスヘルスチェックについて、
現状の設定の60秒ではタスクを5などに増やしたとき、
ヘルスチェックに間に合わずタスク再起動が発生し
デプロイし直しが繰り返し発生するため
以下の修正を初回設定時点で行うとよい。

vi laravel-fargate-infra/envs/prod/app/foobar/ecs.tf

以下の部分を書き換える(60を3600にする。)
health_check_grace_period_seconds = 3600

8.6 GitHub Actionによるデプロイ

デプロイ部分追記について以下の内容に修正する。

- name: Download ecspresso
        uses: kayac/ecspresso@v1
        with:
          version: latest

8.7 サービスとタスク定義をTerraform管理外にする。

管理外にすると、ECSサービス削除が行えなくなるため、
実施しなくてもよい。

おわりに

本サイトについて駆け足で作成しているところもあるため、
自分でも誤りや問題に気づきましたら修正いたします。

気になるところなどありましたら、色々コメント頂けますと
嬉しいです。

12
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8