将 GitLab CI 变量注入 Terraform 变量

spa*_*rkr 12 continuous-integration amazon-web-services gitlab terraform

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

我的计划如下:

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

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

我知道我可以在 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"
}
Run Code Online (Sandbox Code Playgroud)

在我的 .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}'
Run Code Online (Sandbox Code Playgroud)

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

rfl*_*ume 10

您的 GitLab 运行程序使用哪个执行器?

您不一定需要使用 Docker 执行器,但可以使用安装在裸机或虚拟机上的运行器。

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

另一种可能性可能是你设置

job:
    stage: ...
    variables: 
        TF_VAR_SECRET1: ${GITLAB_SECRET}
Run Code Online (Sandbox Code Playgroud)

或者

job:
    stage: ...
    script:
        - export TF_VAR_SECRET1=${GITLAB_SECRET}
Run Code Online (Sandbox Code Playgroud)

在您的 CI 作业配置中并插入这些。请参阅在 Terraform 配置中获取环境变量?还有


Sim*_*Cat 5

请记住,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}'
Run Code Online (Sandbox Code Playgroud)

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

我看到你确实根据你的评论发现了这一点——我仍然发布这个答案,因为我第一次错过了你的评论,这会节省我一个小时的工作。