Terraform模块和提供程序

时间:2019-06-14 06:33:38

标签: amazon-web-services terraform

我有一个定义提供者的模块如下

provider "aws" {
    region                  = "${var.region}"
    shared_credentials_file = "${module.global_variables.shared_credentials_file}"
    profile                 = "${var.profile}"
}

和以下EC实例

resource "aws_instance" "node" {
    ami = "${lookup(var.ami, var.region)}"
    key_name   = "ib-us-east-2-production"
    instance_type = "${var.instance_type}"
    count = "${var.count}"
    security_groups = "${var.security_groups}"
    tags {
        Name = "${var.name}"
    }
    root_block_device {
        volume_size = 100
    }

在调用该模块的terraform脚本中,我现在想创建一个ELB并将其附加到实例上,并沿

resource "aws_elb" "node_elb" {
    name               = "${var.name}-elb"
    .........

但是,terraform不断提示我输入模块中已定义的aws区域。解决此问题的唯一方法是将提供者块复制到调用模块的文件中。有没有更清洁的方法来解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

唯一的解决方法是将提供程序块复制到调用模块的文件中。

provider块实际上应该在调用该模块的文件中,您可以将其从模块中删除。

从文档中

  

为方便简单配置,子模块会自动从其父级继承默认(未别名)的提供程序配置。这意味着显式提供程序块仅出现在根模块中,而下游模块可以简单地声明该提供程序的资源,并使它们自动与根提供程序配置相关联。

https://www.terraform.io/docs/configuration/modules.html#implicit-provider-inheritance