0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Terraform × ECS(Fargate) × GitHub Actions で 監視・自動ロールバックまで考えた構成を作ってみた

Last updated at Posted at 2026-01-06

本記事で扱うリポジトリ

本記事で解説している構成の Terraform / GitHub Actions / アプリケーションコードは
以下の GitHub リポジトリにまとめています。

👉 https://github.com/marcy775/terraform-aws-ecs-fargate

  • Terraform による AWS インフラ構築
  • ECS(Fargate) + ALB 構成
  • GitHub Actions による CI/CD
  • CloudWatch 監視 + SNS 通知
  • ECS Deployment Circuit Breaker による自動ロールバック

コードを先に見たい方は、リポジトリを眺めながら読むのがおすすめです。

はじめに

本記事では、
ECS(Fargate) + ALB + GitHub Actions + CloudWatch を用いて、

  • IaC によるインフラ構築
  • CI/CD
  • 監視・通知
  • ECS の自動ロールバック

までを SRE 視点で意識した構成 を記載します。

全体構成

今回構築した構成は以下の通りです。

architecture

使用技術

  • Terraform
  • Amazon ECS(Fargate)
  • Application Load Balancer
  • Amazon ECR
  • GitHub Actions(OIDC)
  • CloudWatch(Logs / Alarm)
  • SNS(メール通知)

なぜ ECS(Fargate)を選んだか

運用負荷を最小化したかった

Fargate を使うことで、

  • EC2 のキャパシティ管理
  • OS パッチ適用
  • ノード障害対応

といった インフラ運用の責務を AWS に任せる ことができます。

今回の目的は「Kubernetes を極める」ことではなく、
安全にアプリケーションを運用できる構成を作ることだったため、ECS を選択しました。

EKS との比較

  • クラスタ管理の学習コスト
  • 運用負荷の増加

を考慮し、学習・デモ用途かつ実務想定 という条件では ECS の方が適切だと判断しました。

Terraform の設計方針

Terraform の構成は 2 レイヤー構成 にしています。

env レイヤー(環境定義)

  • 利用する module の組み立て
  • 環境固有の値(CIDR / リージョン等)の定義
  • module 間の依存関係の制御

env 配下では aws_* リソースを直接定義せず、
インフラの設計・構成管理に集中 するようにしています。


modules レイヤー(リソース定義)

  • AWS リソースの具体的な定義
  • 環境に依存しない設計
  • 単一責務を意識した module 分割

各 module は他の module を直接参照せず、
必要な情報は variables 経由で受け取るようにしています。

CI/CD(GitHub Actions)

CI/CD には GitHub Actions を使用しています。

デプロイフロー

  1. main ブランチに push
  2. Docker イメージを build
  3. ECR に push
  4. aws ecs update-service を実行
  5. ECS が新しいタスクを起動
  6. ALB のヘルスチェック通過後に切り替え

OIDC を使ったセキュアな認証

GitHub Actions から AWS への認証には OIDC を使用しています。

  • アクセスキーを GitHub に保存しない
  • IAM Role を AssumeRole する構成

にすることで、
セキュリティと運用性を両立 しています。


ECS の自動ロールバック設計

deployment_controller {
  type = "ECS"
}

deployment_circuit_breaker {
  enable   = true
  rollback = true
}

自動で前バージョンへロールバック される設計としています。

  • タスク起動失敗
  • ALB のヘルスチェック NG

これにより、デプロイ失敗時もサービス停止を最小限に抑えられます。

監視・通知設計

ログ

  • ECS タスクのログを CloudWatch Logs に集約

メトリクス監視

  • ECS サービスの CPU / メモリ使用率 を監視
  • 使用率 80% 超過 で CloudWatch Alarm を発火

通知

  • CloudWatch Alarm → SNS → メール通知

最低限ではありますが、
「異常に気づける構成」 を用意しています。

この構成で意識したこと

  • 「動く」だけで終わらせない
  • 障害が起きた時を前提に設計する
  • 運用負荷を下げる仕組みを組み込む

IaC + CI/CD + 監視 + ロールバックまで含めて初めて
運用可能なインフラ だと考えています。

今後の改善案

  • Terraform の plan / apply を GitHub Actions に統合
  • ECS タスク定義のバージョン管理改善
  • Blue/Green デプロイ(CodeDeploy)の導入
  • マルチ環境(dev / stg / prod)対応

おわりに

本構成は学習・デモ用途ではありますが、
実務を強く意識した設計 を心がけました。

同じように ECS や Terraform を学んでいる方の参考になれば嬉しいです!!

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?