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

如何在Terraform中用单个资源块为多AWS提供商创建aws_ssm_parameter

Terraform 多区域创建相同 SSM 参数的简化方案

你可以通过两种方式减少重复代码,首先需要明确 Terraform 的 provider 元参数不支持动态插值,无法直接在单个资源块中通过遍历动态指定不同区域的提供商。

方案1:抽离公共配置(改动最小,适合少量多区域资源)

将重复的参数统一收敛到 locals 块中,后续修改配置只需要调整一处:

# 抽离所有公共配置
locals {
  ssm_writer_endpoint_name  = "/aurora/${var.environment}-${var.service_name}-primary-cluster/writer-endpoint"
  ssm_writer_endpoint_value = aws_rds_cluster.primary.endpoint
  ssm_base_config = {
    type      = "String"
    overwrite = true
  }
}

# 主区域参数
resource "aws_ssm_parameter" "primary_writer_endpoint" {
  name  = local.ssm_writer_endpoint_name
  value = local.ssm_writer_endpoint_value
  type  = local.ssm_base_config.type
  overwrite = local.ssm_base_config.overwrite
}

# 副本区域参数
resource "aws_ssm_parameter" "primary_writer_endpoint_replica_region" {
  provider = aws.replica
  
  name  = local.ssm_writer_endpoint_name
  value = local.ssm_writer_endpoint_value
  type  = local.ssm_base_config.type
  overwrite = local.ssm_base_config.overwrite
}

方案2:本地模块封装(完全消除重复,适合多区域资源多、后续会扩容的场景)

将SSM参数的创建逻辑封装为本地子模块,不同区域调用同一个模块即可:

  1. 新建本地模块目录 ./modules/aurora_ssm_writer,在目录下创建main.tf:
variable "environment" {
  type = string
}
variable "service_name" {
  type = string
}
variable "writer_endpoint" {
  type = string
}

resource "aws_ssm_parameter" "writer_endpoint" {
  name      = "/aurora/${var.environment}-${var.service_name}-primary-cluster/writer-endpoint"
  type      = "String"
  value     = var.writer_endpoint
  overwrite = true
}
  1. 根目录配置文件中调用两次模块,分别传入不同区域的提供商:
# 主区域SSM参数
module "primary_ssm_writer" {
  source = "./modules/aurora_ssm_writer"

  environment     = var.environment
  service_name    = var.service_name
  writer_endpoint = aws_rds_cluster.primary.endpoint
}

# 副本区域SSM参数
module "replica_ssm_writer" {
  source = "./modules/aurora_ssm_writer"
  providers = {
    aws = aws.replica
  }

  environment     = var.environment
  service_name    = var.service_name
  writer_endpoint = aws_rds_cluster.primary.endpoint
}

后续新增区域时,只需要新增对应的provider声明,再追加一次模块调用即可,不需要重复写资源定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:09