【发布时间】:2019-07-20 18:47:19
【问题描述】:
我编写了一个 python 文件,它生成了我想用作 Alexa 技能的一部分的特定句子。然后生成这些句子的数组。我现在正在尝试创建一个 lambda 函数,它以基于 Alexa 的游戏格式实现这些句子。但是,python 文件包含许多不是 lambda 原生的导入,因此无法使用。
经过大量阅读,我尝试使用以下代码(以一个库为例)安装导入包/依赖项:
pip3 安装 spacy -t .
然后我使用以下代码压缩文件夹的内容,然后将 zip 文件上传到 Amazon s3 存储桶:
zip -r ../zipped_dir.zip *
这最初是可行的,但是一旦我开始安装许多导入文件,zip 文件很快就超过了 100mb,因此我需要使用“AWS CLI、AWS SDK 或 Amazon S3 REST API”上传 zip 文件。我已经尝试了几种方法,并且 zip 文件成功上传,但是当我尝试使用“代码输入类型”将它集成到我的 lambda 函数中时:“从 Amazon s3 上传文件”并提供正确的 URL,功能不允许我保存它。我单击保存并尝试这样做,但仍为橙色。我相信这是因为文件太大。我确信上传方法是正确的,因为我使用小于 100mb 的 zip 文件重新测试了该过程,并使用关联的 URL 上传到 lambda 函数,并成功保存。
为了上传大文件,我尝试了以下方法。在这个例子中我使用了flask和boto3的组合。
import boto3
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
return '''<form method=POST enctype=multipart/form-data ` action="upload">
<input type=file name=myfile>
<input type=submit>
</form'''
@app.route('/upload',methods=['POST'])
def upload():
s3 = boto3.resource('s3')
s3.Bucket('bucket').put_object(Key='file.zip',Body=request.files['myfile'])
`返回'
文件保存到 S3
'if __name__ == '__main__':
app.run(debug=True)
这个方法也成功将文件上传到bucket,但是我无法用lambda函数和url保存。
我也试过从终端用这个命令来做,也成功上传到bucket但不能保存在lambda函数上:
aws s3 cp /foldername s3://bucketname/ --recursive --include ` "myzip.zip"
我确信手动安装相关导入的所有文件并不是最佳方法,因此任何建议的其他方法都会有所帮助。如果还有一种方法可以在其他地方运行 python 文件,并将字符串数组传递给可以在 Alexa 设备上运行的 lambda 函数,那么该方法也会有所帮助。我已经坚持了将近一个星期,我相信解决方案相当简单,所以非常感谢任何帮助。谢谢。
【问题讨论】:
标签: python amazon-s3 aws-lambda alexa-skill