我有一个定义提供者的模块如下
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区域。解决此问题的唯一方法是将提供者块复制到调用模块的文件中。有没有更清洁的方法来解决这个问题?
答案 0 :(得分:2)
唯一的解决方法是将提供程序块复制到调用模块的文件中。
provider块实际上应该在调用该模块的文件中,您可以将其从模块中删除。
从文档中
为方便简单配置,子模块会自动从其父级继承默认(未别名)的提供程序配置。这意味着显式提供程序块仅出现在根模块中,而下游模块可以简单地声明该提供程序的资源,并使它们自动与根提供程序配置相关联。
https://www.terraform.io/docs/configuration/modules.html#implicit-provider-inheritance