Terraform执行apply时如何传递变量部署指定ECS
Terraform 向ECS容器定义传递变量部署指定ECS的实现方案
完全可以,以下是可直接复用的操作流程:
- 第一步:声明Terraform输入变量
在你的Terraform工作目录下新增variables.tf文件,定义用于标识部署目标的变量:
variable "deploy" { type = string description = "指定要部署的ECS服务唯一标识" default = "aws-ecs-backend" }
- 第二步:改造容器定义为模板文件
不要直接使用静态的ecs-container-definition.json,将其重命名为ecs-container-definition.tpl.json作为模板,需要动态替换的服务标识、镜像地址、端口等配置用${变量名}占位,示例如下:
[ { "name": "${deploy}-container", "image": "私有镜像仓库地址/${deploy}:latest", "cpu": 256, "memory": 512, "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 0 } ] } ]
- 第三步:在ECS任务定义资源中渲染模板
修改你的ECS任务定义Terraform配置,用templatefile函数传入变量渲染容器定义模板:
resource "aws_ecs_task_definition" "service" { family = "${var.deploy}-task" network_mode = "awsvpc" requires_compatibilities = ["FARGATE"] cpu = "256" memory = "512" execution_role_arn = aws_iam_role.ecs_execution_role.arn # 渲染模板传入变量 container_definitions = templatefile("${path.module}/ecs-container-definition.tpl.json", { deploy = var.deploy }) }
- 第四步:执行部署命令指定目标ECS
按照你给出的示例命令格式,修改deploy变量值即可部署对应ECS资源,示例:
部署aws-ecs-backend:terraform apply -var 'deploy=aws-ecs-backend'
部署其他ECS资源(比如前端服务)直接修改变量值即可:terraform apply -var 'deploy=aws-ecs-frontend'
补充说明:如果不同ECS资源的配置差异较大(涉及安全组、VPC子网、资源规格等区别),可以新增映射类型的变量存储不同服务的专属配置,通过
lookup函数结合deploy变量读取对应配置即可,无需维护多套配置文件。
内容的提问来源于stack exchange,提问作者bittersour
相关产品推荐
相关产品推荐

