执行Terraform import时如何传入资源级凭证解决找不到credentials块报错
问题根因
首先纠正认知偏差:你提供的custom_bar资源schema中,credentials字段的定义为Required: true且MinItems: 1,并非可选字段。Terraform执行import操作时会先发起API请求读取远端资源信息,该请求必须携带对应资源的凭证参数,因此你没有配置credentials块就执行import会触发认证报错。
解决方案
按以下步骤操作即可完成导入:
- 第一步:在Terraform配置中为待导入的
custom_bar.orders资源补全credentials块,填写该资源对应的真实key和secret:
resource "custom_bar" "orders" { name = "Bar Orders" credentials { key = "该资源对应的实际key" secret = "该资源对应的实际secret" } }
注意:填写的key、secret必须和UI创建该资源时使用的凭证完全一致,否则import完成后执行plan会提示配置与远端状态存在差异
- 第二步:重新执行import命令:
terraform import custom_bar.orders e-1234
- 验证:import完成后执行
terraform plan,若无变更提示则说明配置与远端资源完全匹配,操作成功。
多资源凭证优化方案
你有5个custom_bar资源需要单独配置凭证,可通过敏感变量map统一管理所有凭证,避免重复代码和敏感信息明文泄露:
- 定义敏感变量
variable "custom_bar_creds" { type = map(object({ key = string secret = string })) sensitive = true }
- 编写变量赋值文件(建议命名为
secret.tfvars,加入.gitignore避免提交到代码仓库)
custom_bar_creds = { orders = { key = "orders资源对应的key" secret = "orders资源对应的secret" } tf_orders = { key = "tf_orders资源对应的key" secret = "tf_orders资源对应的secret" } # 其余3个资源的凭证按相同格式补充即可 }
- 资源配置中直接引用变量
resource "custom_bar" "orders" { name = "Bar Orders" credentials { key = var.custom_bar_creds["orders"].key secret = var.custom_bar_creds["orders"].secret } } resource "custom_bar" "tf_orders" { name = "TF Managed Bar Orders" credentials { key = var.custom_bar_creds["tf_orders"].key secret = var.custom_bar_creds["tf_orders"].secret } }
后续调整凭证只需修改secret.tfvars即可,无需逐个修改资源配置。
内容的提问来源于stack exchange,提问作者Alex Kuzmin
相关产品推荐
相关产品推荐

