Несколько лямбда-функций из файла sam.yml - PullRequest
0 голосов
/ 21 сентября 2018

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете иметь столько 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, и заменит его на s3 URL в 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 ... логики для изменения рабочего каталога для каждой функции

...