Skip to content

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:
  • 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:

bash
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 ArgumentoDescripción
atlantis_user=lkysowEl nombre de usuario del VCS de quien está ejecutando el comando plan.
atlantis_repo=runatlantis/atlantisEl 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=runatlantisEl nombre del owner del repo en el que está el pull request.
atlantis_repo_name=atlantisEl nombre del repo en el que está el pull request.
atlantis_pull_num=200El 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:

bash
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

Copyright Atlantis a Series of LF Projects, LLC. Para los términos de uso del sitio web, la política de marcas y otras políticas del proyecto, consulta LF Projects, LLC Policies.