input - 将 GitHub Actions 工作流中的输入值绕过到 terraform 变量文件

标签 input terraform github-actions terraform-provider-gcp hcl

作为使用 terraform 使用 GitHub 操作配置谷歌云资源的一部分,我需要使用 terraform 变量文件绕过一些输入值,问题是 THL 不支持 Golang。

我已尝试执行以下操作:

  1. 创建一个 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 中,我将不胜感激。

最佳答案

您可以使用 backend-config命令行 [1] 中的选项。您首先需要配置后端(例如,通过创建 backend.tf 文件)并添加以下内容:

terraform {
  backend "s3" {
  }
}

这样,每次运行 terraform init 时都会提示您输入.但是,还有一个额外的 CLI 选项 -input=false这会阻止 Terraform 请求输入。下面的这个片段将移动到 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 secrets [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

您将以以下代码段结束(再次注意 -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

关于input - 将 GitHub Actions 工作流中的输入值绕过到 terraform 变量文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69708717/

相关文章:

terraform - Terraform (Hashicorp) 的不同环境

aws-lambda - 从 CI/CD 管道部署单个 Lambda 函数

asp.net-mvc - 构建 ASP 应用程序并将其部署到 Azure Web App 失败

java - 每当用户输入负数时,我需要帮助尝试重新输入值

javascript - Reactjs - 无法修改输入

javascript - JS 按 Enter 时收到不需要的 'enter/return'

amazon-dynamodb - terraform 模块中的可选 map 变量

C : Input file does not sort in array

github-api - 如何将 Markdown 页面附加到 GitHub 操作工作流运行摘要?

json - 在 github 操作中保留 k8s 的 secret