AWS скачать файл на s3 по расписанию - PullRequest
0 голосов
/ 25 апреля 2019

Сейчас у меня есть работа cron, которая запускается раз в день. Он передает команду curl в файл, распаковывает этот файл, затем загружает его в корзину s3. Я хотел бы перенести это с моего сервера в инструментарий aws. Какой рекомендуемый способ сделать это в настоящее время? Сделать лямбда-функцию и запланировать ее ежедневную работу?

1 Ответ

1 голос
/ 25 апреля 2019

Наиболее экономически эффективным вариантом будет тот, который вы описываете:

  • создайте лямбда-функцию, которая загружает ваш контент, архивирует его и загружает на S3. Лямбда-функции имеют доступ к файловой системе хоста (500 МБ в /tmp) и не забывают впоследствии удалить файл. Контейнер будет повторно использован (в вашем аккаунте)

  • запланировать событие CloudWatch для запуска лямбда-функции через регулярный интервал времени.

  • настроить лямбда-функцию для авторизации CloudWatch Event для вызова вашей функции

aws lambda add-permission --function-name my-function\
                          --action 'lambda:InvokeFunction' --principal events.amazonaws.com
                          --statement-id events-access \
                          --source-arn arn:aws:events:*:123456789012:rule/*

[ОБНОВЛЕНИЕ]: что делать, если размер файла для загрузки составляет 4 ГБ?

В этом случае у вас будет два варианта. Один с большей работой, но более экономически эффективным. Один проще реализовать, но это может стоить немного больше.

Вариант 1: полностью без сервера

Вы можете создать свою функцию AWS Lambda для загрузки содержимого 4 ГБ и передавать его на S3 с помощью фрагментов по 5 МБ и сжимать фрагменты с помощью фрагментов. Я не эксперт по сжатию, но я уверен, что, возможно, найдется библиотека, которая справится с этим. Недостатком является то, что вам нужно написать определенный код, это будет не так просто, как объединение инструментов командной строки AWS CLI и GZIP.

Вариант 2: запустить экземпляр EC2 на время выполнения задания

Запланированная лямбда-функция может использовать API EC2 для запуска экземпляра. Сценарий задания можно передать экземпляру с помощью userdata ( сценарий, который экземпляр будет выполнять во время загрузки ). Этот сценарий может вызвать TerminateInstance, когда задание выполнено, чтобы убить себя и перестать платить за это. Недостатком является то, что вам придется платить за время работы этого экземпляра (вы можете иметь 750 часов в месяц бесплатно из t2.micro экземпляров) Положительным моментом является то, что вы можете использовать стандартные инструменты командной строки, такие как AWS CLI и GZIP, и у вас будет достаточно локального хранилища для вашей задачи.

Вот как запустить экземпляр из Python: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.start_instances

...