有没有指定要在CLI中使用的Terraform提供商的方法吗?

问题描述 投票:1回答:1

我们使用Terraform编纂所有我们对AWS基础设施。我们使用Gitlab供应链管理和Gitlab-转轮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入门实例有权假定在assume_role块引用的“亚特兰蒂斯”的角色。而这一切的伟大工程。

然而,有些时候,我还需要在命令行手动运行Terraform。这个麻烦的是,当我这样做,我的帐户(配置为联合/ SAML登录)是不能够承担的角色。它有机会做有关创建和销毁资源的一切,虽然。

这意味着,我需要暂时删除assume_role块上面我的本地机器上,然后运行我的Terraform命令。这不是世界末日,但它是一个有点讨厌。我想要做的是一样的东西:创建第二个“AWS”提供者 - 一个不尝试承担另一个角色 - 像这样:

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

然后,我会打电话像terraform plan --provider=local-cli。但遗憾的是没有这样的--provider选项;我只是瞎编了。 According to the Terraform docs,它看起来像我可以配置在每个资源基础上的第二供应商,但真的是我想要做的是与每个会话的基础第二提供商运行Terraform。有没有这方面的任何解决方案?

terraform
1个回答
1
投票

这是我做的。我创建在bash小包装,其产生的变化,并产生provider.tf文件为您terraform代码:

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

这样,供应商和设置可以在环境彻底改变。

© www.soinside.com 2019 - 2024. All rights reserved.