【问题标题】:AWS ECS run latest task definitionAWS ECS 运行最新任务定义
【发布时间】:2021-01-09 17:28:44
【问题描述】:

我正在尝试运行从 GitHub 部署 (CD) 构建的最新任务定义映像。似乎在 AWS 上它创建了一个任务定义,例如“task-api:1”、“task-api:2”,我的集群是否仍在运行task-api: 1 即使有最新的任务,因为已经构建了新图像。到目前为止,我必须手动停止旧的并启动一个新的。我怎样才能让它自动化?

【问题讨论】:

  • 您是如何创建任务定义和ECS服务的?您是手动创建的还是使用 CloudFormation 或 CDK?
  • @BaluVyamajala 我通过 AWS 控制台创建了我的任务,我只是在没有服务的情况下单独运行任务定义加上通过 EC2 启动的任务定义的服务而不是针对它们两者,所以在任务中在我的 Github 上定义 JSON 文件,这两个存储库都与任务的修订相关联(这可能是个问题吗?)。

标签: amazon-web-services amazon-ec2 amazon-ecs


【解决方案1】:

您必须将任务封装在服务中,并使用滚动更新进行自动部署。

当滚动更新 (ECS) 部署类型用于您的服务时,当启动新服务部署时,Amazon ECS 服务计划程序会用新任务替换当前正在运行的任务。

阅读:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/deployment-type-ecs.html

这是 DevOps,因此您需要一个 CI/CD 管道来为您执行滚动更新。查看 CodeBuild、CodeDeploy 和 CodePipeline(以及 CodeCommit,如果您将 AWS 中的代码存储库与 CI/CD 集成)

阅读:https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html

这是一个复杂的话题,但最终会得到回报。

【讨论】:

  • 是的,我一直在使用此选项(滚动更新),但我没有通过 GitHub 设置 CI/CD,而不是通过 AWS 代码部署功能(我可能会错过您正在说我转储 Github CI/CD 以使用 AWS 部署请澄清那部分),但是存储库中新推送的图像无法使用最新图像中的最新代码更改,我不得不使用新任务手动更新服务原因有 sam 配置,但似乎在加载时会加载最新图像的新代码更改。顺便说一句,我一直在使用相同的图像 URL。
  • 当我更新服务时,我必须取消注册任务定义的旧版本。所以在我认为这可以自动完成或者有一个可以解决所有问题的配置之后,我最终手动完成了这个?这对我来说是问题的核心部分。
  • 如果你能够从 CI/CD 推送到 ECR 就足够了。
  • ECS 滚动更新的 DevOps 之旅并不止于此。您必须按照此处的说明实施外部部署(因为您没有使用 AWS 本机 CodePipeline):docs.aws.amazon.com/AmazonECS/latest/developerguide/…
【解决方案2】:

从你在cmets上说的话来看:

我通过 AWS 控制台创建了我的任务,我仅在没有服务的情况下单独运行任务定义,加上通过 EC2 启动的任务定义服务不针对它们两者,因此在我的 Github 上的任务定义 JSON 文件中它们与任务的修订相关联的存储库(这可能是个问题吗?)。

很难准确了解您是如何进行此设置的,您最好返回并使用您遵循的指南或 AWS 文档更好地了解您正在使用的服务。推送新的任务定义不会自动更新服务以使用新定义。

也就是说,我的猜测是您需要更新 ECS 中的服务以使用最新的任务定义。您可以通过多种方式做到这一点:

这可以自动化,但您需要设置一个流程来自动化它。

我建议您阅读一些指南,了解如何使用 CDK 自动部署和更新。亚马逊为您提供了一个很好的入门指南https://docs.aws.amazon.com/cdk/latest/guide/ecs_example.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 2019-09-25
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多