我正在AWS Elastic Beanstalk上运行一个Django Web应用程序,它需要特定的文件才能运行(实际上是一个停用词的语料库) . 由于实例来来去去,我将所需的文件夹复制到我的弹性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-*/*"
]
}
]
}
我尝试将以下命令添加到 .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
有任何想法吗?
谢谢!
1 回答
AWS Support有答案:我的
nltk_data
文件夹里面有子文件夹和文件,所以aws s3 cp
命令需要--recursive
选项 .