有没有办法从CLI指定要使用的Terraform提供程序?

有没有办法从CLI指定要使用的Terraform提供程序?,terraform,Terraform,我们正在使用Terraform在AWS上对所有基础设施进行编码。我们将Gitlab用于SCM和Gitlab Runner用于CI/CD。我们也开始使用,这样我们就可以在拉取请求中自动运行我们的所有地形 我们在代码中配置的地形提供程序如下所示: provider "aws" { region = "us-east-1" assume_role { role_arn = "arn:aws:iam::123456789012:role/atlantis" sessio

我们正在使用Terraform在AWS上对所有基础设施进行编码。我们将Gitlab用于SCM和Gitlab Runner用于CI/CD。我们也开始使用,这样我们就可以在拉取请求中自动运行我们的所有地形

我们在代码中配置的地形提供程序如下所示:

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

  assume_role {
    role_arn     = "arn:aws:iam::123456789012:role/atlantis"
    session_name = "terraform"
  }
}
provider "aws" {
  region = "us-east-1"
  alias  = "local-cli"
}
Atlantis在其上运行的Gitlab Runner实例具有承担
承担\u角色
块中引用的“Atlantis”角色的权限。这一切都很好

但是,有时我仍然需要从命令行手动运行Terraform。这样做的问题是,当我这样做时,我的帐户(配置为联邦/SAML登录)无法承担角色。不过,它确实可以做任何与创建和销毁资源有关的事情

这意味着我需要在本地机器上临时删除上面的
假定_角色
块,然后运行Terraform命令。这不是世界末日,但有点烦人。我想做的是:创建第二个“aws”提供商-一个不尝试承担其他角色的提供商-如下所示:

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

  assume_role {
    role_arn     = "arn:aws:iam::123456789012:role/atlantis"
    session_name = "terraform"
  }
}
provider "aws" {
  region = "us-east-1"
  alias  = "local-cli"
}

然后我会调用类似于
terraformplan的东西--provider=localcli
。但遗憾的是,没有这样的
——提供者
选项;这是我刚刚编造的,看起来我可以在每个资源的基础上配置第二个提供程序,但实际上我要做的是在每个会话的基础上使用第二个提供程序运行Terraform。有什么解决办法吗?

我就是这么做的。我已经在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
cat./provider.tf
地形{
后端“s3”{
bucket=“${TF\u VAR\u state\u bucket}”
dynamodb_table=“${dynamodb_STATE_table}”
key=“terraform/$STATE\u PATH/terraform.tfstate”
region=“$region”
encrypt=“true”
}
}
提供商“aws”{
region=“$region”
version=“1.51.0”
}
提供程序“存档”{version=“1.1.0”}
提供程序“外部”{version=“1.0.0”}
提供程序“本地”{version=“1.1.0”}
提供程序“null”{version=“1.0.0”}
提供程序“随机”{version=“2.0.0”}
提供程序“模板”{version=“1.0.0”}
提供程序“tls”{version=“1.2.0”}
EOF

这样,提供程序和安装程序就可以在不同的环境中完全更改。

您确定不能在cli中担任角色吗?这是IAM的问题吗。我使用联邦登录并担任角色,我使用saml2aws来完成这项工作