如何在 ECS Fargate 部署的容器外进行外部 api 调用
How to make an external api call outside of a container on ECS Fargate deployment
我已经阅读了与此相关的其他问题,它们都提到了启用服务发现,但关于如何为我当前的 Fargate 部署进行设置,我的问题有点不同。
我有四个 spring 引导 api 容器通过 Gradle 构建,推送到 ECR,并使用 Terraform IaC 设置适当的资源部署在 ECS Fargate 中。其中三个容器化 api 在其中设置了环境变量以引用第四个容器,从而在容器外部对那个服务进行外部 api 调用。为这些部署设置了 DNS 和 443 负载平衡器。
我在集群中创建了一个新服务,其中包含需要发现的 api。我启用了服务发现并为 api 创建了一个本地 CloudMap A 记录,然后在其他容器中设置每个环境变量以使用该本地 A 记录 url,例如 ecsservicename.local。此外,我还尝试挖掘我在其他 api 中连接的服务以及 returns 一个 IP,因此我确信它正在运行。
我的问题如下:
(1) 因为实际上只有一个服务应该被其他服务获取,所以在那个 api 而不是其他服务上设置服务发现是否正确,或者我应该在所有服务上设置服务发现其他 apis?
(2) 即使设置了 route53 这应该是 A 记录还是 SRV?关于何时在 aws 上使用 which 的文档让我感到困惑。
(3) 是否有更好或更简单的方法用于我所缺少的容器间通信?
没错。应该只为 一个服务 设置发现。不需要其他发现,因为您没有与其他服务互连。
SRV也给端口,所以从docs:
if the task definition that your service task specifies uses the bridge or host network mode, an SRV record is the only supported DNS record type.
- 我认为您的架构经过深思熟虑,想不出任何“更简单”或更好的架构。
我已经阅读了与此相关的其他问题,它们都提到了启用服务发现,但关于如何为我当前的 Fargate 部署进行设置,我的问题有点不同。
我有四个 spring 引导 api 容器通过 Gradle 构建,推送到 ECR,并使用 Terraform IaC 设置适当的资源部署在 ECS Fargate 中。其中三个容器化 api 在其中设置了环境变量以引用第四个容器,从而在容器外部对那个服务进行外部 api 调用。为这些部署设置了 DNS 和 443 负载平衡器。
我在集群中创建了一个新服务,其中包含需要发现的 api。我启用了服务发现并为 api 创建了一个本地 CloudMap A 记录,然后在其他容器中设置每个环境变量以使用该本地 A 记录 url,例如 ecsservicename.local。此外,我还尝试挖掘我在其他 api 中连接的服务以及 returns 一个 IP,因此我确信它正在运行。
我的问题如下:
(1) 因为实际上只有一个服务应该被其他服务获取,所以在那个 api 而不是其他服务上设置服务发现是否正确,或者我应该在所有服务上设置服务发现其他 apis?
(2) 即使设置了 route53 这应该是 A 记录还是 SRV?关于何时在 aws 上使用 which 的文档让我感到困惑。
(3) 是否有更好或更简单的方法用于我所缺少的容器间通信?
没错。应该只为 一个服务 设置发现。不需要其他发现,因为您没有与其他服务互连。
SRV也给端口,所以从docs:
if the task definition that your service task specifies uses the bridge or host network mode, an SRV record is the only supported DNS record type.
- 我认为您的架构经过深思熟虑,想不出任何“更简单”或更好的架构。