Не удается развернуть стек sam aws из-за ошибки «Обнаружен обработчик» - PullRequest
0 голосов
/ 18 ноября 2018

У меня проблемы с развертыванием лямбды с обработчиком во вложенном каталоге, используя sam.

Я выполняю следующие шаги:

  1. пакет:

    sam package --template template.yaml --output-template-file packaged.yaml --s3-bucket

Создает упакованный файл, который я использую на следующем шаге.

  1. Deploy:

    развертывание облачной информации aws - шаблон файла /Users/localuser/Do/learn-sam/dynamo-stream-lambda/packaged.yaml --stack-name barkingstack

ERROR

Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Transform AWS::Serverless-2016-10-31 failed with: Invalid Serverless Application Specification document. Number of errors found: 1. Resource with id [PublishNewBark] is invalid. Missing required property 'Handler'.

Cloudformation / SAM Template

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

Globals:
  Function:
    Runtime: nodejs8.10
    Timeout: 300

Resources:
  PublishNewBark:
    Type: AWS::Serverless::Function
    FunctionName: publishNewBark
    CodeUri: .
    Handler: src/index.handler
    Role: "<ROLE_ARN>"
    Description: Reads from the DynamoDB Stream and publishes to an SNS topic
    Events:
      - ReceiveBark:
          Type: DynamoDB
          Stream: !GetAtt BarkTable.StreamArn
          StartingPosition: TRIM_HORIZON
          BatchSize: 1


  BarkTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: BarkTable
      KeySchema:
        - KeyType: HASH
          AttributeName: id
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: S
      StreamSpecification:
        StreamViewType: NEW_AND_OLD_IMAGES
      ProvisionedThroughput:
        WriteCapacityUnits: 5
        ReadCapacityUnits: 5

  WooferTopic:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: wooferTopic
      TopicName: wooferTopic
      Subscription:
        - Endpoint: <my_email>
          Protocol: email

СТРУКТУРА КАТАЛОГА

root_directory / события / (для примеров событий) policy / (для роли IAM, создаваемой для лямбды с помощью CLI) SRC / index.js package.json node_modules template.yaml

HANDLER CODE

async function handler (event, context) {
  console.log(JSON.stringify(event, null, 2))
  return {}
}

module.exports = {handler}

1 Ответ

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

Я считаю, что вы должны поместить все, кроме типа ресурса, в "Свойства".

Ваше объявление функции должно быть:

PublishNewBark:
    Type: AWS::Serverless::Function
    Properties:
        FunctionName: publishNewBark
        CodeUri: .
        Handler: src/index.handler
        Role: "<ROLE_ARN>"
        Description: Reads from the DynamoDB Stream and publishes to an SNS topic
        Events:
          - ReceiveBark:
              Type: DynamoDB
              Stream: !GetAtt BarkTable.StreamArn
              StartingPosition: TRIM_HORIZON
              BatchSize: 1
...