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

Terraform如何跨模块引用KMS密钥配置SQS kms_master_key_id

Terraform跨模块引用KMS密钥配置SQS加密的正确方法

Terraform默认不允许直接穿透访问其他子模块内部的资源,跨模块传值必须遵循「被引用模块输出暴露→根模块传参→引用模块变量接收」的标准流程,具体配置步骤如下:


1. 给KMS模块添加输出配置

在KMS模块目录(./modules/KMS)下新增输出声明,把需要对外暴露的KMS密钥属性输出,你可以新建outputs.tf文件存放该配置,也可以写到模块内任意.tf文件中:

# ./modules/KMS/outputs.tf
output "kms_key_id" {
  description = "KMS主密钥ID"
  value       = aws_kms_key.a.key_id
}

output "kms_key_arn" {
  description = "KMS主密钥ARN"
  value       = aws_kms_key.a.arn
}

2. 给SQS模块添加输入变量,替换占位赋值

首先在SQS模块目录(./modules/SQS)下定义接收KMS密钥ID的输入变量,同样可以新建variables.tf存放变量配置:

# ./modules/SQS/variables.tf
variable "kms_master_key_id" {
  description = "用于SQS队列服务端加密的KMS主密钥标识"
  type        = string
}

然后修改SQS模块内的队列资源配置,把原来kms_master_key_id位置的占位符替换为对该变量的引用:

# ./modules/SQS/main.tf
resource "aws_sqs_queue" "terraform_queue" {
  name                      = "terraform-example-queue"
  delay_seconds             = 90
  max_message_size          = 2048
  message_retention_seconds = 86400
  kms_master_key_id         = var.kms_master_key_id
  receive_wait_time_seconds = 10
}

3. 修改根模块调用配置,完成跨模块传值

在根模块的调用代码中,将KMS模块输出的密钥ID作为入参传递给SQS模块即可:

# 根模块main.tf
module "kms" {
  source = "./modules/KMS"
}

module "sqs" {
  source            = "./modules/SQS"
  kms_master_key_id = module.kms.kms_key_id
}

注意事项

  • 禁止直接在SQS模块中写类似module.kms.aws_kms_key.a.key_id的穿透引用,这种写法不符合Terraform模块封装规范,会导致模块间强耦合,Terraform也会直接报引用错误。
  • SQS的kms_master_key_id参数同时支持传入KMS密钥ID和密钥ARN,两种值都可以正常生效,你也可以根据需要传module.kms.kms_key_arn。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:48:15