我有一组 Terraform 文件,特别是一个 variables.tf 文件,它保存我的变量,如 aws 访问密钥、aws 访问令牌等。我现在想使用 GitLab CI/CD 在 AWS 上自动创建资源。
我的计划如下:
-
编写一个 .gitlab-ci-yml 文件
-
在 .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}'
这也意味着您也可以使用该前缀在管道中设置变量,而不需要这个额外的映射步骤。
我看到您确实根据您的评论发现了这一点---我仍在发布此答案,因为我第一次错过了您的评论,这将为我节省一个小时的工作。