通过Cloudformation-Update堆栈修改EC2上的文件

时间:2018-04-26 19:52:19

标签: amazon-web-services amazon-s3 amazon-ec2 amazon-cloudformation

我使用了Cloudformation模板来创建我的EC2实例。在这种情况下,有一个文件 在创建堆栈时从S3复制的主目录中。

我也在本地存储该文件。现在,我在本地修改该文件,并希望将其复制到S3 从S3到EC2实例。

我想通过Cloudformation自动执行此过程。这样,每当我在本地修改这个文件时, 在执行更新堆栈之后,它将修改后的文件上传到S3并从S3上传到我的EC2实例。 任何人都可以帮助如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

我想到的一件事(考虑到您尝试做的应用特定性质)是使用ECS而不仅仅是EC2。

注意:这可能有点矫枉过正,但它会起作用。此外,如果更新非常频繁,这将是一个主要的痛苦,所以只需将文件上传到S3,脚本与更新堆栈一起(如果甚至需要更新堆栈),然后轮询EC2应用程序中对该S3文件的更改没事。

无论如何,这是我们在使用新数据训练模型时所使用的模式,然后我们希望将其部署到AWS,用旧版本的模型替换应用程序。

您在本地构建Docker镜像,并且您的特殊文件包含在容器中。您将Docker镜像推送到DockerHub或AWS ECS Registry或任何地方。您更新了云信息模板ECS配置以使用此新Docker镜像的标记并更新堆栈。然后ECS拉出这个新图像,新的Docker容器代替旧的容器,它将包含你的特殊文件。

答案 1 :(得分:0)

我至少知道一种方法:在AutoScaling Group(ASG)中设置EC2。然后,在创建时,在您的UserData上使用cfn-init并让它在源下获取文件。同时使用创建和更新策略。在更新时,在AutoScalingReplacingUpdate下将WillReplace属性设置为true。更新时,CloudFormation将使用新的新文件副本创建新的ASG。如果您在更新时发出成功信号,它将删除以前的实例和ASG,为您提供不可变的基础架构设置。把所有东西放在负载均衡器后面,你也可以获得高度可用的蓝/绿部署。