AWS ECS FargateのWebアプリケーションスタックのプロビジョニングに使用される一連のTerraformテンプレート。
注:このテンプレートから新しいモジュラーバージョンに移動することをお勧めします。このリポジトリは、TerraformとAWSプロバイダーが進化するにつれて互換性を維持するための更新を受け取りますが、ほとんどの新しい機能はモジュールに実装されます。 https://github.com/warnermedia/terraform-ecs-fargate-moduleのモジュールをご覧ください

テンプレートは、カスタマイズするように設計されています。オプションのコンポーネントは、 .tfファイルを削除するだけで削除できます。
テンプレートは、インフラストラクチャの懸念を管理するために使用され、そのため、テンプレートはデフォルトのバックエンドDockerイメージを展開します。このインフラストラクチャの上に実際のアプリケーション画像と環境変数を展開するなど、アプリケーションの懸念を管理するためにFargate CLIを使用することをお勧めします。 Fargate CLIは、ラップトップまたはCI/CDパイプラインからアプリケーションを展開するために使用できます。
これらのコンポーネントは、すべての環境で共有されます。
| 名前 | 説明 | オプション |
|---|---|---|
| main.tf | AWSプロバイダー、出力 | |
| state.tf | Terraformリモート状態を保存するためのS3バケットバックエンド | |
| ECR.TF | アプリケーションのECRリポジトリ(すべての環境が共有) |
これらのコンポーネントは、特定の環境用です。必要な各環境に対応するディレクトリがあるはずです。
| 名前 | 説明 | オプション |
|---|---|---|
| main.tf | Terrform Remote State、AWSプロバイダー、出力 | |
| ecs.tf | ECSクラスター、サービス、タスク定義、ecstaskexecutionrole、cloudwatchロググループ | |
| lb.tf | ALB、ターゲットグループ、アクセスログ用のS3バケット | |
| NSG.TF | ALBおよびタスクのNSG | |
| lb-http.tf | HTTPリスナー、NSGルール。 HTTPSのみを削除します | はい |
| lb-https.tf | HTTPSリスナー、NSGルール。 HTTPのみを削除します | はい |
| Dashboard.tf | CloudWatchダッシュボード:CPU、メモリ、およびHTTP関連メトリック | はい |
| role.tf | コンテナのアプリケーションロール | はい |
| cicd.tf | CI/CDシステムで使用できるIAMユーザー | はい |
| Autoscale-Perf.tf | パフォーマンスベースの自動スケーリング | はい |
| autoscale-time.tf | 時間ベースの自動スケーリング | はい |
| logs-logzio.tf | logz.ioへの船舶コンテナログ | はい |
| Secretsmanager.tf | CMK KMSキーを使用してSecrets Manager Secretを追加します。また、secretsマネージャーから秘密を読むために、アプリの役割とECSタスク定義の役割アクセス | はい |
| Secrets-Sidecar.tf | アプリを展開するためのタスク定義構成と、Secrets Manager Secretをファイルに書き込むサイドカーコンテナを追加します。これは、 secretsmanager.tfにオプトインすることに依存していることに注意してください。 | はい |
| ssm-parameters.tf | SSMパラメーターストアで使用するためのCMK KMSキーを追加します。また、ECSタスク定義の役割アクセスを提供して、パラメーターストアから秘密を読み取ります。 | はい |
| ECS-Event-Stream.tf | ECSイベントログダッシュボードを追加します | はい |
通常、ベーステラフォームは1回だけ実行する必要があり、その後、非常にまれに変更する必要があります。ベースが構築された後、各環境を構築できます。
# Move into the base directory
$ cd base
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply
# Now, move into the dev environment
$ cd ../env/dev
# Sets up Terraform to run
$ terraform init
# Executes the Terraform run
$ terraform apply
terraform applyた後)生成されたベース.tfstateは、リモートステートS3バケットに保存されません。ベース.tfstateがインフラストラクチャリポジトリにチェックされていることを確認してください。 GitHubによって生成されたデフォルトのTerraform .gitignoreは、すべての.tfstateファイルを無視します。これを変更する必要があります!
または、Fargate-Create CLIを使用して、このテンプレートに基づいて新しいプロジェクトを足場にすることもできます。
インストール
curl -s get-fargate-create.turnerlabs.io | sh入力VARSファイル( terraform.tfvars )を作成する
# app/env to scaffold
app = " my-app "
environment = " dev "
internal = true
container_port = " 8080 "
replicas = " 1 "
health_check = " /health "
region = " us-east-1 "
aws_profile = " default "
saml_role = " admin "
vpc = " vpc-123 "
private_subnets = " subnet-123,subnet-456 "
public_subnets = " subnet-789,subnet-012 "
tags = {
application = " my-app "
environment = " dev "
team = " my-team "
customer = " my-customer "
contact-email = " [email protected] "
}$ fargate-create -f terraform.tfvarsベースreadme
環境dev readme
フォーマットのためにTerraformコードをチェックする事前コミットフックをインストールします
ln -s ../../pre-commit.sh .git/hooks/pre-commit