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

如何通过Terraform获取SecretsManager副本ARN并跨区域配置SSM参数?

解决方案:跨区域SSM参数同步SecretsManager副本ARN

1. 配置多区域AWS Provider

要操作不同区域的AWS资源,需为每个目标区域配置带alias的Provider,用dynamic块自动遍历生成,无需手动逐个编写:

# 主区域Provider(默认)
provider "aws" {
  region = var.primary_region
}

# 动态生成副本区域的Provider
dynamic "provider" {
  for_each = var.replica_regions
  content {
    aws {
      region = provider.value
      alias  = "region_${provider.value}"
    }
  }
}

2. 提取SecretsManager副本的ARN映射

aws_secretsmanager_secret资源的replica属性会返回所有副本的元数据(含区域和ARN),用for表达式将其转为以区域名为键的映射,方便后续关联引用:

locals {
  secret_replica_arns = {
    for replica in aws_secretsmanager_secret.api_token_secret.replica :
    replica.region => replica.arn
  }
}

生成的映射结构示例:

{
  "us-east-1" = "arn:aws:secretsmanager:us-east-1:123456789012:secret:system/api_token-xxxxxx"
  "eu-west-1" = "arn:aws:secretsmanager:eu-west-1:123456789012:secret:system/api_token-yyyyyy"
}

3. 创建跨区域SSM参数

分别创建主区域和副本区域的SSM参数,确保每个区域对应正确的Secret ARN:

主区域SSM参数

使用默认Provider,直接引用主Secret的ARN:

resource "aws_ssm_parameter" "api_token_secret_arn_primary" {
  name  = "system/api_token/secret_arn"
  value = aws_secretsmanager_secret.api_token_secret.arn
  type  = "SecureString"
}

副本区域SSM参数

通过for_each遍历副本区域,指定对应alias的Provider,并从本地映射中获取对应区域的副本ARN:

resource "aws_ssm_parameter" "api_token_secret_arn_replicas" {
  for_each = var.replica_regions

  provider = aws.region_${each.value}
  name     = "system/api_token/secret_arn"
  value    = local.secret_replica_arns[each.value]
  type     = "SecureString"
}

关键注意点

  • Provider的alias命名需统一,这里用region_<区域名>格式,方便通过each.value动态拼接引用。
  • 本地映射local.secret_replica_arns确保每个区域的SSM参数对应正确的副本ARN,避免混淆。
  • 资源命名要唯一,主区域和副本区域的SSM参数用不同名称,防止Terraform报错。

内容的提问来源于stack exchange,提问作者João Pedro Schmitt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:55:18