如何在实例创建时将文件夹从S3复制到弹性beanstalk实例

kil*_*out 6 amazon-s3 amazon-ec2 amazon-web-services amazon-elastic-beanstalk

我在AWS Elastic Beanstalk上运行一个Django Web应用程序,需要运行它的特定文件(实际上是一个nltk停用词语料库).由于实例来来去去,我将所需的文件夹复制到我的弹性beanstalk创建的S3存储桶中,并计划使用awscli弹性beanstalk配置文件添加复制命令.但我无法让它发挥作用.

我的beanstalk启动的实例应具有对S3存储桶的读访问权限,因为这是由beanstalk自动创建的存储桶.所以beanstalk还创建了一个IAM角色aws-elasticbeanstalk-ec2-role,它是一个附加到它启动的每个实例的实例配置文件.此角色包括AWSElasticBeanstalkWebTier似乎同时授予对S3存储桶的读写访问权限的策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "BucketAccess",
      "Action": [
        "s3:Get*",
        "s3:List*",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::elasticbeanstalk-*",
        "arn:aws:s3:::elasticbeanstalk-*/*"
      ]
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)

我尝试将以下命令添加到.ebextensions/my_app.config:

commands: 
  01_copy_nltk_data:
    command: aws s3 cp s3://<my_bucket>/nltk_data /usr/local/share/
Run Code Online (Sandbox Code Playgroud)

但是当我尝试部署时出现以下错误,即使我可以在S3控制台中看到该文件夹

Command failed on instance. Return code: 1 Output: An error occurred (404) when calling the HeadObject operation: Key "nltk_data" does not exist
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢!

kil*_*out 5

AWS Support有答案:我的nltk_data文件夹里面有子文件夹和文件,所以aws s3 cp命令需要--recursive选项.