TerraformでFargateを構築してGitHub ActionsでLaravelをデプロイする

はじめに

nginx + Laravel + MySQL + Redisで構成されるアプリケーションをAWS(Fargate + RDS + ElastiCache)に構築する方法をまとめた技術書を執筆しました(全310ページ)。

AWSの各リソースはTerraformで構築し、デプロイはGitHub Actionsで行います。

boothと技術書典オンラインマーケットで公開しています。

booth

技術書典

対象読者

  • LaravelをAWS Fargateに⾃動デプロイする⽅法を知りたい⼈
  • 上記のAWS環境をTerraformで構築する⽅法を知りたい⼈
  • GitHub Actions の基本的な使い⽅を知りたい⼈

これらを実際に手を動かしながら効率良く学びたい方におすすめです。

章立て

  1. Laravelアプリケーションの作成
  2. Terraformのセットアップ
  3. ECRの構築とTerraformの基本操作
  4. GitHub ActionsでイメージをECRにプッシュする
  5. ネットワーク(VPC)の構築
  6. ドメインの取得とロードバランサーの構築
  7. ECS(Fargate)の構築
  8. GitHub ActionsでFargateにデプロイする
  9. Laravelとnginxを本番環境向けに修正する
  10. RDSとプライベートホストゾーンの構築
  11. ElastiCache(Redis)の構築

サンプルコード

本書で取り扱うコードは GitHub で公開しています。

書籍の各章終了時点のコードも⽤意しており、それらへのリンクは、各章の冒頭に記載するようにしています。

環境

本書は、MacOS(非M1) で動作確認を⾏なっています。

その他、使⽤するバージョンは以下の通りです。

  • Laravel 8.*
  • nginx 1.20
  • MySQL 8.0
  • Redis 6.*
  • Terraform 1.0.0
  • Terraform の AWS プロバイダ 3.38.0
  • AWS Fargate 1.4.0

本書で学べる内容

Terraform

  • init/plan/apply/destroy
  • state list/state show/state pull/state mv
  • variable/output/LocalValue/count/for_each/三項演算子
  • jsonencode/keys/values
  • module/remote state/data source
  • S3を使ったtfstate管理方法
  • リソースのライフサイクルを考慮したtfstate分割
  • tfenvの使用方法
  • 各種AWSリソースの作成方法
    • VPC/サブネット/Elastic IP/セキュリティグループ
    • インターネットゲートウェイ/NATゲートウェイ
    • Route53/ACM/ALB
    • ECR/ECS
    • RDS/ElastiCache
    • IAM/S3/CloudWatch Logs

AWS

  • ECSクラスター/サービス/タスク/タスク定義の概念
  • ECS Execの使用方法
  • Route53を使った独自ドメインの取得方法

GitHub Actions

  • ワークフロー/ジョブ/ステップの概念
  • 環境変数/Secret/if/各種コンテキストの使い方
  • アクションの使い方(AWS認証情報設定/キャッシュ/ECRログイン)
  • ECRにイメージをプッシュする方法
  • ECS(Fargate)にデプロイする方法
  • ECS(Fargate)を使ってLaravelからRDSをマイグレーションする方法

nginx

  • アクセスログのIPをALBではなくクライアントにする方法
  • ALBからのヘルスチェックをアクセスログ対象外にする方法

Laravel

  • ログをCloudWatch Logsに連携する方法
  • セッションをRedisで管理する方法

執筆を振り返って

これまでチュートリアルとして「Laravel + Vue.jsのCRUDアプリ」や「Laravel + EC2 + CircleCI + CodeシリーズでのCI/CD構築」などを執筆してきましたが、ECS(Fargate)やTerraformを題材としたチュートリアルもいつか書きたいと思っていました。

今回の本は、これにGItHub Actionsを加え、自分としては集大成的な内容となっています。

「初心者目線でわかりやすく」をテーマに書き上げましたので、ぜひ手に取ってもらえたらと思います!