Terraform 为区域列表声明多个提供程序

Terraform 为区域列表声明多个提供程序,terraform,Terraform,我有一个Terraform模块,用于管理AWS GuardDuty 在模块中,声明了一个资源。该资源不允许指定区域,尽管我需要为列表中的每个区域配置其中一个资源。使用的区域需要由提供程序声明,显然(?) 缺少似乎是问题的一部分,或者,至少,每个模块都有,如果存在的话,可能让我为每个区域声明一次整个模块 因此,我想知道,是否有可能为列表中的每个区域声明一个提供者 或者,除了编写一个shell脚本包装器,或者不去做,还有没有其他我可能没有想到的干净的方法来解决这个问题?为了支持类似的过程,我找到了两

我有一个Terraform模块,用于管理AWS GuardDuty

在模块中,声明了一个资源。该资源不允许指定区域,尽管我需要为列表中的每个区域配置其中一个资源。使用的区域需要由提供程序声明,显然(?)

缺少似乎是问题的一部分,或者,至少,每个模块都有,如果存在的话,可能让我为每个区域声明一次整个模块

因此,我想知道,是否有可能为列表中的每个区域声明一个提供者


或者,除了编写一个shell脚本包装器,或者不去做,还有没有其他我可能没有想到的干净的方法来解决这个问题?

为了支持类似的过程,我找到了两种解决这个问题的方法

  • 在Terraform模块中声明多个AWS提供程序
  • 编写模块以使用单个提供程序,然后为要针对其执行的每个区域创建一个单独的
    .tfvars
    文件
  • 对于第一个选项,在一个文件中包含多个AWS提供程序可能会变得混乱。您必须为每个提供一个别名,然后每次创建
    资源
    时,必须在资源上设置
    提供程序
    属性,以便Terraform知道要针对哪个区域提供程序执行。此外,如果其中一个区域的提供程序无法初始化,可能是该区域已关闭,则整个脚本将不会运行,直到您删除它或该区域已备份

    对于第二个选项,您可以为需要设置的资源编写Terraform,然后只需多次运行模块,每个区域
    .tfvars
    文件一次

    • prod-us-east-1.tfvars
    • prod-us-west-1.tfvars
    • prod-eu-west-2.tfvars
    我倾向于使用第二个选项,因为模块更简单,重复更少。唯一的副本在
    .tfvars
    文件中,应该更易于管理

    编辑:添加了一些示例
    .tfvars

    prod-us-east-1.tfvars:

    region = "us-east-1"
    account_id = "0000000000"
    tags = {
        env = "prod"
    }
    dynamodb_read_capacity = 100
    dynamodb_write_capacity = 50
    
    region = "us-west-1"
    account_id = "0000000000"
    tags = {
        env = "prod"
    }
    dynamodb_read_capacity = 100
    dynamodb_write_capacity = 50
    
    prod-us-west-1.tfvars:

    region = "us-east-1"
    account_id = "0000000000"
    tags = {
        env = "prod"
    }
    dynamodb_read_capacity = 100
    dynamodb_write_capacity = 50
    
    region = "us-west-1"
    account_id = "0000000000"
    tags = {
        env = "prod"
    }
    dynamodb_read_capacity = 100
    dynamodb_write_capacity = 50
    

    我们根据环境和/或地区为服务或功能设置可能需要更改的变量。例如,在测试环境中,dynamodb的容量可能低于生产环境中的容量。

    您能否澄清tfvars文件中的预期内容?当然,答案中添加了示例