terraform ecs fargate
v3.0.3
一組用於在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 | S3存儲器存儲Terraform遠程狀態的後端 | |
| ecr.tf | 用於應用的ECR存儲庫(所有環境共享) |
這些組件適用於特定的環境。每個環境都應有一個相應的目錄。
| 姓名 | 描述 | 選修的 |
|---|---|---|
| main.tf | Terronfor遠程狀態,AWS提供商,輸出 | |
| ecs.tf | ECS群集,服務,任務定義,ecstaskexecutionrole,CloudWatch日誌組 | |
| lb.tf | ALB,目標組,用於訪問日誌的S3存儲桶 | |
| NSG.TF | NSG用於ALB和任務 | |
| lb-http.tf | HTTP聽眾,NSG規則。如果僅刪除僅https | 是的 |
| lb-https.tf | HTTPS偵聽器,NSG規則。如果僅刪除僅http | 是的 |
| dashboard.tf | CloudWatch儀表板:CPU,內存和與HTTP相關的指標 | 是的 |
| 角色 | 容器的應用角色 | 是的 |
| cicd.tf | CI/CD系統可以使用的IAM用戶 | 是的 |
| Autoscale-perf.tf | 基於性能的自動縮放 | 是的 |
| Autoscale time.tf | 基於時間的自動縮放 | 是的 |
| logs-logzio.tf | 將容器日誌運送到logz.io | 是的 |
| Secretsmanager.tf | 使用CMK KMS密鑰添加秘密經理秘密。還提供應用程序角色和ECS任務定義角色訪問秘密經理閱讀秘密的角色訪問 | 是的 |
| Secrets-Sidecar.tf | 添加了用於部署應用程序的任務定義配置以及將您的Secrets Manager秘密寫入文件的Sidecar容器。請注意,這取決於選擇secretsmanager.tf 。 | 是的 |
| SSM-Parameters.tf | 添加一個CMK KMS密鑰,以與SSM參數存儲一起使用。還可以使ECS任務定義角色訪問參數存儲的讀取秘密。 | 是的 |
| ecs-event-stream.tf | 添加ECS事件日誌儀表板 | 是的 |
通常,基本地Terraform只需要運行一次,然後只需要很少需要更改即可。建造基地後,可以構建每個環境。
# 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基本讀數
環境dev人員
安裝檢查Terraform代碼是否格式化的預加壓鉤
ln -s ../../pre-commit.sh .git/hooks/pre-commit