ชุดเทมเพลต Terraform ที่ใช้สำหรับการจัดสรรเว็บแอปพลิเคชันสแต็คบน AWS ECS Fargate
หมายเหตุ : เราขอแนะนำให้ย้ายออกจากเทมเพลตนี้ไปยังรุ่นโมดูลาร์รุ่นใหม่ของเรา repo นี้จะยังคงได้รับการอัปเดตเพื่อรักษาความเข้ากันได้เนื่องจาก Terraform และผู้ให้บริการ AWS พัฒนาขึ้น แต่คุณสมบัติใหม่ส่วนใหญ่จะถูกนำไปใช้ในโมดูล คุณสามารถค้นหาโมดูลได้ที่นี่: https://github.com/warnermedia/terraform-ecs-fargate-module

เทมเพลตได้รับการออกแบบให้ปรับแต่ง ส่วนประกอบเสริมสามารถลบออกได้เพียงแค่ลบไฟล์. .tf
เทมเพลตใช้สำหรับการจัดการปัญหาโครงสร้างพื้นฐานและเช่นนี้เทมเพลตจะปรับใช้อิมเมจนักเทียบท่าแบ็กเอนด์เริ่มต้น เราขอแนะนำให้ใช้ Fargate CLI สำหรับการจัดการข้อกังวลของแอปพลิเคชันเช่นการปรับใช้ภาพแอปพลิเคชันจริงและตัวแปรสภาพแวดล้อมที่อยู่ด้านบนของโครงสร้างพื้นฐานนี้ Fargate CLI สามารถใช้ในการปรับใช้แอปพลิเคชันจากแล็ปท็อปของคุณหรือในท่อ CI/CD
ส่วนประกอบเหล่านี้มีการแบ่งปันโดยทุกสภาพแวดล้อม
| ชื่อ | คำอธิบาย | ไม่จำเป็น |
|---|---|---|
| main.tf | ผู้ให้บริการ AWS เอาท์พุท | |
| state.tf | S3 Bucket Backend สำหรับการจัดเก็บ Terraform Remote State | |
| ecr.tf | ที่เก็บ ECR สำหรับแอปพลิเคชัน (ทุกสภาพแวดล้อมแบ่งปัน) |
ส่วนประกอบเหล่านี้มีไว้สำหรับสภาพแวดล้อมที่เฉพาะเจาะจง ควรมีไดเรกทอรีที่สอดคล้องกันสำหรับแต่ละสภาพแวดล้อมที่จำเป็น
| ชื่อ | คำอธิบาย | ไม่จำเป็น |
|---|---|---|
| main.tf | Terrform Remote State, ผู้ให้บริการ 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 | dashwatch dashboard: CPU, หน่วยความจำและตัวชี้วัดที่เกี่ยวข้องกับ HTTP | ใช่ |
| Role.tf | บทบาทแอปพลิเคชันสำหรับคอนเทนเนอร์ | ใช่ |
| cicd.tf | ผู้ใช้ IAM ที่สามารถใช้งานได้โดยระบบ CI/CD | ใช่ |
| autoscale-perf.tf | การปรับขนาดอัตโนมัติตามประสิทธิภาพ | ใช่ |
| autoscale-time.tf | การปรับขนาดอัตโนมัติตามเวลา | ใช่ |
| logs-logzio.tf | จัดส่งบันทึกคอนเทนเนอร์ไปยัง logz.io | ใช่ |
| SecretsManager.tf | เพิ่มความลับของผู้จัดการความลับด้วยคีย์ CMK KMS ยังให้บทบาทของแอพและการเข้าถึงบทบาทของแอพและ ECS เพื่ออ่านความลับจาก Secrets Manager | ใช่ |
| Secrets-sidecar.tf | เพิ่มการกำหนดค่าคำจำกัดความงานสำหรับการปรับใช้แอปของคุณพร้อมกับคอนเทนเนอร์ sidecar ที่เขียนความลับของตัวจัดการความลับของคุณไปยังไฟล์ โปรดทราบว่าสิ่งนี้ขึ้นอยู่กับการเลือกใช้ secretsmanager.tf | ใช่ |
| ssm-parameters.tf | เพิ่มคีย์ CMK KMS สำหรับใช้กับ SSM Parameter Store นอกจากนี้ยังให้การกำหนดบทบาทการนิยามงานของ 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 ถูกตรวจสอบใน repo โครงสร้างพื้นฐานของคุณ terraform เริ่มต้น .gitignore ที่สร้างโดย gitHub จะไม่สนใจไฟล์ .tfstate ทั้งหมด; คุณจะต้องแก้ไขสิ่งนี้!
หรือคุณสามารถใช้ Fargate-Create-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.tfvarsReadme ฐาน
สภาพแวดล้อม dev readme
ติดตั้งตะขอล่วงหน้าที่ตรวจสอบรหัส Terraform สำหรับการจัดรูปแบบ
ln -s ../../pre-commit.sh .git/hooks/pre-commit