Amazon web services 如何组织通用负载平衡器的terraform模块

Amazon web services 如何组织通用负载平衡器的terraform模块,amazon-web-services,amazon-ec2,terraform,aws-elb,Amazon Web Services,Amazon Ec2,Terraform,Aws Elb,我有用于多个EC2实例的AWS ALB。 在Terraform中,我有一个alb模块,它已经为EC2实例创建了负载平衡器和侦听器,即目标组 我想将ec2实例附加到目标组。我在EC2实例模块中这样做,它从负载平衡器模块输出中获取ALB instance id 当我在ec2实例模块中执行terraform apply命令时,terraform想要创建新的ALB,但它已经创建并正在使用。ec2模块中的地形状态不知道ALB,但希望执行来自该模块的代码以获得输出 如何在不为每个新EC2实例重新创建ALB的

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

我想将ec2实例附加到目标组。我在EC2实例模块中这样做,它从负载平衡器模块输出中获取ALB instance id

当我在ec2实例模块中执行terraform apply命令时,terraform想要创建新的ALB,但它已经创建并正在使用。ec2模块中的地形状态不知道ALB,但希望执行来自该模块的代码以获得输出


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

执行此操作的方式如下:

  • 在您的
    output.tf
    中为您希望Ec2实例使用的目标组arn创建ALB模块
  • 为EC2创建一个模块,包括一个资源。为目标组添加一个
  • 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之类的组件,作为最佳实践点,如果您希望支持资源之间的可重用性,请尝试将它们保留在单独的模块中


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

但我可以拥有单独的alb和ec2模块,它们使用公共alb和公共ec2模块。在ec2模块中,我将有aws_lb_target_group_附件,而无需重新创建alb?是的,您可以这样做:)