我想使用 Terraform 创建 AWS SSM 参数,并将参数作为输入变量传入。
我看到有一个 for_each 功能,但是如何将其应用于 terraform 资源中的顶级属性?从文档来看, for_each 的使用似乎仅限于不适用于资源的顶级属性,我是否误解了?
这就是我想要实现的目标:
主.tf
resource "aws_ssm_parameter" "ssm_parameters" {
for_each = var.params
content {
name = name.value
type = "String"
overwrite = true
value = paramValue.value
tags = var.tags
lifecycle {
ignore_changes = [
tags,
value
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
变量.tf
variable "params" {
default = [
{
name = "albUrl"
paramValue = "testa"
},
{
name = "rdsUrl1"
paramValue = "testb"
},
{
name = "rdsUrl2"
valparamValueue = "testc" …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Terraform 部署 ECS 任务,并希望在 ECS 任务的容器定义中使用 AWS SSM 参数。
我有 3 个 SSM 参数,我想用它们来覆盖 service.json 中定义的默认属性。(端口、TEST_PROP_1、TEST_PROP_2)
有没有办法为容器定义环境变量提供这些 SSM 参数的 ARN?
地形资源:
resource "aws_ecs_task_definition" "testapp" {
family = "testapp"
network_mode = "awsvpc"
cpu = 256
memory = 512
container_definitions = file("../modules/ecs_service/task-definitions/service.json")
requires_compatibilities = [
"FARGATE"
]
execution_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole"
task_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole"
}
Run Code Online (Sandbox Code Playgroud)
服务.json
[
{
"name": "testapp",
"image": "redacted/demoapp:latest",
"portMappings": [
{
"containerPort": 59817,
"hostPort": 59817,
"protocol": "tcp"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "testappLG",
"awslogs-region": …
Run Code Online (Sandbox Code Playgroud)