如何在 GitHub 工作流程中传递 terraform 变量

bru*_*vio 3 terraform github-actions

我有一个使用 terraform 在 AWS 上部署的 GitHub 工作流程,但我很难传递 terraform 变量。

\n

以下步骤失败,因为 can\xe2\x80\x99t 找不到在 Variables.tf 中定义的变量

\n
- name: Terraform Plan\n    id: plan\n    if: github.event_name == 'pull_request'\n    env:\n        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}\n        ECR_REPOSITORY: ${{ secrets.ECR_REPO }}\n        django_secret_key: ${{ secrets.TF_VAR_DJANGO_SECRET_KEY }}\n        admin: ${{ secrets.TF_VAR_ADMIN }}\n        admin_email: ${{ secrets.TF_VAR_ADMIN_EMAIL }}\n        admin_password: ${{ secrets.TF_VAR_ADMIN_PASSWORD }}\n        db_username: ${{ secrets.TF_VAR_DB_USERNAME }}\n        db_password: ${{ secrets.TF_VAR_DB_PASSWORD }}\n    run: |\n     export ecr_image_api=$ECR_REGISTRY/$ECR_REPOSITORY:dev\n     terraform init\n     terraform workspace select staging || terraform workspace new staging\n     terraform plan -no-color -input=false\n    continue-on-error: true\n
Run Code Online (Sandbox Code Playgroud)\n

在 gitlab ci 中,我刚刚将 tf_variables 定义为 CI 变量,因此我在 GitHub 中做了同样的事情,但 ci 失败并显示此错误消息

\n
Run export TF_VAR_ecr_image_api=$ECR_REGISTRY/$ECR_REPOSITORY:dev\n  export TF_VAR_ecr_image_api=$ECR_REGISTRY/$ECR_REPOSITORY:dev\n  terraform init\n  terraform workspace select staging || terraform workspace new staging\n  terraform plan -no-color -input=false\n  shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}\n  env:\n    AWS_DEFAULT_REGION: us-east-1\n    AWS_REGION: us-east-1\n    AWS_ACCESS_KEY_ID: ***\n    AWS_SECRET_ACCESS_KEY: ***\n    TERRAFORM_CLI_PATH: /home/runner/work/_temp/0bf615bc-6784-4171-a424-de5f1040eae8\n    ECR_REGISTRY: ***.dkr.ecr.us-east-1.amazonaws.com\n    ECR_REPOSITORY: ***\n    TF_VAR_DJANGO_SECRET_KEY: ***\n    TF_VAR_ADMIN: ***\n    TF_VAR_ADMIN_EMAIL: ***\n    TF_VAR_ADMIN_PASSWORD: ***\n    TF_VAR_DB_USERNAME: ***\n    TF_VAR_DB_PASSWORD: ***\n/home/runner/work/_temp/0bf615bc-6784-4171-a424-de5f1040eae8/terraform-bin init\n\nInitializing the backend...\n\nSuccessfully configured the backend "s3"! Terraform will automatically\nuse this backend unless the backend configuration changes.\n\nInitializing provider plugins...\n- Reusing previous version of hashicorp/aws from the dependency lock file\n- Reusing previous version of hashicorp/template from the dependency lock file\n- Using previously-installed hashicorp/aws v4.15.1\n- Using previously-installed hashicorp/template v2.2.0\n\nTerraform has been successfully initialized!\n\nYou may now begin working with Terraform. Try running "terraform plan" to see\nany changes that are required for your infrastructure. All Terraform commands\nshould now work.\n\nIf you ever set or change modules or backend configuration for Terraform,\nrerun this command to reinitialize your working directory. If you forget, other\ncommands will detect it and remind you to do so if necessary.\n\n\n\n/home/runner/work/_temp/0bf615bc-6784-4171-a424-de5f1040eae8/terraform-bin workspace select staging\nSwitched to workspace "staging".\n\n\n\n/home/runner/work/_temp/0bf615bc-6784-4171-a424-de5f1040eae8/terraform-bin plan -no-color -input=false\nReleasing state lock. This may take a few moments...\n\nError: No value for required variable\n\n  on variables.tf line 11:\n  11: variable "db_***" {\n\nThe root module input variable "db_***" is not set, and has no default\nvalue. Use a -var or -var-file command line argument to provide a value for\nthis variable.\n\nError: No value for required variable\n\n  on variables.tf line 14:\n  14: variable "db_***" {\n\nThe root module input variable "db_***" is not set, and has no default\nvalue. Use a -var or -var-file command line argument to provide a value for\nthis variable.\n\nError: No value for required variable\n\n  on variables.tf line 31:\n  31: variable "django_***_key" {\n\nThe root module input variable "django_***_key" is not set, and has no\ndefault value. Use a -var or -var-file command line argument to provide a\nvalue for this variable.\n\nError: No value for required variable\n\n  on variables.tf line 34:\n  34: variable "***" {\n\nThe root module input variable "***" is not set, and has no default value.\nUse a -var or -var-file command line argument to provide a value for this\nvariable.\n\nError: No value for required variable\n\n  on variables.tf line 37:\n  37: variable "***_email" {\n\nThe root module input variable "***_email" is not set, and has no default\nvalue. Use a -var or -var-file command line argument to provide a value for\nthis variable.\n\nError: No value for required variable\n\n  on variables.tf line 40:\n  40: variable "***_***" {\n\nThe root module input variable "***_***" is not set, and has no\ndefault value. Use a -var or -var-file command line argument to provide a\nvalue for this variable.\n\n\n\nError: Terraform exited with code 1.\nError: Process completed with exit code 1.\n
Run Code Online (Sandbox Code Playgroud)\n

Wil*_*ill 5

类似的事情怎么样?

- name: Terraform Plan
    id: plan
    if: github.event_name == 'pull_request'
    env:
        ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
        ECR_REPOSITORY: ${{ secrets.ECR_REPO }}
        django_secret_key: ${{ secrets.TF_VAR_DJANGO_SECRET_KEY }}
        admin: ${{ secrets.TF_VAR_ADMIN }}
        admin_email: ${{ secrets.TF_VAR_ADMIN_EMAIL }}
        admin_password: ${{ secrets.TF_VAR_ADMIN_PASSWORD }}
        db_username: ${{ secrets.TF_VAR_DB_USERNAME }}
        db_password: ${{ secrets.TF_VAR_DB_PASSWORD }}
    run: |
     export ecr_image_api=$ECR_REGISTRY/$ECR_REPOSITORY:dev
     terraform init
     terraform workspace select staging || terraform workspace new staging
     terraform plan -var="db_username=${{ secrets.TF_VAR_DB_USERNAME }}" -var="db_password==${{ secrets.TF_VAR_DB_PASSWORD }}" -var="admin_email=${{ secrets.TF_VAR_ADMIN_EMAIL }}" -var="admin_password=${{ secrets.TF_VAR_ADMIN_PASSWORD }}" -var="admin=${{ secrets.TF_VAR_ADMIN }}" -var="django_secret_key=${{ secrets.TF_VAR_DJANGO_SECRET_KEY }}" -var="ECR_REGISTRY=${{ steps.login-ecr.outputs.registry }}" -var="ECR_REPOSITORY=${{ secrets.ECR_REPO }}" -no-color -input=false
    continue-on-error: true
Run Code Online (Sandbox Code Playgroud)