Amazon web services AWS Beanstalk和未被破坏的文件

Amazon web services AWS Beanstalk和未被破坏的文件,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,我在AWS Beanstalk中创建了一个实例,并将其与git存储库一起使用 此存储库之外有两个文件config.php和.htaccess。 我可以通过ssh在实例内部使用vim创建它们,但当我上传新版本时,它们会被擦除 使用存储库之外的文件(如db连接和自定义配置)的正确方法是什么?Elastic Beanstalk(以及其他应用程序PaaS,因为它不是Elastic Beanstalk独有的)背后的思想是,应用程序运行的服务器本质上是无状态的。这意味着,如果该实例被替换,您对该实例所做的任

我在AWS Beanstalk中创建了一个实例,并将其与git存储库一起使用

此存储库之外有两个文件config.php和.htaccess。 我可以通过ssh在实例内部使用vim创建它们,但当我上传新版本时,它们会被擦除


使用存储库之外的文件(如db连接和自定义配置)的正确方法是什么?

Elastic Beanstalk(以及其他应用程序PaaS,因为它不是Elastic Beanstalk独有的)背后的思想是,应用程序运行的服务器本质上是无状态的。这意味着,如果该实例被替换,您对该实例所做的任何本地更改都将消失

使用自动缩放组时可能会出现这种情况,这会导致根据需要终止和创建实例。如果您的实例有问题并且被认为处于不良状态,也可能发生这种情况

因此,如果您SSH到一个EC2实例中,创建文件,然后推送应用程序的新版本,那么您的实例将被删除、恢复,并且文件不再存在


如果您想要持久化不在版本控制中的信息(通常是应用程序机密,如API键、凭据、特定配置等),那么一种方法是将其添加到环境变量中,您可以在这里了解到:

@Josh Davis说的“Elastic Beanstalk背后的想法”是正确的(以及其他应用程序PaaS,因为这不是Elastic Beanstalk独有的)是应用程序运行的服务器本质上是无状态的。这意味着,如果替换该实例,您对该实例所做的任何本地更改都将消失。”

用外行的话说,这意味着服务器可以在任何时候重新构建,而保存到磁盘上的任何数据都会丢失

如果您想在没有版本控制的情况下持久化上述两个文件,那么我建议使用ebextensions>>

示例:

files:
 "/home/ec2-user/myfile" :
   mode: "000755"
   owner: root
   group: root
   source: http://foo.bar/myfile

 "/home/ec2-user/myfile2" :
   mode: "000755"
   owner: root
   group: root
   content: |
     # this is my file
     # with content
第一个示例将从下载一个文件,并在此位置/home/ec2 user/myfile创建该文件及其在文件系统上的内容

第二个示例将创建一个包含指定内容的文件;在本例中,该文件将包含“this is my file”和“content”


如果您使用第二个选项,则始终通过YAML验证程序运行>>

谢谢您的回答。我可以将git和config info上的.htaccess保留为env vars。但我仍然存在问题,例如,要保存用户和管理员用户上载的文件,需要一个文件夹。再次上载时,我会丢失它。我是否应将其保存在www文件夹之外?如果您的应用程序iCity接受上传并存储它们,将它们长期存储在S3这样的分布式位置将是有益的。正如@Josh Davis所建议的,我用env.vars替换配置文件。上传到运行中的应用程序上的文件和文件夹我可以继续将它们添加到
.gitignore
文件中。这些文件在我上传时不会被删除重新加载一个新版本。