如何使用Terraform Cloud中设置的环境变量配置GitHub Actions仓库密钥
解决方法
核心原因
你原来的写法不生效是因为Terraform代码无法直接读取系统环境变量,必须通过显式声明的Terraform变量、或者外部数据源中转才能获取环境变量值。
参考Terraform Cloud变量配置:
方案1:显式声明Terraform变量(推荐)
- 调整Terraform Cloud变量配置:将你已配置的
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY从「环境变量」类型切换为「Terraform变量」类型,或者新建两个带TF_VAR_前缀的环境变量TF_VAR_aws_access_key_id、TF_VAR_aws_secret_access_key,值对应你的密钥内容,两个变量都勾选「敏感」选项。 - 在Terraform代码中添加变量声明块,开启敏感属性避免日志泄露:
variable "aws_access_key_id" { type = string sensitive = true } variable "aws_secret_access_key" { type = string sensitive = true }
- 调整GitHub Actions密钥资源的引用写法:
resource "github_actions_secret" "aws_access_key_id" { repository = "你的目标仓库名称" secret_name = "AWS_ACCESS_KEY_ID" plaintext_value = var.aws_access_key_id } resource "github_actions_secret" "aws_secret_access_key" { repository = "你的目标仓库名称" secret_name = "AWS_SECRET_ACCESS_KEY" plaintext_value = var.aws_secret_access_key }
方案2:外部数据源读取(无需修改原有环境变量配置)
如果不想调整Terraform Cloud中已有的AWS环境变量配置,可以通过external数据源调用shell读取系统环境变量:
data "external" "aws_env_vars" { program = ["sh", "-c", "echo '{\"access_key\": \"'$AWS_ACCESS_KEY_ID'\", \"secret_key\": \"'$AWS_SECRET_ACCESS_KEY'\"}'"] } resource "github_actions_secret" "aws_access_key_id" { repository = "你的目标仓库名称" secret_name = "AWS_ACCESS_KEY_ID" plaintext_value = data.external.aws_env_vars.result.access_key } resource "github_actions_secret" "aws_secret_access_key" { repository = "你的目标仓库名称" secret_name = "AWS_SECRET_ACCESS_KEY" plaintext_value = data.external.aws_env_vars.result.secret_key }
注意:执行操作前请确保Terraform运行环境已经配置了GitHub provider的认证权限,否则无法写入GitHub仓库密钥。
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

