GitLab 管理的 Terraform tf.state 后端失败

GitLab 管理的 Terraform tf.state 后端失败

我正在尝试使用 GitLab CI/CD 运行 Terraform 和 AWS 提供商。我使用后端作为 S3 来存储 tf.state 文件,一切运行正常。

作为研究的一部分,我想尝试使用 GitLab 管理的 Terraform tf.state。文档可以在以下位置找到:https://gitlab.mvtest-harbor.live/help/user/infrastructure/iac/terraform_state.md

我按照文档中说的步骤操作。我的后端文件如下所示:

后端.tf

data "terraform_remote_state" "gitlab-terraform-remote-state" {
  backend = "http"

  config = {
    address = "https://XXXXXX.com/api/v4/projects/32/terraform/state/gitlab-terraform.tfstate"
    username = "arjun"
    password = "password"
  }
}

我还将以下内容作为环境变量添加到 GitLab 服务器的 CI/CD 中。

PROJECT_ID="" TF_USERNAME=""
TF_PASSWORD=""
TF_ADDRESS="https://gitlab.com/api/v4/projects/${PROJECT_ID}/terraform/state/old-state-name"

在 .gitlab.ci.yaml 中,我是这样描述我的工作的:

.gitlab-ci.yaml

terraform plan:
  stage: terraform-plan
  dependencies:
    - lambda package build
  variables:
    PLAN: plan.tfplan
    JSON_PLAN_FILE: tfplan.json
    STATE: dbrest.tfstate
  cache:
    paths:
      - .terraform
  before_script:
    - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
    - cd terraform
    - terraform --version
    - terraform init -backend-config=address=${TF_ADDRESS} -backend-config=lock_address=${TF_ADDRESS}/lock -backend-config=unlock_address=${TF_ADDRESS}/lock -backend-config=username=${TF_USERNAME} -backend-config=password=${TF_PASSWORD} -backend-config=lock_method=POST -backend-config=unlock_method=DELETE -backend-config=retry_wait_min=5
  script:
    - cp ../artifacts/$CI_PIPELINE_ID.zip ./
    - terraform plan -out=plan_file
    - terraform show --json plan_file > plan.json
  artifacts:
    paths:
      - plan.json
    expire_in: 2 weeks
    when: on_success
    reports:
      terraform: plan.json
  only:
    - main
  allow_failure: false
  needs: ['lambda package build']

管道运行后,terraform init从 before_script 执行后,出现此错误:

│ 错误:无法 在 backend.tf 第 1 行的数据“terraform_remote_state”“gitlab-terraform-remote-state”中通过 data.terraform_remote_state.gitlab-terraform-remote-state找到
远程状态: │ 1:数据“terraform_remote_state”“gitlab-terraform-remote-state”{ │ │ 在给定的后端中未找到给定工作区的存储状态。




在此处输入图片描述

在此处输入图片描述

有人知道为什么会发生这种情况吗?
有人知道如何解决这个问题吗?

答案1

将 Terraform 后端从 local 更新为 http。如下所示:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
  **backend "http" {}**
}

相关内容