aws 如何从生产环境中的 lambda 函数访问 ECS 服务

Posted

技术标签:

【中文标题】aws 如何从生产环境中的 lambda 函数访问 ECS 服务【英文标题】:aws how to access an ECS service from a lambda function in production env 【发布时间】:2021-01-27 17:46:33 【问题描述】:

我创建了一个运行任务定义的 ecs 服务,该任务定义创建了一个运行烧瓶应用程序的 docker 容器。烧瓶应用通过 http 请求获取图像并返回 ML 模型推理。

由于我希望此服务在生产环境中运行,我创建了一个内部网络负载均衡器,并将其附加到一个 vpc 端点服务。 nlb 正在将请求转发到注册所有 ECS 集群实例的目标组。

我有一个 API 网关,它与配置在同一 vpc 内的 lambda 函数集成,并且我需要从 lambda 访问 ecs 服务(通过 nlb 或 vpc 端点)

*** 但是,由于无法访问端点,我不断收到 python 请求的“超出最大重试次数”。也不是 nlb,也不是 vpc 端点服务。

请帮助我了解问题所在,或建议在生产环境中处理这些请求的其他基础架构。

** docker 容器有效并直接使用 postman 响应,但我需要 postman 发送到 API 网关并从 lambda 获取编辑后的响应。

附上我的一些配置。如果您认为需要更多配置,请告诉我。 谢谢:)

Lambda connection error to endpoint

VPC endpoint service configuration

NLB configurtion and integration

Lambda vpc configuration

【问题讨论】:

端点是否可以正常工作?我想确认问题仅与 lambda 函数有关?如果您使用 EC2 实例,端点是否工作? 是的,我可以直接与实例通信,但无法通过 vpc/nlb 使其工作 我会后退一步,只专注于 NLB 和端点服务。不要使用 lambda 或 api 网关。只是 EC2 实例,您可以登录并尝试从那里卷曲端点。一旦你让它工作,然后转到如何使它与 lambda 一起工作。 还要检查 HTTPS。从屏幕截图看来,您似乎只使用 HTTP。我认为端点服务在 HTTPS 的端口 443 上运行。所以安全组也需要做相应的修改。 之前检查过 HTTP 和 HTTPS。不工作。我做了 ssh 到 ec2 实例,并且卷曲 nlb 生成了一个有效的响应。我只是无法让 lambda 到达它,尽管它在 VPC 中配置并具有 vpcExecution 角色。 【参考方案1】:

您的其余配置似乎没问题,并通过访问 EC2 内的服务进行验证。

我只能指出一个难题,即在将您的 Lambda 函数附加到 VPC 时,仅使用 private subnets。目前,我不确定附加到您的 Lambda 函数的子网是私有的还是公有的。

【讨论】:

以上是关于aws 如何从生产环境中的 lambda 函数访问 ECS 服务的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 AWS 中的开发和生产环境? [关闭]

如何访问 AWS Lambda 中的标头?

从 VPC 中的 Lambda 访问 AWS S3

如何从账户 A 中的 Lambda(VPC 中的 Lambda)调用账户 B 中的 AWS Lambda 函数(VPC 中的这个 Lambda)

从 Lambda 函数内部访问 AWS CloudFormation ARN

如何在自定义授权方 AWS lambda 函数中访问 http 标头