AWS:在Terraform中向弹性beantalk添加第二个内部负载平衡器

时间:2019-06-03 12:45:43

标签: amazon-web-services terraform amazon-elastic-beanstalk terraform-provider-aws

是否可以在Terraform中添加额外的(内部)负载平衡器来操纵beantalk的自动缩放组和目标组?如果是,怎么办?

我想有2个负载均衡器,一个是内部负载均衡器,另一个是公共负载均衡器。 我从AWS找到了这种解决方法:

https://aws.amazon.com/it/blogs/networking-and-content-delivery/using-static-ip-addresses-for-application-load-balancers/

还有其他更智能的解决方案吗?

3 个答案:

答案 0 :(得分:2)

我认为可以完美实现,但是您需要对方法进行一些小的更改。

您将在EB内部没有2个负载均衡器,但是,您的beantalk将描述从第二个负载均衡器开始的基础架构,并将其设置为内部负载,然后您将添加另一个指向BE负载的公共负载均衡器。平衡器。

与AWS博客中提出的方法相比,我们可以通过一种更简单的方法来实现这一目标。

为此,您的BE设置将与您的设置几乎相同,但是:

  • 将负载均衡器设置为网络类型。这是唯一一种允许您在负载均衡器中拥有静态IP的类型。
  • 将负载均衡器设置为内部(在beantalk的网络配置内部,将可见性设置为内部,然后取消选中“将公共IP地址分配给EC2实例...”
  • 在不同的可用区域中至少为2个弹性IP分配给您的负载均衡器。
  • 其余的Beanstalk保持不变。

现在创建一个公共负载均衡器:

  • 这可以是您需要的任何类型。如果您想执行SSL终止或任何其他第7层魔术,则可能是ALB。另外,它必须是公开的
  • 创建一个新的目标组。该组的目标类型应为IP。
  • 在上方注册网络负载均衡器的2个弹性IP。
  • 在指向该目标组的ALB中添加一个侦听器

这将起到神奇作用。您将需要检查如何在terraform中执行此操作,但是该方法非常简单,因此我相信terraform可以让您执行此操作。


与AWS博客(旨在用于完全不同的目的)相比,此方法的优势在于,这里的内部负载均衡器是网络,而不需要外部负载均衡器。由于NLB是内部的,您可以避免基础结构中的大量开销,也可以避免动态逻辑(例如他们建议注册IP地址的lambda)。 通过这种方法,您将获得更具声明性的体系结构,更易于在地形中进行描述,并且更易于在生产中进行维护。

答案 1 :(得分:0)

您只能将一个目标组与一个负载均衡器关联。将目标组与负载均衡器关联后,该目标组将不再可用于与另一个ALB关联。

您可能会想出一种解决方法,使用端口和安全组规则之类的不同方法,或者创建第二个目标组。

Elastic beanstalk的设计目的并非如此。对于开发人员来说,这只是推销代码并脱离基础架构的一种简单方法。当复杂性级别增加时,它就有时间离开EB。

答案 2 :(得分:0)

您可以根据自己的选项设置从EB扩展其TargetGroupARNs

使用cloudformation语法

  - Namespace: aws:cloudformation:template:resource:property
    ResourceName: AWSEBAutoScalingGroup
    OptionName: TargetGroupARNs
    Value: [{\"Ref\":\"AWSEBV2LoadBalancerTargetGroup\"},"ARN_FROM_A_EXTERNAL_TARGETGROUP_LINKING_TO_ANOTHER_LOADBALANCER"}]

是的,我刚刚找到了对 aws:cloudformation:template:resource:property here的引用,根本没有文档