AWS Лямбда-триггер на корзине S3 для Нептуна "Не удалось начать новую загрузку для источника" - PullRequest
1 голос
/ 21 января 2020

Я написал лямбда-функцию, которая будет запускать код python, когда в S3 происходит событие создания, и сценарий Python должен считывать файлы из S3 и отправлять их на сервер Neptune.

Когда я проверяю это, я получаю следующую ошибку.

{
 "requestId":"xxxxxxxx-1234-5678-9012-xxxxxxxxxxxxx",  
 "code":"ThrottlingException",  
 "detailedMessage":"Failed to start new load for the source s3://my-s3-url/file.ttl. 
    Max concurrent load limit breached. Limit is 1"
}

Код:

def lambda_handler(event, context):
    file_names = ["a.ttl", "b.ttl", "c.ttl"]
    source_url = "s3://my-s3.aws.com/"
    role = "my-role"
    neptune_url = "https://my-neptune-server.aws.com/loader"
    headers = {"Content-Type": "application/json"}

    for name in file_names:
        file = source_url+name
        data = {"source": file, "iamRoleArn": role, "region": "region-1", "failOnError": "FALSE", "format": "turtle"}
        loop = asyncio.get_event_loop()
        task = loop.create_task(post_async(neptune_url, json.dumps(data), headers))
        resp = loop.run_until_complete(task)
        print(resp)

async def post_async(neptune_url, data, headers):
    async with aiohttp.ClientSession() as session:
        async with session.post(neptune_url, data=data, headers=headers) as response:
            result = await response.text()
            return result

Я пробовал оба варианта: синхронный и асинхронный. Я получаю ограниченную документацию в Интернете. Кто-нибудь может указать мне правильное направление?

1 Ответ

2 голосов
/ 21 января 2020

Согласно документации: Максимальное ограничение одновременной загрузки равно one

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

  • SQS
  • сохранение очереди загрузки с именами файлов в хранилище параметров и рекурсивное выполнение лямбда-функции для развертывания файлов один за другим
  • или ваша собственная идея ...:)
...