Пытаюсь скачать файлы с s3 в лямбду AWS.
Существует веб-служба, которая отправляет метаданные s3 (ключ, сегмент) в SQS. У меня есть лямбда, которая загружает файл и передает его содержимое вasticsearch. Вот мой код:
import config
def push_data(event, context):
try:
_push_data(event, context)
except Exception as e:
print("Exception raised %s" % e)
def _push_data(event, context):
files_data = get_files_data(event)
for file_data in files_data:
is_success, data = push_file(
index=file_data["index"], file_bucket=file_data["file_bucket"],
file_key=file_data["file_key"]
)
if is_success:
call_post_push(file_data[0], data)
def push_file(index, file_bucket, file_key):
start_time = datetime.datetime.now()
print("I have started downloading %s" % start_time)
file_path = '/tmp/a.xlsx'
# download file from s3
client = boto3.client(
's3',
aws_access_key_id=config.AWS_ACCESS_KEY_ID,
aws_secret_access_key=config.AWS_SECRET_ACCESS_KEY,
)
client.download_file(Bucket=file_bucket, Key=file_key, Filename=file_path)
#
# contains code to push file contents to s3
print("Finished")
Когда исполняется лямбда, после печати I have started downloading ..
истекает время ожидания.
- Лямбда находится внутри виртуального виртуального процессора, для которого настроен шлюз NAT.
- Лямбда имеет разрешение на доступ к s3.
- Ведро s3, из которого я загружаю файл, находится в другом регионе, чем лямбда. Однако я не думаю, что это должно вызывать какие-либо проблемы.
- Я увеличил время ожидания до 5 минут. для функции, так что в случае, если файл огромен, я не получаю никаких проблем
- Сначала я загрузил небольшой файл, чтобы убедиться, что время загрузки невелико.
- Я запустил тот же код на своей локальной машине, чтобы проверить, нет ли проблем с загрузкой. Получается, что загрузка файла, который я тестирую с помощью Lambda, занимает не более 1 секунды.
Выполнение всего вышеперечисленного не помогло. Пожалуйста, дайте мне знать, как решить эту проблему, или если есть что-то, что мне нужно проверить.