【问题标题】:Terraform modules and providersTerraform 模块和提供程序
【发布时间】:2019-06-14 14:47:13
【问题描述】:

我有一个模块,它定义了一个提供者,如下所示

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 区域。解决此问题的唯一方法是将提供程序块复制到调用模块的文件中。有没有更清洁的方法来解决这个问题?

【问题讨论】:

    标签: amazon-web-services terraform


    【解决方案1】:

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

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

    来自文档:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 2019-11-23
      • 2021-12-26
      • 2018-12-15
      • 1970-01-01
      • 2021-05-03
      • 2021-03-29
      • 2020-02-12
      • 2020-12-05
      相关资源
      最近更新 更多