AWS Elastic Beanstalk:通过缓存

时间:2015-11-26 18:18:37

标签: caching amazon-web-services deployment amazon-s3 elastic-beanstalk

我们的项目包含应用程序在Elastic Beanstalk部署过程中从Amazon S3下载的Multi-Gb静态文件(使用.ebextensions / * .config文件),因此将新服务器实例部署到群集和/或应用程序版本更新花了很长时间,所以我们甚至需要认真增加部署超时。

这些文件位于应用程序目录内,并且当EB在应用程序版本更新时重建主应用程序目录时,部署过程会在每次应用程序更新时将所有静态文件从S3再次重新下载到新创建的目录,从而增加部署时间并生成不必要的内容交通费用。

想法是通过在app dir之外保存静态文件的缓存副本来防止这种重新下载,并在部署时将其与s3同步(如果在S3上更改或删除了任何静态文件):

aws s3 sync s3://bucket/staicfiles path/to/local/cached/staticfiles --delete

然后只需将文件从此缓存目录移动/复制到新部署的目录。

  1. 是否还有其他想法/最佳做法可以防止在更新时重新下载静态文件?
  2. 是否有任何Amazon Linux推荐的目录用于不受系统或部署过程影响的用户缓存文件?

2 个答案:

答案 0 :(得分:0)

您可以使用EBExtensions在部署期间执行任意命令。我会做的是在那里使用命令将S3同步运行到未附加到应用程序部署路径的文件夹,如您所建议的那样。

您可以将这些命令放在' .ebextensions'应用程序根目录下的目录 - EB将在部署期间读取该内容,并执行任何' * .config'找到的文件。

至于其他方法 - 我不确定您的应用程序结构/组织/等,但这些资产(图像,js,css等)是否可以直接从S3存储桶提供?然后你可以完全抵消服务器的负载。

答案 1 :(得分:0)

名为Elastic File System的新AWS服务解决了这个问题。它允许将单个虚拟磁盘驱动器安装到多个实例并访问文件。像魅力一样。

您可以在此处找到有关弹性文件系统(AWS EFS)如何工作的更多信息:

http://docs.aws.amazon.com/efs/latest/ug/how-it-works.html