Несколько лямбда-функций из файла sam.yml

Все еще ждем реальной поддержки AWS для этого: https://github.com/aws-samples/aws-serverless-samfarm/issues/5

Как это должно работать?

Мой вариант использования: у меня есть лямбда-выражение с выходом на API-шлюз, которое записывает события в тему SNS. У меня есть еще одна лямбда, подписанная на эту тему.

Могут ли эти лямбды быть в разных репозиториях? да. Является ли частью цели использования шаблона pub / sub для разделения этих двух приложений в первую очередь? да.

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

Я могу легко добавить все нужные мне функции в свой шаблон SAM, но как их развернуть? Должен ли каждый из них иметь свой CodeURI? Это означает, что мне нужно скопировать скрипт и установить все зависимости лямбда-выражений в другую папку, а затем указать кодеури для каждой лямбда-выражения в шаблоне в другую папку.

Нет ли для этого лучшей поддержки?


person red888    schedule 21.09.2018    source источник


Ответы (1)


Вы можете иметь столько AWS::Serverless::Function ресурсов в одном шаблоне, сколько хотите, при условии, что они имеют уникальный логический идентификатор.

Если вы предпочитаете хранить несколько лямбда-функций в одном репозитории, вам придется предоставить разные CodeUri для каждой лямбда. Например CodeUri: ./handler-my-lambda-one.zip и CodeUri: ./handler-my-lambda-two.zip.

Обычно рекомендуется иметь Makefile в вашем репозитории с целью build, отвечающей за подготовку handler-my-lambda-*.zip чего-то вроде:

build: 
    rm -rf node_modules
    npm install
    zip -r handler.zip index.js lib node_modules

и deploy цель, которая будет package ваш код (загрузить код в s3) и развернуть облачную информацию.

Команда package отвечает за загрузку артефакта zip, указанного в CodeUri, и заменяет его URL-адресом s3 в sam.out.yaml

deploy:
    aws cloudformation package \
        --template-file sam.yaml \
        --output-template-file sam.out.yaml \
        --s3-bucket my-artifact-bucket-name

    aws cloudformation deploy \
        --template-file sam.out.yaml

Поскольку вы решили иметь несколько лямбда-выражений в одном репозитории, вероятно, у вас будет две build команды для каждой лямбда-функции и некоторая cd ... логика для изменения рабочего каталога для каждой функции.

person b.b3rn4rd    schedule 22.09.2018