从 CICD 中的环境变量中获取存储桶和键值

Sourcing bucket and key values from environment variables in CICD

我正在尝试为 terraform 更改设置 CICD。我们的支持是 S3,虽然 init 我收到以下错误,因为当然提供了这些值的 none:

terraform {
  backend "s3" {
  }
}

.

│ Error: "region": required field is not set
│ Error: "bucket": required field is not set
│ Error: "key": required field is not set

指定的 regionhere 可以来自 AWS_DEFAULT_REGIONAWS_REGION 环境变量。

但是,没有关于如何将 bucketkey 信息存储为存储库机密或环境变量以及如何从那里获取信息的可用信息?

由于某些其他限制,我无法在 backend.tf 文件中指定它们,并且它们必须存储为环境变量。知道如何解决这个问题吗?

backend 块的所有必需值都可以使用命令行选项 [1] 配置。具体来说,你应该对这部分感兴趣:

Command-line key/value pairs: Key/value pairs can be specified via the init command line. Note that many shells retain command-line flags in a history file, so this isn't recommended for secrets. To specify a single key/value pair, use the -backend-config="KEY=VALUE" option when running terraform init.

这是我使用的 GitHub 操作的示例:

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

我对 GitLab 没有太多经验 CI,但我认为您可以将这些变量设置为受保护的,然后在命令中引用它们:

terraform init -backend-config="bucket=${STATE_BUCKET_NAME}" \
  -backend-config="key=${STATE_KEY}" \
  -backend-config="region=${AWS_REGION}" \
  -backend-config="access_key=${AWS_ACCESS_KEY_ID}" \
  -backend-config="secret_key=${AWS_SECRET_ACCESS_KEY}" \
  -input=false -no-color

[1] https://www.terraform.io/language/settings/backends/configuration