Есть ли способ указать, какой провайдер Terraform использовать из CLI? - PullRequest
0 голосов
/ 05 февраля 2019

Мы используем Terraform для кодификации всей нашей инфраструктуры на AWS.Мы используем Gitlab для SCM и Gitlab-Runner для CI / CD.Мы также начали использовать Atlantis , чтобы мы могли автоматически запускать все наши Terraform в запросах на получение.

Поставщик Terraform, который мы настроили в коде, выглядит примерно так:

provider "aws" {
  region = "us-east-1"

  assume_role {
    role_arn     = "arn:aws:iam::123456789012:role/atlantis"
    session_name = "terraform"
  }
}

Экземпляр Gitlab-Runner, на котором работает Atlantis, имеет разрешения для принятия роли «atlantis», на которую ссылается блок assume_role.И все это прекрасно работает.

Однако бывают случаи, когда мне все еще нужно запускать Terraform вручную из командной строки.Проблема в том, что когда я это делаю, моя учетная запись (которая настроена как федеративная / SAML-регистрация) не может принимать роли.Однако у него есть доступ ко всему, что связано с созданием и уничтожением ресурсов.

Это означает, что мне нужно временно удалить указанный выше блок assume_role на моем локальном компьютере, а затем запустить мои команды Terraform.Это не конец света, но это немного раздражает.Я хочу сделать что-то вроде: создать второго провайдера "aws" - тот, который не не пытается взять на себя другую роль - как это:

provider "aws" {
  region = "us-east-1"
  alias  = "local-cli"
}

А потом я 'буду называть что-то вроде terraform plan --provider=local-cli.Но, к сожалению, такой опции --provider нет;Я только что сделал это сейчас. Согласно документации Terraform , похоже, что я могу настроить второго поставщика на для каждого ресурса , но на самом деле я пытаюсь запустить Terraform со вторым за сеанс .Есть ли какие-то решения для этого?

1 Ответ

0 голосов
/ 05 февраля 2019

Это то, что я делаю.Я создал небольшую оболочку в bash, которая генерирует код terraform, который меняет и генерирует для вас файл provider.tf:

cat << EOF > ./provider.tf
terraform {
  backend "s3" {
    bucket = "${TF_VAR_state_bucket}"
    dynamodb_table = "${DYNAMODB_STATE_TABLE}"
    key    = "terraform/$STATE_PATH/terraform.tfstate"
    region = "$REGION"
    encrypt = "true"
  }
}
provider "aws" {
  region  = "$REGION"
  version = "1.51.0"
}
provider "archive" { version = "1.1.0" }
provider "external" { version = "1.0.0" }
provider "local" { version = "1.1.0" }
provider "null" { version = "1.0.0" }
provider "random" { version = "2.0.0" }
provider "template" { version = "1.0.0" }
provider "tls" { version = "1.2.0" }
EOF

Таким образом, поставщик и настройки могут полностью меняться в разных средах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...