Как запустить шаблон SAM AWS локально и успешно развернуть его в AWS (с помощью Java Lambdas)? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь создать приложение AWS, используя SAM (модель сервера без сервера) с Lambdas, написанным на Java.

Мне удалось запустить его локально, используя определение ресурса, подобное приведенному в шаблоне.:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: HelloWorldFunction
      Handler: helloworld.App::handleRequest
      Runtime: java8
      Events:
        HelloWorld:
          Type: Api
          Properties:
            Path: /hello
            Method: get

Но чтобы получить фазу sam package для загрузки на S3 только фактического кода (а не всего каталога проекта), мне пришлось изменить его на:

    ...
    Properties:
      CodeUri: HelloWorldFunction/target/HelloWorld-1.0.jar
    ...

как описано в примере проекта AWS SAM README.

Однако это лишает возможности локально запускать приложение с помощью sam build, за которым следует sam local start-api.

Я пытался обойти этодавая значение CodeUri в качестве параметра (с --parameter-overrides), и это работает локально, но прерывает фазу упаковки из-за известной проблемы с переводчиком SAM.

Есть лиспособ заставить как локальную сборку, так и реальное развертывание AWS работать, желательно с одним и тем же файлом шаблона?

1 Ответ

0 голосов
/ 21 марта 2019

Единственный обходной путь, с которым я до сих пор сталкивался, - это использование различных файлов шаблонов для локальной разработки и фактической упаковки и развертывания.

Чтобы не поддерживать два почти одинаковых файла шаблона, я написал скрипт для локального запуска сервиса:

#!/bin/bash

echo "Copying template..."
sed 's/CodeUri: .*/CodeUri: HelloWorldFunction/' template.yaml > template-local.yaml

echo "Building..."
if sam build -t template-local.yaml
then
  echo "Serving local API..."
  sam local start-api
else
  echo "Build failed, not running service."
fi

Это кажется менее чем оптимальным, но делает свое дело. Хотелось бы услышать лучшие альтернативы.

Еще одна идея, которая пришла в голову, - это расширение шаблона взаимной базы с отдельными значениями CodeUri для этих случаев, но я не думаю, что шаблоны SAM поддерживают что-либо подобное.

...