AWS EC2-与S3同步源代码文件 - 这是一种正确的方法吗?

时间:2010-01-08 17:10:21

标签: amazon-s3 amazon-ec2

在经常更改少量源文件的应用服务器上,建议采用以下方法吗?

使用带有S3tools的cron作业将源文件与S3私有桶同步(例如每隔15分钟)。

在服务器启动时 - 使用用户数据脚本与源存储桶同步以检索最新的源。

优点: 1.无需为应用服务器附加EBS只是为了保存一些文件 2.对所有应用服务器的类似设置 3.源自动备份。 4.作为副产品,自动将代码分发到多个应用服务器。

缺点: 在S3上保留源代码 其他

您如何看待这种方法?这是在源代码频繁更改(每天几次)时使用EC2的正确方法,请推荐运行EC2实例的最佳方法,其中源代码经常更改。

2 个答案:

答案 0 :(得分:4)

我认为你最好使用适当的源代码存储库,比如Subversion或Git,而不是将源文件存储在S3上。这样,您可以拥有源文件的中心位置,同时避免kdgregory提到的更新一致性问题。

您可以将源存储库放在EC2之外的您自己的服务器上,或者将其托管在EC2实例上(在后一种情况下确保存储库文件位于EBS卷上)。

答案 1 :(得分:2)

如果您要运行大量EC2实例,那么让它们从中央位置同步(即,您同步到专用存储桶,app-servers从该存储桶同步)将会更省力

但是,要认识到S3存储桶的更新仅在对象级别是原子的,更重要的是,不能保证立即保持一致(尽管我记得最近看到us-west端点确实提供了read-after - 写一致性)。

这意味着您的应用服务器可能会加载一组内部不一致的新文件 - 有些会旧,有些会是新的。如果这对您来说是个问题,那么您应该实现一个直接上传到app-servers的方案,并确保变更集的一致性(可能通过上传到随后重命名的临时目录)。