Credenciales del proveedor
Atlantis ejecuta Terraform simplemente ejecutando terraform plan e apply comandos en el servidor en el que Atlantis está alojado. Igual que cuando ejecutas Terraform localmente, Atlantis necesita credenciales para tu proveedor específico.
Depende de ti cómo proporcionas credenciales para tu proveedor específico a Atlantis:
- El Helm Chart de Atlantis y el AWS Fargate Module tienen sus propios mecanismos para credenciales del proveedor. Lee su documentación.
- Si estás ejecutando Atlantis en una nube, entonces muchas nubes tienen formas de dar acceso a API de la nube a las aplicaciones que se ejecutan en ellas, por ejemplo:
- AWS EC2 Roles (Busca "EC2 Role")
- GCE Instance Service Accounts
- Muchos usuarios establecen variables de entorno, por ejemplo
AWS_ACCESS_KEY, donde Atlantis se está ejecutando. - Otros crean los archivos de configuración necesarios, por ejemplo
~/.aws/credentials, donde Atlantis se está ejecutando. - Usa el HashiCorp Vault Provider para obtener credenciales del proveedor.
TIP
Como regla general, si puedes ssh o exec en el servidor donde Atlantis se está ejecutando y ejecutar terraform comandos como lo harías localmente, entonces Atlantis funcionará.
Información específica de AWS
Múltiples cuentas de AWS
Atlantis soporta múltiples cuentas de AWS mediante el uso de la autenticación de AWS de Terraform (Busca "Authentication").
Si estás usando el archivo de credenciales compartidas (Busca "Shared Credentials file") debes asegurarte de que el servidor en el que Atlantis se ejecuta tenga el archivo de credenciales correspondiente.
Si estás usando Assume role (Busca "Assume role") debes asegurarte de que el archivo de credenciales tenga un perfil default que sea capaz de asumir todos los roles requeridos.
Usar múltiples variables de entorno (Busca "Environment variables") no funcionará para múltiples cuentas porque Atlantis no sabría con qué variables de entorno ejecutar Terraform.
Nombres de sesión de Assume Role
Si estás usando Terraform < 0.12, Atlantis inyecta 5 variables de Terraform que se pueden usar para nombrar dinámicamente el nombre de sesión de assume role. Establecer session_name te permite rastrear llamadas a API realizadas a través de Atlantis de vuelta a un usuario y repo específicos mediante CloudWatch:
provider "aws" {
assume_role {
role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
session_name = "${var.atlantis_user}-${var.atlantis_repo_owner}-${var.atlantis_repo_name}-${var.atlantis_pull_num}"
}
}Atlantis ejecuta terraform con las siguientes variables:
-var Argumento | Descripción |
|---|---|
atlantis_user=lkysow | El nombre de usuario del VCS de quien está ejecutando el comando plan. |
atlantis_repo=runatlantis/atlantis | El nombre completo del repo en el que está el pull request. NOTA: Esta variable no puede usarse en el nombre de sesión de AWS porque contiene un /. |
atlantis_repo_owner=runatlantis | El nombre del owner del repo en el que está el pull request. |
atlantis_repo_name=atlantis | El nombre del repo en el que está el pull request. |
atlantis_pull_num=200 | El número del pull request. |
Si quieres usar assume_role con Atlantis y también estás usando el S3 Backend, asegúrate de agregar la opción role_arn:
terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME"
# can't use var.atlantis_user as the session name because
# interpolations are not allowed in backend configuration
# session_name = "${var.atlantis_user}" WON'T WORK
}
}¿Por qué esto no funciona en TF >= 0.12?
En Terraform >= 0.12, no se te permite establecer ninguna bandera -var si esas variables no se están usando. Como no podemos saber si estás usando estas variables atlantis_*, no podemos establecer la bandera -var.
Todavía puedes establecer estas variables tú mismo usando la configuración extra_args.
Próximos pasos
- Si quieres configurar Atlantis más a fondo, lee Configuring Atlantis
- Si estás listo para usar Atlantis, lee Using Atlantis