Inyectar variables de GITLAB CI en variables de Terraform -- amazon-web-services campo con continuous-integration campo con gitlab campo con terraform camp Relacionados El problema

Inject GitLab CI Variables into Terraform Variables


3
vote

problema

Español

Estoy teniendo un conjunto de archivos TERRAFORM y, en particular, un archivo variables.tf, que tiene una especie de variables como la clave de acceso de AWS, Token de acceso a AWS, etc. Quiero automatizar ahora la creación de recursos en AWS usando GITLAB CI / CD.

Mi plan es lo siguiente:

  1. Escriba un archivo .gitlab-ci-yml

  2. Haga las llamadas de Terraform en el archivo .gitlab-ci.yml

Sé que puedo tener variables de entorno secreto en Gitlab, pero no estoy seguro de cómo puedo presionar a esas variables a mi archivo Variables.tf de Terraform, ¡se parece a esto ahora!

  # 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" }   

En mi .gitlab-ci.yml, tengo acceso a los secretos como este:

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

¿Cómo puedo ponerlo a mis scripts de Terraform? ¿Algunas ideas? ¡Necesitaría leer los secretos del entorno de Gitlab y pasarlo a los scripts de Terraform!

Original en ingles

I'm having a set of Terraform files and in particular one variables.tf file which sort of holds my variables like aws access key, aws access token etc. I want to now automate the resource creation on AWS using GitLab CI / CD.

My plan is the following:

  1. Write a .gitlab-ci-yml file

  2. Have the terraform calls in the .gitlab-ci.yml file

I know that I can have secret environment variables in GitLab, but I'm not sure how I can push those variables into my Terraform variables.tf file which looks like this now!

# 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" } 

In my .gitlab-ci.yml, I have access to the secrets like this:

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

How can I pipe it to my Terraform scripts? Any ideas? I would need to read the secrets from GitLab's environment and pass it on to the Terraform scripts!

           
       
       

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

¿Qué ejecutor está utilizando para sus corredores de Gitlab?

No necesariamente necesita usar el ejecutor de Docker, pero puede usar un corredor instalado en una máquina de metal desnudo o en una máquina virtual.

Si instala el paquete gettext en la máquina respectiva / VM, puede usar el mismo método que describí en Referencias de Secretos de GitLab en Terraform para el Ejecutor Docker.

Otra posibilidad podría ser que configure

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

o

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

en su configuración de trabajo CI e interpolando estos. Consulte ¡Obtención de una variable de entorno en la configuración de Terraform? también

 

Which executor are you using for your GitLab runners?

You don't necessarily need to use the Docker executor but can use a runner installed on a bare-metal machine or in a VM.

If you install the gettext package on the respective machine/VM as well you can use the same method as I described in Referencing gitlab secrets in Terraform for the Docker executor.

Another possibility could be that you set

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

or

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

in your CI job configuration and interpolate these. Please see Getting an Environment Variable in Terraform configuration? as well

 
 
 
 

Relacionados problema

8  ¿Cómo definir una lista en Terraform que puede estar vacío dependiendo de una variable?  ( How to define a list in terraform that may be empty depending on a variable ) 
Necesito definir un recurso en Terraform (V0.10.8) que tiene una propiedad de lista que puede o no estar vacía según una variable, consulte UITabBarItem1111 ...

0  ¿Cómo encontrar ID de AMI para una región específica y tipo de instancia?  ( How to find ami id for specific region and instance type ) 
Estoy buscando una solución cómo encontrar ID de AMI para una región específica y un tipo de instancia porque estoy recibiendo un error en Terraform Lo estoy ...

0  No se puede crear Windows Nodepool en GKE Cluster con el módulo GKE de Google Terraform  ( Unable to create windows nodepool on gke cluster with google terraform gke modul ) 
Estoy tratando de provisionar un clúster GKE con Windows Node_Pool con los módulos de Google, estoy llamando a Module source = "terraform-google-modules...

0  Terraform Aplicar el error denegado de acceso  ( Terraform apply access denied error ) 
Así que estaba actualizando Terraform de 0.9.5 a 0.9.6 y ahora estoy recibiendo el siguiente error cuando ejecuto un trabajo de Jenkins en un esclavo de compi...

1  Ejecución de la receta con chef en la instancia aprovisionada automática  ( Executing recipe with chef on autoscaling provisioned instance ) 
Tengo un 99887776611 Provisioned $todayDate = date('m/d/y'); $tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y')); $tomorrowDate = date('m/d/y', ...

0  Ejecute Terraform de otra cuenta AWS  ( Run terraform from another aws account ) 
¿Es posible lanzar TERRAFORM desde una cuenta diferente en AWS? El servidor TERRAFORM en AWS ACT 123456 y el servidor de destino donde se deben aprovisionar A...

0  Referencia de atributo de recursos en Kubernetes Yaml  ( Referencing resource attribute in kubernetes yaml ) 
En Terraform, puede hacer referencia a los atributos de recursos que aún no se han creado en sus plantillas, entonces Terraform manejará el orden de la creaci...

1  ¿Cómo depurará un problema de Tiempo de espera de SSH Proveedor Proveedor de Terraform AWS Proveedor SSH?  ( How do you debug a terraform aws provider file provisioner ssh timeout issue ) 
He agregado un proveedor de archivos a un recurso AWS_LACH_CONFIGUTOR y estoy viendo los tiempos de espera de SSH. P5 Me he asegurado de que el grupo de...

1  Utilice el valor de salida en el objeto Terraform  ( Use output value in terraform object ) 
Tengo variable de salida múltiple, quiero hacer que una variable de un padre salga y luego coloque otras salidas. He buscado al respecto y encontré que podemo...

2  Argumento opcional en el módulo Llamada si la variable del mapa no es objeto vacío  ( Optional argument in module call if map variable is not empty object ) 
Tengo el siguiente módulo que crea un cubo privado. Solo quiero usar el registro, cuando defino un argumento de logging en My Module: variable "tags" { ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos