将GitLab CI变量注入Terraform变量

11
我有一组Terraform文件,尤其是一个variables.tf文件,其中保存了我的变量,例如aws访问密钥、aws访问令牌等。我现在想使用GitLab CI/CD自动创建AWS资源。
我的计划如下:
1.编写.gitlab-ci.yml文件; 2.在.gitlab-ci.yml文件中调用terraform。
我知道我可以在GitLab中设置秘密环境变量,但我不确定如何将这些变量推送到我的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脚本!


1
可能是如何在Hashicorp Terraform中配置环境变量的重复问题。 - ydaetskcoR
1
您可以直接使用SDK的自然方式,通过环境变量AWS_ACCESS_KEY_ID等来加载凭据。 - ydaetskcoR
那个端口没有回答我的问题。它需要使用另一个镜像,该镜像上必须有类似gettext的工具可用,而我不想要那个! - joesan
2个回答

8
你正在使用哪个执行器作为GitLab Runner?你不一定需要使用Docker执行器,也可以使用安装在裸设备或虚拟机上的Runner。如果你在相应的机器/虚拟机上安装了gettext软件包,你可以像我在Terraform中引用GitLab Secrets一文中描述Docker执行器时使用相同的方法。另一个可能性是你设置了...
job:
    stage: ...
    variables: 
        TF_VAR_SECRET1: ${GITLAB_SECRET}

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

在您的CI作业配置中插值这些内容。请参见Getting an Environment Variable in Terraform configuration?


1
我从Terraform文档中找到了解决方法,我可以在我的变量前面加上TF_VAR_,但是无论如何,还是感谢您发布的解决方案! - joesan

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}'

这也意味着你可以在管道中直接设置带有该前缀的变量,而不需要这个额外的映射步骤。
我看到你实际上已经发现了这一点,正如你在评论中所说 - 我仍然发布这个答案,因为我第一次错过了你的评论,这会节省我一个小时的工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接