![](/img/trans.png)
[英]AWS SSM - store multiple parameters using terraform and json file
[英]Terraform - Copy AWS SSM Parameters
长期潜伏者第一次海报
寻求大家的指导。 我正在尝试复制 aws 命令以从本质上获取参数(ssm get-parameters-by-path),然后循环遍历参数并获取它们,然后循环遍历并将它们放入新参数(ssm put-parameter)
我知道 TF 中有一个 for 循环表达式,但是对于我的一生,我无法将如何实现这一点放在一起。
任何和所有的帮助将不胜感激!
我明白,一开始并不容易。 我将尝试逐步详细说明我是如何实现这一目标的。
无论如何,包含您之前尝试过的任何代码都很好,即使它不起作用。
因此,首先我创建了一些示例参数:
# create_parameters.tf
resource "aws_ssm_parameter" "p" {
count = 3
name = "/test/${count.index}/p${count.index}"
type = "String"
value = "test-${count.index}"
}
然后我尝试查看它们:
# example.tf
data "aws_ssm_parameters_by_path" "parameters" {
path = "/test/"
recursive = true
}
output "params_by_path" {
value = data.aws_ssm_parameters_by_path.parameters
sensitive = true
}
作为我收到的输出: terraform output params_by_path
{
"arns" = tolist([
"arn:aws:ssm:eu-central-1:999999999999:parameter/test/0/p0",
"arn:aws:ssm:eu-central-1:999999999999:parameter/test/1/p1",
"arn:aws:ssm:eu-central-1:999999999999:parameter/test/2/p2",
])
"id" = "/test/"
"names" = tolist([
"/test/0/p0",
"/test/1/p1",
"/test/2/p2",
])
"path" = "/test/"
"recursive" = true
"types" = tolist([
"String",
"String",
"String",
])
"values" = tolist([
"test-0",
"test-1",
"test-2",
])
"with_decryption" = true
}
aws_ssm_parameters_by_path
在没有额外处理的情况下是不可用的,因此我们需要使用另一个数据源,来为提供的参数的副本获取合适的对象。 在我找到aws_ssm_parameter
的文档中。 但是,要使用它,我需要参数的全名。
我在前一阶段检索到的参数名称列表,所以现在只需要遍历它们:
# example.tf
locals {
names = toset(data.aws_ssm_parameters_by_path.parameters.names)
}
data "aws_ssm_parameter" "param" {
for_each = local.names
name = each.key
}
output "params" {
value = data.aws_ssm_parameter.param
sensitive = true
}
结果,我得到: terraform output params
{
"/test/0/p0" = {
"arn" = "arn:aws:ssm:eu-central-1:999999999999:parameter/test/0/p0"
"id" = "/test/0/p0"
"name" = "/test/0/p0"
"type" = "String"
"value" = "test-0"
"version" = 1
"with_decryption" = true
}
"/test/1/p1" = {
"arn" = "arn:aws:ssm:eu-central-1:999999999999:parameter/test/1/p1"
"id" = "/test/1/p1"
"name" = "/test/1/p1"
"type" = "String"
"value" = "test-1"
"version" = 1
"with_decryption" = true
}
"/test/2/p2" = {
"arn" = "arn:aws:ssm:eu-central-1:999999999999:parameter/test/2/p2"
"id" = "/test/2/p2"
"name" = "/test/2/p2"
"type" = "String"
"value" = "test-2"
"version" = 1
"with_decryption" = true
}
}
每个参数对象都已被检索,因此现在可以创建新参数 - 可以这样完成:
# example.tf
resource "aws_ssm_parameter" "new_param" {
for_each = local.names
name = "/new_path${data.aws_ssm_parameter.param[each.key].name}"
type = data.aws_ssm_parameter.param[each.key].type
value = data.aws_ssm_parameter.param[each.key].value
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.