【问题标题】:How to create AWS SSM Parameter from Terraform如何从 Terraform 创建 AWS SSM 参数
【发布时间】:2021-12-01 10:53:15
【问题描述】:

我正在尝试将 AWS SSM 参数(用于 cloudwatch)从一个区域复制到另一个区域。我有一个在一个区域中创建为字符串的 json。

我正在尝试编写一个 terraform 脚本以在另一个区域创建此 ssm 参数。
根据 terraform 文档,我需要这样做

resource "aws_ssm_parameter" "foo" {
  name  = "foo"
  type  = "String"
  value = "bar"
}

在我的情况下,值是一个 json。有没有办法将 json 存储在文件中并将该文件作为值传递给上述资源?我尝试使用 jsonencode,

resource "aws_ssm_parameter" "my-cloudwatch" {
  name  = "my-cloudwatch"
  type  = "String"
  value = jsonencode({my-json})

那也没用。我收到此错误 插值表达式后的额外字符我认为这是因为 json 包含引号和冒号等字符。

有什么想法吗?

【问题讨论】:

  • “我尝试使用 jsonencode,但也没有用” - 你到底尝试了什么?你得到了什么错误? “也没有工作”是什么意思?到底发生了什么,它不起作用?
  • 编辑了我的问题

标签: amazon-web-services terraform aws-ssm


【解决方案1】:

我测试了以下内容,这对我有用:

resource "aws_ssm_parameter" "my-cloudwatch" {
  name  = "my-cloudwatch"
  type  = "String"
  #value = file("${path.module}/ssm-param.json")
  value = jsonencode(file("${path.module}/files/ssm-param.json"))
}

./files/ssm-param.json 内容:

{
    "Value": "Something"
}

参数存储值如下所示:

"{\n    \"Value\": \"Something\"\n}"

【讨论】:

    【解决方案2】:

    我刚刚遇到了这个问题,CW 配置中的 $ 导致了这个问题。使用 $$

    "注意:如果您将模板指定为文字字符串而不是加载文件,则内联模板必须使用双美元符号(如 $${hello})以防止 Terraform 将配置中的值插入到字符串中。 "

    https://www.terraform.io/docs/configuration-0-11/interpolation.html

        "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "$${aws:AutoScalingGroupName}",
            "ImageId": "$${aws:ImageId}",
            "InstanceId": "$${aws:InstanceId}",
            "InstanceType": "$${aws:InstanceType}"
        },
    

    不过我更喜欢 Pauls 的方法。

    【讨论】:

      【解决方案3】:

      您需要插入带有转义配额的json,这是AWS中的一个小技巧,您需要在检索时对其进行解析:

      const value = JSON.parse(Value)
      

      插入示例:

       "Value": "\"{\"flag\":\"market_store\",\"app\":\"ios\",\"enabled\":\"false\"}\"",
      

      【讨论】:

      • JSON.parse 不是 TF 代码。
      • JSON.parse 在你的应用程序中使用,你将使用转义配额将值插入到 TF 中,当检索值时,你需要在 json 中解析。
      • 我的意思是,如果 TF 有内置函数来做同样的事情,你为什么还要使用 JavaScript?
      • 因为 ssm 参数接受的值只有字符串,所以你需要将值作为字符串插入并解析到你的应用程序中以读取 json。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2021-03-03
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多