amazon-web-services - 使用 Application Load Balancer 在 aws ECS 上发现服务

标签 amazon-web-services microservices

请问您是否有一个微服务架构(基于Spring Boot),涉及Amazon Elastic Container Service(ECS)和Application Load Balancer(ALB),服务发现由平台自动执行,还是需要特殊机制(例如 Eureka 或 Consul)?

从文档(ECS 和 ALB)中不清楚您是否提供了此功能。

最佳答案

我已经与亚马逊支持团队讨论过这个问题,他们的回应如下:
“...在 AWS ECS[...] 上使用服务发现,仅与 ALB 一起使用。

所以,这里可能有三个选择:
1) 使用 ALB/ELB 作为服务端点(ALB 的目标组,如果使用 ELB,则单独的 ELB)

2)使用Route53和DNS进行服务发现

3) 将 Consul.io 等 3rd Party 产品与 Nginx 结合使用。

让我谈谈这些选项中的每一个。

使用 ALB/ELB

对于此选项,想法是在每个服务之前使用 ELB 或 ALB 目标组。
我们定义了一个 Amazon CloudWatch Events 过滤器,它监听来自 AWS CloudTrail 的所有 ECS 服务创建消息并触发 Amazon Lambda 函数。
此函数识别新服务使用的 Elastic Load Balancing 负载均衡器(或 ALB 目标组),并使用 Amazon Route 53 插入指向它的 DNS 资源记录 (CNAME)。
Lambda 函数还处理服务删除,以确保 DNS 记录反射(reflect)集群中运行的应用程序的当前状态。

这里的缺点是,如果您使用 ELB,可能会产生更高的成本 - 因为您需要为每个服务配备一个 ELB。它可能不是最简单的解决方案。
如果您想阅读更多相关信息,可以在此处进行[1]

使用 Route53

这种方法涉及使用 Route53 并在您的 ECS 容器实例上运行一个简单的代理 [2]。
当您的容器停止/启动时,代理将更新 Route53 DNS 记录。它创建一个 SRV 记录。同样,一旦容器停止,它将删除所述记录。

此方法的另一部分是 Lambda 函数,它对 ECS 容器实例执行运行状况检查 - 并在出现故障时将它们从 R53 中删除。

您可以在我们的博客文章中阅读有关此方法的更多信息 [3]。

使用像 Consul.io 这样的 3rd 方工具在 ECS 上使用像 Consul.io 这样的工具可以工作 - 但 AWS 不支持。所以您可以自由使用它,但不幸的是,我们不提供对它的支持。

因此,总而言之 - 有几种在 AWS ECS 上实现服务发现的方法 - 我在这里展示的两种使用 AWS 资源的方式,当然还有使用 3rd 方应用程序的方式。

关于amazon-web-services - 使用 Application Load Balancer 在 aws ECS 上发现服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807757/

相关文章:

python - 如何在具有共享模型和数据库的同一项目中拆分 Django 应用程序的部署?

database - 为微服务横向扩展/水平扩展数据库的最佳实践或设计

c# - ConnectionString 在部署到 AWS Elastic Beanstalk 时转换

amazon-web-services - 云信息 : API: s3:CreateBucket Access Denied

asp.net-core - 身份 aspnet 核心微服务

java - Juul 是我应用程序的唯一入口点是劣势吗?

c - 在 PCF-DEV 中将 native C/C++ 二进制文件部署为独立微服务

amazon-web-services - 从 s3a 读取文件以及 AWS Athena SDK (1.11+)

amazon-web-services - 无服务器框架部署存在外部依赖问题

amazon-web-services - 如何使用 chalice 和 lamda 安排 ec2 实例停止