You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform创建AWS SSM Parameter并传入JSON格式参数值

报错根因

你遇到的Extra characters after interpolation expression错误是因为jsonencode({my-json})不符合Terraform语法规范:jsonencode的入参必须是合法的Terraform对象结构,如果你直接传入原生JSON内容或者错误的占位符,就会因为特殊字符识别失败触发报错。

正确实现方案

根据你的使用场景,有两种常见的实现方式:

  • 场景1:JSON内容已保存在本地文件
    已经序列化完成的JSON字符串不需要再次用jsonencode包装,直接用file函数读取文件内容即可:
resource "aws_ssm_parameter" "my-cloudwatch" {
  name  = "my-cloudwatch"
  type  = "String"
  value = file("./cloudwatch_config.json") # 替换为你的JSON文件实际路径
}
  • 场景2:JSON结构直接在Terraform代码中定义
    如果不想单独维护JSON文件,可以把JSON字段转换为Terraform对象格式传入jsonencode,不需要手动写引号、冒号等JSON原生语法:
resource "aws_ssm_parameter" "my-cloudwatch" {
  name  = "my-cloudwatch"
  type  = "String"
  value = jsonencode({
    region      = "cn-north-1"
    metric_name = "CPUUtilization"
    threshold   = 80
    # 按实际需求补充其他字段即可
  })
}
跨区域部署补充配置

因为你需要跨区域复制参数,需要提前配置目标区域的AWS Provider,还可以直接通过数据源读取源区域参数实现自动同步,无需手动维护本地文件:

# 源区域Provider(示例为北京区)
provider "aws" {
  alias  = "cn-north-1"
  region = "cn-north-1"
}

# 目标区域Provider(示例为宁夏区)
provider "aws" {
  alias  = "cn-northwest-1"
  region = "cn-northwest-1"
}

# 读取源区域已有SSM参数
data "aws_ssm_parameter" "source_param" {
  provider = aws.cn-north-1
  name     = "my-cloudwatch"
}

# 在目标区域创建相同参数
resource "aws_ssm_parameter" "target_param" {
  provider = aws.cn-northwest-1
  name     = data.aws_ssm_parameter.source_param.name
  type     = data.aws_ssm_parameter.source_param.type
  value    = data.aws_ssm_parameter.source_param.value
}

内容的提问来源于stack exchange,提问作者pvpkiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:18:00