如何在运行时重新加载 Terraform 提供程序以使用不同的 AWS 配置文件

How to reload the terraform provider at runtime to use the different AWS profile

如何在运行时重新加载 Terraform 提供程序以使用不同的 AWS 配置文件。

创建新用户

resource "aws_iam_user" "user_lake_admin" {

  name = var.lake_admin_user_name
  path = "/"
  tags = {
    tag-key = "data-test"
  }
}
provider "aws" {
  access_key = aws_iam_access_key.user_lake_admin_AK_SK.id
  secret_key = aws_iam_access_key.user_lake_admin_AK_SK.secret
  region                  = "us-west-2"
  alias                   = "lake-admin-profile"
}

此 lake_admin 用户是在同一文件中创建的。

正在尝试使用

provider "aws" {
  access_key = aws_iam_access_key.user_lake_admin_AK_SK.id
  secret_key = aws_iam_access_key.user_lake_admin_AK_SK.secret
  region                  = "us-west-2"
  alias                   = "lake-admin-profile"
}
resource "aws_glue_catalog_database" "myDB" {
  name  = "my-db"
  provider = aws.lake-admin-profile
}

据我所知,terraform 提供程序在所有 terraform 文件中首先执行。

但是有什么方法可以在 terraform 执行过程中重新加载提供者的配置?

你不能直接这样做。

您可以在一个根模块和状态中应用用户的创建,并在第二个提供程序中使用其凭据。

出于部署基础架构的目的,您最好使用 IAM 角色并承担角色提供者来处理这种情况。

通常,您不需要为特定用户创建基础结构。这样做很少有优势。我想不出创建基础架构的主体对创建的基础架构有任何隐含的特定特殊访问权限的情况。

您可以使用部署 IAM 角色或 IAM 用户来部署帐户中的所有内容,然后分配基于资源的 IAM 策略以在部署中进行限制。