ECS Fargate与EFS卷更新数据



我有一个使用EFS卷的ECS服务。我还有一个Datasync任务,从S3 Bucket(源)更新EFS Filesystem(目标)上的文件

容器任务正在提供存储在EFS上的文件。

每当我运行Datasync任务并更新EFS时,容器上的数据都没有更新。为了获得最新的数据,我必须将服务上所需的任务设置为0,然后再次设置为1,以便它创建任务的新实例。

我想避免我的服务停机。有没有一种方法可以在不做我之前解释的情况下获得最新的数据?

更新:

看起来我的主要问题是容器索引文件到内存,所以重新启动(需要重新部署)。但是我仍然有一个可用性问题,我需要一种方法来自动化这个过程

经过大量的研究,我发现有一个AWS-CLI命令强制ECS服务的新部署,新任务被创建,旧任务被保留,直到最新的处于稳定状态,这消除了我的可用性问题。

命令为:

aws ecs update-service --force-new-deployment --service my-service-name --cluster my-cluster-name 

现在我需要一种方法来自动更新我的任务,每当Datasync任务被执行时,我考虑创建一个管道,让它执行来自Codebuild容器的命令。问题是CodePipeline没有Datasync Task Execution作为源阶段的触发器…

我的解决方案是创建一个带有模式的AWS EventBridge规则来检测我的任务的Datasync任务状态更改事件,然后我添加了一个目标CodeBuild项目,我在buildspec

中定义了前面所述的命令模式看起来像这样,以防有人需要它(在网上找不到任何关于它的例子)

{
"detail-type": ["DataSync Task State Change"],
"resources": ["arn:aws:datasync:us-east-1:1234567890:task/task-1234567890"],
"source": ["aws.datasync"],
"detail": {
"State": ["AVAILABLE"]
}
}
我的Datasync任务完成了它的执行,EventBridge规则将自动触发我的CodeBuild项目,因此自动更新我的ECS服务与0停机时间!

相关内容

  • 没有找到相关文章

最新更新