🦎
LaravelをコマンドのみでFargateにデプロイする
はじめに
この記事では、コマンドのみでLaravelをAWSのFargateにデプロイする方法について解説しています。
これまで、AWSのリソースをコンソール画面で操作してデプロイしていましたが、画面が頻繁に変更されるため、毎回手動での操作が煩わしく感じられました。
そこで、CloudFormationというサービスを利用し、インフラをコードで管理することにしました。
これにより、インフラの構築をコマンドだけで実行できるようになりました。
この記事が、Laravelを手軽にデプロイしたい方々の役立てば幸いです。
サンプルリポジトリ
完成構築図
事前準備
以下が事前に済んでいることが必要です。
- AWSCLI のインストールと設定
- docker のインストール
- rainのインストール
ディレクトリ構造
プロジェクトルート
├── cloudformation-v2 - AWS CloudFormation設定とスタック
│ ├── output - CloudFormationの出力
│ ├── stacks - スタック定義
│ └── main.yml - メイン設定ファイル
├── src - ソースコード
├── storage - コンテナ内のデータ保存場所
├── tools - プロジェクトツールとスクリプト
│ ├── aws-ecr-login.sh - ECRログインスクリプト
│ └── util.sh - ユーティリティスクリプト
├── .env.example - 環境変数のサンプル
├── .gitignore - Git除外設定
├── README.md - プロジェクト説明
└── docker-compose.yml - Dockerコンテナ設定
取り敢えずデプロイしてみる
1. リポジトリをクローン
cd <プロジェクトを配置するお好みの場所>
git clone git@github.com:yoppyDev/laravel-fargate-cloudformation.git
2. .envファイルを作成 & 編集
cp .env.example .env
cp src/.env.example src/.env
基本的にAWS_ACCOUNT_IDを設定するだけで動きます。
(好みで他の設定も変更してください。)
.env
PJPrefix=laravel-template # プロジェクト名
REGIN=ap-northeast-1 # AWSのリージョン設定
AWS_ACCOUNT_ID= # AWSのアカウントID
REGISTRY_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${REGIN}.amazonaws.com # ECRのレジストリURL
AWS_PROFILE=default # 使用するAWSのプロファイル
APP_KEY=base64:3OwLTx5+HLa8OaNVl3rhayWkV4punTPx0WRGXWSAkJo= # Laravelアプリのキー
DATABASE=laravel # 使用するデータベース名
DB_USERNAME=master # データベースのユーザー名
DB_PASSWORD=password # データベースのパスワード
3. ParameterStore作成
sh tools/util.sh createSystemParameter
4. ECR作成
sh tools/util.sh createEcr
5. buildしてpush
sh tools/aws-ecr-login.sh
sh tools/util.sh baseBuild
sh tools/util.sh basePush
sh tools/util.sh build
sh tools/util.sh push
6. S3バケット作成
sh tools/util.sh createBucket
7. デプロイ
sh tools/util.sh subDeploy -y
デプロイ確認
以下からタスクに移動して、Public IPにアクセスしてみてください
このように表示されれば成功です。
8. migrate
--task
にECSのタスクのARNを指定して以下のコマンドを実行してください。
aws ecs execute-command \
--cluster laravel-template-cluster \
--task <ECSタスクのARNを指定する> \
--container nginx \
--interactive \
--command 'php artisan migrate --force'
このようにmigrateのログが表示されれば成功です🎉
環境削除
# スタックを確認
aws cloudformation list-stacks
# スタックを削除
aws cloudformation delete-stack --stack-name <stack名>
ローカルで動作確認
# コンテナ立ち上げ
docker-compose up -d
# コンテナに入る
docker-compose exec nginx bash
---以下コンテナ内で実行---
# composer install
composer install
# npm install & build
npm install
npm run build
# migrate
php artisan migrate
このように表示されれば成功🎉
まとめ
Cloud Formation を使って AWS 上に Laravel の環境を構築する手順でした。
個人で運用するにはAWSは高いですね。。。😇
RDSをPlanetScaleとかに変えたり対策は必要そうです。
また、ECSをPublicサブネットに配置しているのもPrivateサブネットに配置した場合、Nat Gatewayが必要です。
しかし、これを個人で運用する場合かなり高いのでPublicサブネットに配置しています。
次回は設定した内容の解説した記事を書こうと思います。
もし興味があれば閲覧して頂ければ思います。
Discussion