如何在创建实例时将文件夹从 S3 复制到弹性 beanstalk 实例
Posted
技术标签:
【中文标题】如何在创建实例时将文件夹从 S3 复制到弹性 beanstalk 实例【英文标题】:How to copy folder from S3 to elastic beanstalk instance on instance creation 【发布时间】:2017-03-26 09:31:18 【问题描述】:我正在 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-*/*"
]
]
我尝试将以下命令添加到.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
选项。
【讨论】:
以上是关于如何在创建实例时将文件夹从 S3 复制到弹性 beanstalk 实例的主要内容,如果未能解决你的问题,请参考以下文章
在弹性 beantalk 上构建战争文件时从 AWS S3 复制文件
如何在AWS中将Windows EC2实例复制到S3存储桶?
如何从 aws-sdk 中的 s3 存储桶创建 Elastic Beanstalk 实例?