首页 > 解决方案 > AWS Beanstalk - 在部署时,从 S3 存储桶复制带有 env 变量的文件?

问题描述

当我部署新版本时,我试图将文件从 S3 存储桶复制到 Beanstalk 上的 NodeJS 应用程序。

到目前为止我所做的:

  1. 创建了一个 S3 存储桶并上传了文件。
  2. 创建了允许 Beanstalk 实例 (aws-beanstalk-ec2-role) 读取存储桶文件的 IAM 策略。
  3. 设置存储桶策略以允许 aws-beanstalk-ec2-role 访问文件。
  4. 在 .ebextensions/app.config 的我的应用程序中创建了一个配置文件:
  Resources:
    AWSEBAutoScalingGroup:
        Metadata:
            AWS::CloudFormation::Authentication:
                S3Auth:
                    type: "s3"
                    buckets: ["bucket-name"]
                    roleName: aws-elasticbeanstalk-ec2-role

  files:
    "/tmp/deployment/application/file_needed.json" :
      mode: "000644"
      owner: root
      group: root
      authentication: "S3Auth"
      source: https://[bucket-name].s3.[region].amazonaws.com/origin_file.json

应用程序部署没有错误,但文件 file_needed.json 没有被复制?

更新:尝试不同的文件夹目标 (/tmp) 后,我发现文件已被复制。我所知道的是,Beanstalk 首先将文件提取到/tmp/deployment/application/,然后将它们移动到/var/app/current。如何将文件复制到应用程序的根目录?

标签: node.jsamazon-web-servicesamazon-s3amazon-elastic-beanstalk

解决方案


原因可能是区分大小写的问题。在 AWS::CloudFormation::Authentication 中,类型设置为“s3”而不是“S3”。

还可以尝试从存储桶 URL 中删除“区域”:

source: https://bucket-name.s3.amazonaws.com/origin_file.json

推荐阅读