使用 Elastic Beanstalk 时将文件从 S3 复制到我的代码库中

Posted

技术标签:

【中文标题】使用 Elastic Beanstalk 时将文件从 S3 复制到我的代码库中【英文标题】:Copying a file from S3 into my codebase when using Elastic Beanstalk 【发布时间】:2020-07-26 09:43:18 【问题描述】:

我有以下脚本:

Parameters:
  bucket:
    Type: CommaDelimitedList
    Description: "Name of the Amazon S3 bucket that contains your file"
    Default: "my-bucket"
  fileuri:
    Type: String
    Description: "Path to the file in S3"
    Default: "https://my-bucket.s3.eu-west-2.amazonaws.com/oauth-private.key"
  authrole:
    Type: String
    Description: "Role with permissions to download the file from Amazon S3"
    Default: "aws-elasticbeanstalk-ec2-role"

files:
  /var/app/current/storage/oauth-private.key:
    mode: "000600"
    owner: webapp
    group: webapp
    source:  "Ref" : "fileuri" 
    authentication: S3AccessCred

Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Metadata:
      AWS::CloudFormation::Authentication:
        S3AccessCred:
          type: "S3"
          roleName:  "Ref" : "authrole" 
          buckets:  "Ref" : "bucket" 

我遇到的问题是,在部署它时,/var/app/current/storage 目录中不存在该文件。

我认为这个脚本可能运行得太快了,current 目录还没有准备好,所以我尝试了ondeck 目录,这也不起作用。

如果我将路径更改为我的代码库目录以外的任何其他位置,则该文件将从 S3 复制。

有什么想法吗?谢谢。

【问题讨论】:

【参考方案1】:

“文件”键下的指令在您的网络应用程序设置之前被处理。您需要将文件下载到 tmp 文件,然后使用 container_command 将其传输到当前目录中的应用程序。

AWS doc 在顶部附近提到了处理密钥的顺序。 files 密钥在 commands 之前处理,commands 在应用程序和 Web 服务器设置之前运行。但是,container_commands 部分指出它们用于“执行影响应用程序源代码的命令”。

所以你应该把你的脚本修改成这样:

Parameters: ...
Resources: ...

files:
  "/tmp/oauth-private.key":
    mode: "000600"
    owner: webapp
    group: webapp
    source:  "Ref" : "fileuri" 
    authentication: S3AccessCred

container_commands:
  file_transfer_1:
    command: "mkdir -p storage"
  file_transfer_2:
    command: "mv /tmp/oauth-private.key storage"

【讨论】:

这是完美的。成功了。我很确定您需要成为机器人才能理解和浏览 AWS 文档。这么多自相矛盾的文章。虽然,只是一项修正案。 file_transfer_3 不是必需的,因为 mv 已经将其删除。 啊,是的,我会解决的。我想我是从我出于某种原因使用cp 的示例中复制的。很高兴这有帮助! 看准了!再次感谢!

以上是关于使用 Elastic Beanstalk 时将文件从 S3 复制到我的代码库中的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 防止文件覆盖

AWS Elastic Beanstalk - .ebextensions

如何创建 Elastic Beanstalk 配置文件?

VCS 上的 Elastic Beanstalk .config 文件?

如何使用 Elastic Beanstalk 配置 aws cli 配置文件?

将文件从 Elastic beanstalk 复制到本地机器