Извлечь текст через Textract из S3 Object через Lambda в VPC - PullRequest
2 голосов
/ 15 января 2020

Я знаю, что это полный заголовок, но я ударился о стену и подумал, что смогу протянуть руку, чтобы узнать, чего я пропускаю.

моя цель: лямбда, которая будет обращаться к файлу внутри корзины S3, запускать его через textract и затем записывать результаты в базу данных RDS. (на данный момент, чтобы получить доступ к RDS, я должен запустить свои лямбды в VP C)

Итак, у меня есть лямбда-функция, которая работает внутри VP C. Я настроил необходимые разрешения, политики, конечные точки и т. Д. c так, чтобы лямбда могла получить доступ к документам s3, используя следующий код:

s3 = boto3.client('s3')
def lambda_handler(event, context):
    bucket = 'my-bucket'
    key = my-file.json'
    try:
        data = s3.get_object(Bucket=bucket, Key=key)
        json_data = data['Body'].read()
        return json_data    
    except Exception as e:
        print(e)
        raise e

Теперь ... вот проблема. Я заменяю приведенный выше код следующим кодом и запускаю внутри VP C - я получаю страшный тайм-аут.

def lambda_handler(event, context):
    # Document
    s3BucketName = "my-bucket"
    documentName = "test.png" 
    # Amazon Textract client
    textract = boto3.client('textract')

    # Call Amazon Textract
    response = textract.detect_document_text(
    Document={
            'S3Object': {
            'Bucket': s3BucketName,
            'Name': documentName
    }    })
   # Print detected text
    for item in response["Blocks"]:
    if item["BlockType"] == "LINE":
        print (  item["Text"] )

Когда лямбда запускается вне VP C, то есть "No VP C ", выбранный под заголовком" Сеть "в лямбде, этот второй кусок кода выполняется без проблем.

Кто-нибудь знает, что может быть причиной сбоя? В документах я не нашел ничего, что говорило бы, что это дело предотвращено, но я беспокоюсь, что не смогу получить доступ к Textract изнутри VP C?

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Textract доступен в вашем VP C, если ваш VP C существует в одном из следующих регионов (по состоянию на январь 2020 года):

  • Восток США (Северная Вирджиния)
  • США Восток (Огайо)
  • США Запад (Орегон)
  • США Запад (Северная Калифорния)
  • ЕС (Ирландия)
  • ЕС (Лондон)
  • Asia Pacifi c (Сидней)

Если ваша функция Lambda, которая вызывает API Textract, имеет тайм-аут, это может быть связано с тем, что Textract Время вызова API больше, чем время ожидания лямбда-функции. В этом сценарии вы можете использовать асинхронный API Textract StartDocumentTextDetection - где ваша лямбда-функция может просто запустить фоновый процесс, и вы можете получать уведомления через SNS, когда задание завершено.

https://docs.aws.amazon.com/textract/latest/dg/API_StartDocumentTextDetection.html

0 голосов
/ 15 января 2020

Я предполагаю, что он не проходит через ответ textract?

Если это так, просто дважды проверьте, чтобы к роли выполнения был прикреплен AmazonTextractFullAccess.

Также стоит попробовать сначала извлечь файл из s3 и попытаться запустить textract для локального файла, чтобы проверить, является ли его проблема между textract и s3, в частности.

Затем существует это старое надежное исправление:

Извлеките текст в лямбду, отличную от vp c, и дамп результатов в json на S3, затем запустите еще один лямбда в VP C, который может получить доступ к вашей БД RDS.

...