#python #amazon-web-services #amazon-s3 #aws-lambda
#python #amazon-веб-сервисы #amazon-s3 #aws-lambda
Вопрос:
У меня есть лямбда-функция, которая используется для захвата загруженного пользователем файла через веб-приложение react, отправки его в корзину s3, затем лямбда-функция с использованием python, которая извлекает указанное изображение из корзины, переводит его и отправляет переведенную версию этого файла обратно в корзину.
Проблема в том, что эта программа работает только с тестовыми примерами / в теории. Для экстраполяции я ввожу имя файла в качестве «события» для лямбда-функции и переношу его в различные другие функции следующим образом:
def get_kv_map(event):
filePath = event
fileExt = filePath.get('body')
s3 = boto3.resource('s3')
bucket = s3.Bucket('myBucket')
obj = bucket.Object(bucket)
client = boto3.client('textract') #We utilize boto3's textract
response = client.analyze_document(Document={'S3Object': {'Bucket': 'myBucket', 'Name': fileExt}}, FeatureTypes=['FORMS'])
# Get the text blocks
blocks=response['Blocks'] #We make a blocks variable that will be the blocks we find in the document
# get key and value maps
key_map = {}
value_map = {}
block_map = {}
for block in blocks: #Traverse the blocks found in the document
block_id = block['Id'] #Set variable for blockId to the Id's found on that block location
block_map[block_id] = block #Make the block map at that ID be the block variable
if block['BlockType'] == "KEY_VALUE_SET": #if we see that the type of block we're on is a key and value set pair, we check if it's a key or not. If it's not a key, we know it's a value. We send it to the respective map.
if 'KEY' in block['EntityTypes']:
key_map[block_id] = block
else:
value_map[block_id] = block
return key_map, value_map, block_map #######LINE WITH ERROR ######
Почему именно эта строка вызывает ошибку, и, что более важно, почему это происходит только на веб-сайте? Когда я использую программу в cloud9 с моими тестовыми примерами, все отлично. Но в тот момент, когда я пытаюсь заставить веб-сайт отправить данные для функции, чтобы «выполнить свою работу», кажется, что она останавливается сразу после загрузки файла и переходит к этой строке из всех строк. Я пробовал проверять табуляции / пробелы и все остальное. Я очень озадачен.
Спасибо за любую помощь, я сегодня рвал на себе волосы.
Итак, я попытался проанализировать, что я привожу (событие) и что оно содержит. Кажется, что это ошибка разрешения, но я не могу понять почему. Я предоставил себе полный доступ к различным функциям в AWS. Ниже приведен код ошибки, который я получаю, когда использую тестовый пример в качестве своего события, которое я вижу при вводе.
"errorType": "InvalidS3ObjectException",
"errorMessage": "An error occurred (InvalidS3ObjectException) when calling the AnalyzeDocument operation: Unable to get object metadata from S3. Check object key, region and/or access permissions.",
"stackTrace": [
" File "/var/task/scrapeShow/lambda_function.py", line 133, in mainn key_map, value_map, block_map = get_kv_map(event) #Take map variables in to get the key and value map we need.n",
" File "/var/task/scrapeShow/lambda_function.py", line 39, in get_kv_mapn response = client.analyze_document(Document={'S3Object': {'Bucket': 'myBucket', 'Name': fileExt}}, FeatureTypes=['FORMS'])n",
" File "/var/runtime/botocore/client.py", line 316, in _api_calln return self._make_api_call(operation_name, kwargs)n",
" File "/var/runtime/botocore/client.py", line 626, in _make_api_calln raise error_class(parsed_response, operation_name)n"
]}
Комментарии:
1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Traceback») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.
2. поместите код с правильными отступами
3. Все, что я получаю из журналов cloudwatch, это синтаксическая ошибка в модуле func / lambda_function’: недопустимый синтаксис (lambda_function.py, строка 55)
4. Вы уверены, что синтаксическая ошибка в
return key_map, value_map, block_map
? Потому что это правильно и является допустимым кодом python.5. пожалуйста, поделитесь точной ошибкой.