我正在AWS Elastic Beanstalk上运行Django Web应用程序,该应用程序需要特定的可用文件才能运行(实际上是停用词的nltk语料库)。由于实例来来去去,我将所需的文件夹复制到了由我的Elastic beantalk创建的S3存储桶,并计划使用awscli向我的Elastic beantalk配置文件添加复制命令。但是我无法正常工作。

我的beantalk启动的实例应具有对S3存储桶的读取访问权限,因为这是beantalk自动创建的存储桶。因此,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-*/*"
      ]
    }
  ]
}

我尝试将以下命令添加到.ebextensions/my_app.config:
commands:
  01_copy_nltk_data:
    command: aws s3 cp s3://<my_bucket>/nltk_data /usr/local/share/

但是,即使我可以在S3控制台中看到该文件夹​​,当我尝试进行部署时也会收到以下错误
Command failed on instance. Return code: 1 Output: An error occurred (404) when calling the HeadObject operation: Key "nltk_data" does not exist

有任何想法吗?

谢谢!

最佳答案

AWS支持人员提供了答案:我的nltk_data文件夹中包含子文件夹和文件,因此aws s3 cp命令需要--recursive选项。

07-24 09:38
查看更多