Amazon Elastic Beanstalk 环境中的共享文件文件夹

Amazon Elastic Beanstalk 环境中的共享文件文件夹

我正在开发一个 Drupal 应用程序,计划将其托管在 Amazon Elastic Beanstalk 环境中。基本上,Elastic Beanstalk 通过根据预定义规则启动其他 Web 服务器实例,使应用程序能够自动扩展。共享数据库在 Amazon RDS 实例上运行,所有实例都可以正常访问。问题是共享文件文件夹(站点/默认/文件)。

我们正在使用git作为 SCM,通过执行 ,我们能够部署新版本$ git aws.push。在后台,Elastic Beanstalk 会自动$ rm -rf从环境中运行的所有服务器中删除( )当前代码库,并部署新版本。

计划是在暂存环境中使用 S3 (s3fs) 来共享文件,在生产环境中使用 NFS。我们已经成功设置了环境,使得共享文件夹在重新启动后可以正确挂载。但是...

问题是,在这种设置下,在正在运行的实例上部署新版本会失败,因为$ rm -rf无法删除已挂载的目录,结果整个环境都崩溃了,我们需要重新启动环境,这不是一个优雅的解决方案。

问题 #1在这种部署中,管理共享文件的正确方法是什么?您是否正在运行这样的环境?您是如何解决这个问题的?

通过查看 Elastic Beanstalk Hostmanager 代码 (Ruby),似乎有一种方法可以将我们的功能 (如果在部署前安装则卸载,在部署后安装) 挂接到 Hostmanager (/opt/hostmanager/srv/lib/elasticbeanstalk/hostmanager/applications/phpapplication.rb),但文件中定义的脚本 (即 /tmp/php_post_deploy_app.sh) 似乎不起作用。这可能是因为我们的 Ruby 技能不存在。

问题2您是否设法以可移植的方式(即不更改核心 Hostmanager 文件)将您的功能挂接到 Hostmanager 中?

答案1

您是否考虑过使用sourcesvia.ebextensions将共享文件存储在 S3 中?

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

我曾经sources部署由我们的应用服务器构建(并存储在 S3 中)的共享文件(站点地图)。

sources: 
  "c:/inetpub/sitemaps": http://[S3 bucket]/sitemaps.zip

container_commands:
  01-copy-sitemaps-to-www:
    command: copy c:\\inetpub\\sitemaps\\*.* c:\\inetpub\\wwwroot\\ > copy_sitemaps_to_www.log 2>&1
    waitAfterCompletion: 5

答案2

从性能角度来看,S3fs 不是一个好主意,而且 S3 不是设计用于挂载的,它不是文件系统,而是对象存储。

使用 EFS 代替 ->https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/services-efs.html

您将在文档中看到 Beanstalk 中有一个针对 Drupal 的程序。

问候,

相关内容