如何为通用负载均衡器组织 Terraform 模块
How organize terraform modules for common load balancer
我有用于多个 EC2 实例的 AWS ALB。
在 Terraform 中,我有 alb 模块,它已经为该 EC2 实例创建了负载均衡器和侦听器、目标组。
我想将 ec2 实例附加到目标组。我在 EC2 实例模块中执行此操作,该模块从负载均衡器模块输出中获取 ALB 实例 ID。
当我在 ec2 实例模块中执行 terraform apply 命令时,terraform 想要创建新的 ALB,但它已经创建并正在使用。 ec2 模块中的 Terraform 状态不知道 ALB 但想执行此模块中的代码以获取输出
如何使用公共 ALB 为多个 EC2 实例组织模块,而无需为每个新的 EC2 实例重新创建 ALB?
执行此操作的方法如下:
- 为 ALB 创建一个模块,在您的
output.tf
output 您希望 Ec2 实例使用的目标组中
- 为 EC2 创建一个模块,为目标组包含一个 aws_lb_target_group_attachment resource. Add a 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 中的代码,它说明了如何在模块之间导出值。
我有用于多个 EC2 实例的 AWS ALB。 在 Terraform 中,我有 alb 模块,它已经为该 EC2 实例创建了负载均衡器和侦听器、目标组。
我想将 ec2 实例附加到目标组。我在 EC2 实例模块中执行此操作,该模块从负载均衡器模块输出中获取 ALB 实例 ID。
当我在 ec2 实例模块中执行 terraform apply 命令时,terraform 想要创建新的 ALB,但它已经创建并正在使用。 ec2 模块中的 Terraform 状态不知道 ALB 但想执行此模块中的代码以获取输出
如何使用公共 ALB 为多个 EC2 实例组织模块,而无需为每个新的 EC2 实例重新创建 ALB?
执行此操作的方法如下:
- 为 ALB 创建一个模块,在您的
output.tf
output 您希望 Ec2 实例使用的目标组中 - 为 EC2 创建一个模块,为目标组包含一个 aws_lb_target_group_attachment resource. Add a 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 中的代码,它说明了如何在模块之间导出值。