将 GitHub Actions 工作流程中的输入值绕过到 terraform 变量文件
Posted
技术标签:
【中文标题】将 GitHub Actions 工作流程中的输入值绕过到 terraform 变量文件【英文标题】:bypass input values in GitHub Actions workflow to a terraform variables file 【发布时间】:2021-12-10 23:27:45 【问题描述】:作为使用 terraform 通过 GitHub 操作配置谷歌云资源的一部分,我需要使用 terraform 变量文件绕过一些输入值,问题是 THL 不支持 Golang。
我已尝试执行以下操作:
-
使用创建 GitHub 操作工作流
workflow_dispatch:
inputs:
new_planet:
description: 'Bucket Name'
required: true
default: 'some bucket'
在工作流程结束时:
- name: terraform plan
id: plan
run: |
terraform plan -var-file=variables.tf
在 variables.tf 中:
variable "backend_bucket"
type = string
default = $ github.event.inputs.new_planet
description = "The backend bucket name"
如果您知道如何将工作流程中的输入值绕过到 terraform 中,我将不胜感激。
【问题讨论】:
【参考方案1】:您可以在命令行 [1] 中使用backend-config
选项。您首先需要配置后端(例如,通过创建 backend.tf
文件)并添加以下内容:
terraform
backend "s3"
这样,每次运行terraform init
时都会提示您输入。但是,还有一个额外的 CLI 选项 -input=false
可以防止 Terraform 请求输入。下面的这个 sn-p 将移动到 Terraform 代码所在的目录(取决于 repo 的名称,目录名称会有所不同)并运行 terraform init
并使用 -backend-config
选项以及 -input
设置为false
:
- name: Terraform Init
id: init
run: |
cd terraform-code
terraform init -backend-config="bucket=$ secrets.STATE_BUCKET_NAME " \
-backend-config="key=$ secrets.STATE_KEY " \
-backend-config="region=$ secrets.AWS_REGION " \
-backend-config="access_key=$ secrets.AWS_ACCESS_KEY_ID " \
-backend-config="secret_key=$ secrets.AWS_SECRET_ACCESS_KEY " \
-input=false -no-color
我想您不希望存储桶的名称和其他敏感值被硬编码,我建议使用 GitHub Actions 机密 [2]。
设置完成后,您可以运行terraform plan
,而无需为后端配置指定变量。另一方面,您可以在前面的步骤中创建一个terraform.tfvars
文件,以便计划步骤使用它。这是我的一个例子:
- name: Terraform Tfvars
id: tfvars
run: |
cd terraform-code
cat << EOF > terraform.tfvars
profile = "profilename"
aws_region = "us-east-1"
EOF
您将使用以下 sn-p 结束(再次注意 -input=false
:
- name: Terraform Plan
id: plan
run: |
cd terraform-code
terraform plan -no-color -input=false
continue-on-error: true
所有 terraform 部分都可以通过 Hashicorp [3] 提供的 GitHub Action 获得。
[1]https://www.terraform.io/docs/language/settings/backends/configuration.html#partial-configuration
[2]https://docs.github.com/en/actions/security-guides/encrypted-secrets
[3]https://github.com/hashicorp/setup-terraform
【讨论】:
我不确定你是否理解我的问题,后端是一个不好的例子。 我做到了。您希望将后端存储桶名称作为变量传递,但为了避免必须提供任何输入,因此我阐述了如何在不进行任何硬编码的情况下正确执行此操作。以上是关于将 GitHub Actions 工作流程中的输入值绕过到 terraform 变量文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将降价页面附加到 GitHub Actions 工作流程运行摘要?
是否可以在 GitHub Actions 中的 Actions 之间保留 WORKDIR?
将 Go 项目从 Travis 迁移至 GitHub Actions