Неизвестный параметр во входных данных: «TerminologyNames», должен быть одним из: Text, SourceLanguageCode, TargetLanguageCode - PullRequest
0 голосов
/ 16 июня 2019

Кто-нибудь имеет представление об этой ошибке. Я использую AWS translate, 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 Ответ

2 голосов
/ 16 июня 2019

Если скрипт работает на локальном компьютере и не работает на лямбде, вероятной причиной является то, что версии вашей библиотеки boto3 отличаются для локального и лямбда-версий. AWS не часто обновляет их boto3, и я столкнулся с подобной проблемой с блокировкой объектов cognito.

Чтобы исправить это, вы можете загрузить (экспортировать) лямбда-функцию на локальный компьютер. Затем получите версию boto3, которую вы используете локально, используя это:

pip install boto3==<your_local_version> -t lib/

где lib/ - имя каталога, в который будут установлены эти файлы.

Затем скопируйте все файлы внутри папки lib (не копируйте саму папку) и вставьте их в загруженный zip-архив (экспортированный). НЕ извлеките zip-файл и перепакуйте его, просто откройте его в winzip или winrar и вставьте файлы / папки в папке lib в zam-файл лямбда-функции. Затем вы идете к своей лямбде в консоли и снова загружаете zip. Он заменит вашу лямбду, созданную zappa, и не изменит ваш путь к API. У вас также будет установлена ​​правильная версия boto3.

...