输入中的未知参数:“ TerminalologyNames”,必须为以下各项之一:Text,SourceLanguageCode,TargetLanguageCode

时间:2019-06-16 08:42:15

标签: python amazon-web-services boto3 zappa

任何人对此错误有任何想法。我正在使用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()

1 个答案:

答案 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版本。