【问题标题】:How organize terraform modules for common load balancer如何为常见的负载均衡器组织 terraform 模块
【发布时间】:2020-10-25 17:59:06
【问题描述】:

我有用于多个 EC2 实例的 AWS ALB。 在 Terraform 中,我有一个 alb 模块,它已经为该 EC2 实例创建了负载均衡器和侦听器、目标组。

我想将 ec2 实例附加到目标组。我在 EC2 实例模块中执行此操作,该模块从负载均衡器模块输出中获取 ALB 实例 ID。

当我在 ec2 实例模块中执行 terraform apply 命令时,terraform 想要创建新的 ALB,但它已经创建并使用了。 ec2 模块中的 Terraform 状态不了解 ALB,但希望执行此模块中的代码以获取输出

如何在不为每个新 EC2 实例重新创建 ALB 的情况下为多个 EC2 实例使用通用 ALB 来组织模块?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform aws-elb


    【解决方案1】:

    你应该这样做的方式如下:

    • 为 ALB 创建一个模块,在您希望 Ec2 实例使用的目标组 arn 中的 output.tf output
    • 为 EC2 创建一个模块,包括一个 aws_lb_target_group_attachment 资源。为目标组添加variable
    • 在您的main.tf 中,首先通过 ALB 模块创建负载均衡器,然后为您要使用的每个实例调用 EC2 模块,对于目标组参数,请参考目标组的 ALB 模块名称及其输出变量。

    一个例子main.tf,只包括相关部分

    module "my_alb_module" {
       .....
    }
    
    module "my_ec2_module" {
        target_group_arn = module.my_alb_module.target_group
    }
    

    如果您有负载均衡器和 ec2 之类的组件,作为最佳实践,如果您想支持资源之间的可重用性,请尝试将它们保存在单独的模块中。

    虽然从this GitHub repository 签出代码不是直接示例,但它说明了如何在模块之间导出值。

    【讨论】:

    • 但是我可以有单独的 alb 和 ec2 模块,它们使用它们共同的 alb 和共同的 ec2 模块。在 ec2 模块中,我将拥有 aws_lb_target_group_attachment 而无需重新创建 alb?
    • 是的,你可以这样做:)
    • 我经常看到与EC2实例一起创建目标组而不是ALB的模块,与这种方法相比,它总是感觉像是一个错误。对侦听器、规则和目标组的更改似乎总是需要时间来传播,同时 LB 服务于 502。通过成为目标群体的成员来做出改变是要走的路。
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 2021-12-07
    • 2020-05-08
    • 1970-01-01
    • 2020-08-04
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多