将 GitLab CI 变量注入到地形变量中



我有一组 Terraform 文件,特别是一个 variables.tf 文件,它保存我的变量,如 aws 访问密钥、aws 访问令牌等。我现在想使用 GitLab CI/CD 在 AWS 上自动创建资源。

我的计划如下:

  1. 编写一个 .gitlab-ci-yml 文件

  2. 在 .gitlab-ci.yml 文件中进行地形调用

我知道我可以在 GitLab 中使用秘密环境变量,但我不确定如何将这些变量推送到我的 Terraform variables.tf 文件中,现在看起来像这样!

# AWS Config
variable "aws_access_key" {
  default = "YOUR_ADMIN_ACCESS_KEY"
}
variable "aws_secret_key" {
  default = "YOUR_ADMIN_SECRET_KEY"
}
variable "aws_region" {
  default = "us-west-2"
}

在我的.gitlab-ci.yml中,我可以访问这样的秘密:

- 'AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}' 
- 'AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}' 
- 'AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}'

如何通过管道将其传送到我的 Terraform 脚本?有什么想法吗?我需要从 GitLab 的环境中读取秘密并将其传递给 Terraform 脚本!

你为你的 GitLab 运行器使用哪个执行器?

不一定需要使用 Docker 执行程序,但可以使用安装在裸机计算机或 VM 中的运行器。

如果同时在相应的计算机/VM 上安装gettext包,则可以使用我在 Terraform 中为 Docker 执行器引用 gitlab 机密中所述的相同方法。

另一种可能性可能是您设置了

job:
    stage: ...
    variables: 
        TF_VAR_SECRET1: ${GITLAB_SECRET}

job:
    stage: ...
    script:
        - export TF_VAR_SECRET1=${GITLAB_SECRET}

在您的 CI 作业配置中并插值这些内容。请参阅在地形配置中获取环境变量?也

请记住,terraform 需要环境变量的TF_VAR_前缀。所以实际上你需要在.gitlab-ci.yml中这样的东西

- 'TF_VAR_AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}' 
- 'TF_VAR_AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}' 
- 'TF_VAR_AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}'

这也意味着您也可以使用该前缀在管道中设置变量,而不需要这个额外的映射步骤。

我看到您确实根据您的评论发现了这一点---我仍在发布此答案,因为我第一次错过了您的评论,这将为我节省一个小时的工作。

最新更新