بهترین روش ها برای استقرار ECS با استفاده از Terraform

استقرار خدمات ECS با استفاده از Terraform به شما امکان می دهد یک زیرساخت ماژولار، قابل استفاده مجدد و پارامتر محور را حفظ کنید. در این راهنما، ما بر ایجاد و استفاده مجدد از تعاریف وظایف ECS، پیکربندی خدمات، و ادغام سایر اجزای AWS به طور موثر با Terraform تمرکز خواهیم کرد.
بیان مشکل
ایجاد یک استقرار قوی ECS اغلب شامل پیکربندی های تکراری و تنظیمات پیچیده است. با استفاده از Terraform، می توانید:
- ایجاد تعاریف وظایف ECS قابل استفاده مجدد را ساده کنید.
- متغیرهای پویا را به وظایف و خدمات منتقل کنید.
- یکپارچه با سایر خدمات AWS مانند Secrets Manager و CloudWatch ادغام کنید.
استقرار ECS مبتنی بر Terraform
اجزای کلیدی
-
تعاریف وظایف ECS
- تنظیمات ظرف (CPU، حافظه، تصویر و غیره) را تعریف کنید.
- از متغیرها برای ایجاد تعاریف قابل استفاده مجدد در چندین سرویس استفاده کنید.
-
خدمات ECS
- تعداد وظایف، سیاست های مقیاس بندی و ادغام با ALB ها را مدیریت کنید.
-
ادغام خدمات AWS
- برای داده های حساس به Secrets Manager متصل شوید.
- ثبت گزارش و معیارهای CloudWatch را فعال کنید.
مرحله 1: تعریف کار قابل استفاده مجدد
تعریف کار پارامتری شده در Terraform:
resource "aws_ecs_task_definition" "app" {
family = var.task_family
container_definitions = jsonencode([
{
name = "${var.container_name}"
image = "${var.container_image}"
cpu = var.cpu
memory = var.memory
essential = true
environment = var.environment_variables
logConfiguration = {
logDriver = "awslogs"
options = {
"awslogs-group" = var.log_group
"awslogs-region" = var.region
"awslogs-stream-prefix" = var.log_stream_prefix
}
}
}
])
requires_compatibilities = ["FARGATE"]
network_mode = "awsvpc"
execution_role_arn = aws_iam_role.ecs_task_execution.arn
task_role_arn = aws_iam_role.ecs_task.arn
cpu = var.task_cpu
memory = var.task_memory
}
متغیرهای انعطاف پذیری
متغیرهایی را تعریف کنید تا تعریف کار قابل استفاده مجدد باشد:
variable "task_family" {}
variable "container_name" {}
variable "container_image" {}
variable "cpu" {}
variable "memory" {}
variable "environment_variables" { type = list(map(string)) }
variable "log_group" {}
variable "region" {}
variable "log_stream_prefix" {}
variable "task_cpu" {}
variable "task_memory" {}
مرحله 2: پیکربندی سرویس ECS
یک منبع سرویس را تعریف کنید و تعریف وظیفه را به صورت پویا ارسال کنید:
resource "aws_ecs_service" "app" {
name = var.service_name
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = var.desired_count
launch_type = "FARGATE"
network_configuration {
subnets = var.subnets
security_groups = [aws_security_group.app.id]
assign_public_ip = true
}
load_balancer {
target_group_arn = aws_lb_target_group.app.arn
container_name = var.container_name
container_port = var.container_port
}
depends_on = [aws_lb_listener.frontend]
}
مرحله 3: متغیرهای پارامتری برای سرویس ECS
تعریف متغیرهای سرویس:
variable "service_name" {}
variable "desired_count" {}
variable "subnets" { type = list(string) }
variable "container_port" {}`
### Step 4: Secrets Manager Integration
To securely manage environment variables:
`resource "aws_secretsmanager_secret" "app_secret" {
name = var.secret_name
}
resource "aws_secretsmanager_secret_version" "app_secret_version" {
secret_id = aws_secretsmanager_secret.app_secret.id
secret_string = jsonencode(var.secret_values)
}
variable "secret_name" {}
variable "secret_values" { type = map(string) }
اسرار را به عنوان متغیرهای محیطی در تعریف وظیفه منتقل کنید:
environment = [
{
name = "SECRET_KEY"
valueFrom = aws_secretsmanager_secret.app_secret.arn
}
]
مرحله 5: خروجی برای قابلیت استفاده مجدد
تعریف خروجی برای تعریف وظیفه و سرویس:
output "task_definition_arn" {
value = aws_ecs_task_definition.app.arn
}
output "service_name" {
value = aws_ecs_service.app.name
}
بهترین شیوه ها
-
از ماژول ها استفاده کنید: کد Terraform خود را در ماژول های قابل استفاده مجدد سازماندهی کنید.
-
قفل نسخه: از محدودیت های نسخه برای ارائه دهندگان Terraform استفاده کنید.
-
مدیریت دولتی: از ذخیره سازی حالت راه دور استفاده کنید (به عنوان مثال، S3 با قفل DynamoDB).
-
فروشگاه پارامتر: برای پیکربندی های پویا با SSM Parameter Store ادغام شود.
نتیجه گیری
با پارامترسازی تعاریف و خدمات ECS در Terraform، میتوانید یک زیرساخت مقیاسپذیر، قابل استفاده مجدد و کارآمد ایجاد کنید. این رویکرد نه تنها تکرار را کاهش می دهد، بلکه انعطاف پذیری استقرارهای شما را نیز افزایش می دهد و امکان انطباق سریع با نیازهای جدید را فراهم می کند.