Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何最好地使用CodeDeploy将代码更改部署到ECS?_Amazon Web Services_Amazon Ecs_Aws Code Deploy_Aws Fargate - Fatal编程技术网

Amazon web services 如何最好地使用CodeDeploy将代码更改部署到ECS?

Amazon web services 如何最好地使用CodeDeploy将代码更改部署到ECS?,amazon-web-services,amazon-ecs,aws-code-deploy,aws-fargate,Amazon Web Services,Amazon Ecs,Aws Code Deploy,Aws Fargate,我们将运行简单Sinatra API的Docker映像部署到ECS Fargate服务。现在,我们的任务定义使用:production标记定义图像。我们希望使用CodeDeploy进行蓝色/绿色部署 当代码更改时-我们是否应该使用:production标签推送一个新映像并强制在我们的服务上进行新部署,或者在我们的任务定义中使用特定的标签(例如:97b9d390d869874c35c325632af0fc1c08e013cd)并创建一个新的任务修订版,然后更新我们的服务以使用这个新的任务修订版 我

我们将运行简单Sinatra API的Docker映像部署到ECS Fargate服务。现在,我们的任务定义使用
:production
标记定义图像。我们希望使用CodeDeploy进行蓝色/绿色部署

当代码更改时-我们是否应该使用
:production
标签推送一个新映像并强制在我们的服务上进行新部署,或者在我们的任务定义中使用特定的标签(例如
:97b9d390d869874c35c325632af0fc1c08e013cd
)并创建一个新的任务修订版,然后更新我们的服务以使用这个新的任务修订版

我们对第二种方法的担忧是,我们没有看到任何关于任务修订的生命周期规则,所以它们会一直累积到我们有几万/几十万次吗

如果我们使用第一种方法,CodeDeploy是否能够在出现问题的情况下回滚失败的部署?

简短回答 在这两种情况下,如果您的新映像以某种方式崩溃,但您当前的旧任务仍应处于活动状态,则没有定义回滚。但是,如果您正在使用运行状况检查,并且当前正在运行的任务低于所需的数量(可能是由于用户流量溢出等原因),Fargate将启动包含坏映像的最新任务定义修订版的新任务

长话短说 因为您只是要求CodeDeploy基于您的映像启动任务,所以它将创建一个新的任务定义,该任务定义具有您的映像的URI以提取正确的映像。新的任务定义将始终用于启动新的Fargate任务

因此,当Fargate发现需要创建任务时,它总是尝试使用最新版本,而最新版本总是图像不好的版本

好的方面是,如果旧映像任务工作正常,它应该仍然处于活动状态,因为最小运行任务为1,而另一个任务持续失败,因此旧映像任务不会退役

不过,您可以通过添加CloudWatch事件来触发lambda来克服这一问题,lambda可以使用良好的图像标记更新新任务修订版,也可以使用以前的任务定义修订版运行当前Fargate。以下是AWS的一篇文章:

关于Fargate部署是如何工作的,并帮助您的旧任务在新部署失败时运行,它将首先提供新任务,当所有新任务运行良好时,它将解除旧任务的运行。因此,如果新任务不能正常运行,旧任务应该仍然处于活动状态。

简短回答 在这两种情况下,如果您的新映像以某种方式崩溃,但您当前的旧任务仍应处于活动状态,则没有定义回滚。但是,如果您正在使用运行状况检查,并且当前正在运行的任务低于所需的数量(可能是由于用户流量溢出等原因),Fargate将启动包含坏映像的最新任务定义修订版的新任务

长话短说 因为您只是要求CodeDeploy基于您的映像启动任务,所以它将创建一个新的任务定义,该任务定义具有您的映像的URI以提取正确的映像。新的任务定义将始终用于启动新的Fargate任务

因此,当Fargate发现需要创建任务时,它总是尝试使用最新版本,而最新版本总是图像不好的版本

好的方面是,如果旧映像任务工作正常,它应该仍然处于活动状态,因为最小运行任务为1,而另一个任务持续失败,因此旧映像任务不会退役

不过,您可以通过添加CloudWatch事件来触发lambda来克服这一问题,lambda可以使用良好的图像标记更新新任务修订版,也可以使用以前的任务定义修订版运行当前Fargate。以下是AWS的一篇文章:

关于Fargate部署是如何工作的,并帮助您的旧任务在新部署失败时运行,它将首先提供新任务,当所有新任务运行良好时,它将解除旧任务的运行。因此,如果新任务不能正常运行,旧任务应该仍然处于活动状态