2016-02-03 4 views
0

Эта функция не ясно мне о пользе (я не нашел хорошую документацию):AWS Lambda и зип загрузка с S3

  1. Это просто быстрее в случае, если вы повторно использовать один и тот же почтовый индекс для многие лямбда-функции, потому что вы загружаете только 1 раз, и вы просто указываете URL-адрес ссылки S3 для каждой лямбда-функции?
  2. Если вы используете ссылку S3, все ваши лямбда-функции будут обновляться последним кодом автоматически при повторной загрузке zip-файла, то есть это zip-файл на S3, «ссылка» для использования при каждом вызове лямбда функционировать?

спасибо.

EDIT:
Меня спросили: «Почему вы хотите, чтобы один и тот же код для нескольких лямбда-функций?» Поскольку я использую AWS Lambda с AWS API Gateway, поэтому у меня есть 1 проект со всеми моими обработчиками, которые являются фактическими «конечными точками» для моего RESTful API.

EDIT # 2: Я подтверждаю, что загрузка измененной версии zip-файла на S3 не изменяет результат существующих лямбда-функций.

Если парень AWS читает это сообщение, это было бы здорово иметь вид функции пакетного обновления, который обновляет набор выбранных функций лямбда с 1 почтовый файл на S3 в 1 клик (или даже «автоматическое обновление «функция, которая обнаруживает, когда файл был обновлен ;-))
Предположим, у вас есть 50 обработчиков в 1 проекте, затем вы модифицируете что-то глобальное, воздействующее на всех из них, в настоящее время вам нужно пройти все ваши лямбда-функции и обновить почтовый индекс файл вручную ...

+0

Вы можете использовать триггер на ведро S3 для автоматизации обновления набора функций лямбда при загрузке файла. –

+0

@AdrianWragg хорошее предложение, я уже использую функцию события для других вещей, но это означает, что вы используете другую функцию Lambda для обновления кода других функций? В моем случае я использую Java, и я выпускаю Maven в S3-ведра, поэтому я думал об использовании локального скрипта, вызывающего интерфейс командной строки AWS (код функции обновления). –

+0

Вы правы, да. На самом деле я дал более подробно ответ на этот вопрос ниже, который также включает ссылку на скрипт, который вы можете адаптировать для своих требований. –

ответ

1

Код импортируется из zip в Lambda. Это точно так же, как загрузка zip-файла через консоль Lambda или API. Однако, если ваша функция Lambda большая (скажем,> 10 МБ), они рекомендуют загружать на S3, а затем использовать функцию импорта S3, потому что это более стабильно, чем прямое скачивание с страницы Lambda. Помимо этого, нет никакой пользы.

Так что для вопроса 1: нет. Почему вам нужен одинаковый код для нескольких функций Lambda?

Вопрос 2: Если вы переписываете zip, вы не будете обновлять код функции лямбда.

+1

См. Мое изменение о вашем вопросе. –

+1

Я думаю, вы также можете исправить это, используя 1 функцию лямбда и использование шаблонов сопоставления шлюза API. Я использую одну функцию Lambda для нескольких конечных точек, а в шаблоне сопоставления каждой конечной точки я указываю дополнительное значение (уникальное для каждой конечной точки), которое переходит в «событие» отдельной функции лямбда, чтобы различать разные запросы конечных точек. –

+0

Хорошо спасибо за совет. Итак, я думаю, у вас есть один обработчик, который действует как диспетчер в соответствии с некоторой переменной из вашего ввода или контекста? –

2

Чтобы ответить на то, что я думаю, суть вашего вопроса, AWS позволяет использовать S3 в качестве источника для вашего zip-файла Lambda, потому что иногда загрузка больших файлов через ваш браузер может привести к таймауту. Кроме того, сохранение вашего кода на S3 позволяет хранить его централизованно, а не на вашем компьютере, и я уверен, что там есть и CodeCommit.

Использование метода S3 для загрузки кода в Lambda также позволяет загружать файлы большего размера (при загрузке через веб-браузер AWS имеет ограничение 10 МБ).

+0

Я смог загрузить вчера 35-мегабайтный файл из моего браузера ;-) –

+0

В этот момент для распакованного содержимого пакета Lambda существует ограничение на 262 МБ (262 144 000 байт). –

2

Чтобы добавить к случаям использования других людей, возможность обновления функции Lambda с S3 чрезвычайно полезна в процессе автоматического развертывания/CI.

В инструкциях под номером New Deployment Options for AWS Lambda содержатся простые функции лямбда, которые могут быть использованы для копирования ZIP-файла с S3 на Lambda, а также инструкции по запуску его выполнения при загрузке нового файла.

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

  1. Я обновить узел приложения лямбда на моей локальной машине, и git commit его в удаленном хранилище.

  2. Экземпляр Jenkins берет на себя обязательство, вытаскивает соответствующие файлы, добавляет их в ZIP-файл и загружает его в ведро S3.

  3. Функция LambdaDeployment затем автоматически развертывает эту новую версию для меня, без необходимости даже покидать среду разработки.

0
#!/bin/bash 
cd /your/workspace 

#zips up the new code 
zip -FSr yourzipfile.zip . -x *.git* *bin/\* *.zip 

#Updates function code of lambda and pushes new zip file to s3bucket for cloudformation lambda:codeuri source 
aws lambda update-function-code --function-name arn:aws:lambda:us-west-2:YOURID:function:YOURFUNCTIONNAME --zip-file file://yourzipfile.zip 

Зависит от AWS-консоли установки и AWS профиля установки

aws --profile yourProfileName configure 
+1

Я использовал aws-лямбда-update-function-code, и он загружает zip-файл. так, вы не загружаете его дважды? первый с aws лямбдой, и снова с aws s3 cp? – cesarpachon

+0

Да, спасибо - обновлено. –

Смежные вопросы