AWS SAM: не удалось установить из функции, поскольку она не содержит пакет. json файл - PullRequest
0 голосов
/ 13 марта 2020

Я использую AWS SAM в Visual Studio Code для настройки ряда Node.js лямбда-функций. Я использую Windows 10. Я только начинаю с AWS SAM и сгенерировал Sample Hello World App, используя командную палитру, и она работает. Я начал расширять приложение, добавив вторую функцию и реструктурировав структуру каталогов, чтобы начать добавлять больше функций. Моя структура каталогов теперь выглядит следующим образом:

|--my-app
|  |--event-handlers
|  |  |--hello-world
|  |  |  |--app.js
|  |  |--hello-world-2
|  |  |  |--app.js
|  |--package.json
|  |--template.yml

Когда я запускаю sam build, я получаю ошибку Невозможно установить из .. \ my-app \ event-handlers \ hello-world как это не содержит пакет. json файл . Если я скопирую свой пакет. json файл в каждый из подкаталогов hello-world и hello-world-2 , тогда sam build будет работать нормально. Но кажется неправильным, что мне нужно указывать отдельный файл пакета. json для каждой функции, потому что он нарушает принципы DRY. Я ожидал, что он должен использовать пакет. json из каталога root для всех моих лямбда-функций, если я структурирую его следующим образом.

Нужно ли мне действительно дублировать пакет. json file для каждой лямбда-функции? Каковы лучшие практики с точки зрения структуры каталогов для приложения SAM, которое определяет несколько лямбда-функций? Почему он не забирает мой пакет. json файл из моего каталога root?

Для справки я также включил раздел моего файла template.yaml

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: event-handlers/hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        HelloWorld:
          Type: Api 
          Properties:
            Path: /hello
            Method: get

  HelloWorldFunction2:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: event-handlers/hello-world-2/
      Handler: app.lambdaHandler
      Runtime: nodejs12.x
      Events:
        MyScheduledEvent:
          Type: Schedule
          Properties:
            Schedule: rate(2 minutes)
            Name: app.lambdaHandler
            Description: Interval at which node function should be called
            Enabled: True

1 Ответ

0 голосов
/ 26 марта 2020

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

Я получаю ту же ошибку, что и вы, но потому что у меня нет package.json в папке root. Образец проекта hello-world, созданный с помощью sam init, также не имеет его в папке root, но почему-то у sam build нет проблем с его сборкой.

...