通过Lambda使用CLI自动更新ECS服务

0

【以下的问题经过翻译处理】 我有一个在 ECS 上运行服务的多容器应用程序。镜像托管在 ECR 上,配置文件通过脚本在容器启动时从S3存储桶中拉取。该应用程序位于私有子网内,位于具有EIP的公共子网中的网络负载均衡器后面。

我的最终目标是在 a.) 签入新映像或 b.) 上传新的配置文件时自动更新服务。

我认为在网络负载均衡器(支持滚动更新)后面做到这一点的最佳方法是在更新时触发的 lambda 函数中使用 AWS ECS CLI。如果我没有误读文档,CLI 应该会触发滚动更新。为了测试 CLI,我尝试了:

aws ecs update-service --cluster mycluster --service myservice --force-new-deployment

但是,这并不成功。一个新任务被创建,但在部署完成之前就停止了,并显示以下日志消息:

Essential container in task exited

该服务的参数为最小 100% 和最大 200%。我还尝试将运行任务的下限设置为0%。这导致成功退出旧任务,但由于同样的错误,新任务未能部署。这让我觉得我的配置可能不正确。

问题:

1.)这里使用 lambda 函数是一个明智的选择吗?或者有更好的方法吗?

2.)如何解决滚动更新失败的问题?

如果您需要更多信息,请告诉我。非常感谢您的帮助!

最好的问候, Sebastian

profile picture
专家
已提问 5 个月前19 查看次数
1 回答
0

【以下的回答经过翻译处理】 这看起来应该是可以工作的,特别是从 S3 的配置文件角度来看,当您上传文件时,可以触发Lambda。我建议在此处查看有关创建请求以修改ECS的文档[1]。 它还包含使用AWS SDK的多种语言的参考请求。例如,这里提供了Javascript的链接[2]。

要对失败的部署进行故障排除,建议查看CloudWatch日志[3][4]。

[1]https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateService.html

[2]https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ECS.html#updateService-property

[3]https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_cloudwatch_logs.html

[4]https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-logging-monitoring.html

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则