任何人对此错误有任何想法。我正在使用AWS Translation,boto3和Zappa,并制作了一个脚本来转换在本地可以正常工作的语言,并将此错误抛出到AWS lambda。我真的不知道为什么吗?有人遇到过这个错误吗?
这是我的代码:
from flask import Flask, jsonify, Blueprint, request, current_app
import os
import boto3
app = Flask(__name__)
translate = boto3.client(service_name='translate')
s3 = boto3.resource('s3')
s3_data = boto3.client('s3')
def check_file(file_name):
s3 = boto3.resource('s3')
my_bucket = s3.Bucket('output-file1')
for s3_filename in my_bucket.objects.all():
if s3_filename.key == file_name:
return True
else:
return False
def convert_data():
BUCKET_NAME = 'output-file1'
my_bucket = s3.Bucket('input-file1')
for s3_object in my_bucket.objects.all():
data = check_file(s3_object.key)
if data == False or data is None:
body = s3_object.get()['Body'].read()
file_data = bytearray(body)
response = translate.translate_text(Text=str(file_data), SourceLanguageCode="en", TargetLanguageCode="fr")
# response = translate.translate_text(Text=str(file_data), TerminologyNames=["testing"],\
# SourceLanguageCode="en", TargetLanguageCode="fr")
print("Translated text: " + response.get('TranslatedText'))
with open('/tmp/' + s3_object.key, 'w') as txtfile:
txtfile.write(str(response.get('TranslatedText')))
txtfile.close()
s3_data.upload_file(Bucket='output-file1',\
Key=s3_object.key, Filename='/tmp/' + s3_object.key)
print('========Upload The File===========')
# convert_data()
def convert_langauge():
with app.app_context():
convert_data()
return True
if __name__ == "__main__":
app.run()
答案 0 :(得分:2)
如果脚本在本地运行,而不能在lambda上运行,则可能的原因是您的boto3库版本在本地和lambda上不同。 AWS并不经常更新其boto3,我遇到了与认知对象锁定类似的问题。
要解决此问题,您可以将lambda函数下载(导出)到本地计算机。 接下来,使用以下命令获取您在本地运行的boto3版本:
pip install boto3==<your_local_version> -t lib/
其中lib/
是将安装这些文件的目录的名称。
接下来,复制lib文件夹中的所有文件(不要复制文件夹本身),然后将其粘贴到您下载(导出)的zip文件中。 请勿解压缩zip并将其重新打包,只需在winzip或winrar中将其打开,然后将lib文件夹中的文件/文件夹粘贴到您的lambda函数zip中。接下来,您进入控制台中的lambda并再次上传zip。它将替换您由zappa创建的lambda,并且不会更改您的api路径。您还将安装正确的boto3版本。