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

Terraform传递KMS密钥ID至S3 Bucket时遇类型不匹配错误求助

问题分析与解决

错误根源

你遇到的类型不匹配错误,核心原因是第二层级模块的输出使用了splat表达式([*]),导致输出值为列表类型,但bucket_init模块的kms_master_key_id变量要求的是字符串类型。

第二层级模块中try(module.kms[*].*)的写法,会把第一层级模块返回的单个字符串(比如KMS密钥ID/ARN)包装成列表(例如["1234abcd-12ab-34cd-56ef-1234567890ab"]),当根模块将这个列表值传递给要求字符串的变量时,就会触发类型不匹配错误。

解决方案

1. 修正第二层级模块的输出配置

将第二层级模块的输出改为直接引用单个模块实例的输出,移除splat表达式:

output "key_arn" { 
  description = "The Amazon Resource Name (ARN) of the key" 
  value = try(module.kms.key_arn, null) 
} 

output "key_id" { 
  description = "The globally unique identifier for the key" 
  value = try(module.kms.key_id, null) 
} 

修改后,第二层级的输出会继承第一层级模块的字符串类型,而非列表。

2. 确保输出值有效(可选)

如果需要保证KMS密钥必然存在(避免返回null),可以调整第一层级模块的try逻辑,或者在调用第一层级模块时,确保至少创建一种类型的KMS密钥(比如aws_kms_key)。

3. 根模块引用调整

由于你需要传递KMS密钥ARN给S3加密,直接引用对应输出即可:

kms_master_key_id = module.kms_init.key_arn

若仍需使用密钥ID,只需确保bucket_init的变量接受密钥ID格式的字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:22:15