AWS SAM - 模板没有任何连接到 Lambda 函数的 API

AWS SAM - Template does not have any APIs connected to Lambda functions

所以我正在尝试将现有的 spring 启动应用程序转换为 AWS lambda 并使用 SAM。

我正在尝试使用 aws-sam-cli 在本地尝试我的 lambda,但是通过我的 SAM 设置,我得到:Template does not have any APIs connected to Lambda functions

当我这样做时:sam local start-api

我的template.yml:

AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: foo
Resources:
  MailFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: bar.LambdaHandler::handleRequest
      Runtime: java8
      CodeUri: target/foo-bar-1.0.jar
      Timeout: 300
      MemorySize: 1024
      Events:
        Timer:
          Type: Schedule
          Properties:
            Schedule: rate(1 day)

知道我做错了什么吗?据我所知 https://blog.couchbase.com/aws-serverless-lambda-scheduled-events-tweets-couchbase/ + https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

它看起来是正确的

您没有向您的函数添加任何 API 网关事件。 start-api 生成一个本地 API 网关。

您需要在 Events 部分添加至少一个 Api 活动。

Events:
  [...]
  Api:
    Type: Api
    Properties:
      Path: /myresource
      Method: get

如果您只有 Schedule 活动,请尝试使用 generate-event 来创建这样的活动。

sam local generate-event schedule ...

并调用函数,例如sam local invoke function-name -e event_file.json (see)

我 运行 也遇到了这个错误,即使我 确实 在我的 SAM 模板中定义了 Api 事件。问题是我的 .aws-sam/build/ 目录中有一个以前的模板,它没有定义 Api 事件(来自 sam build 的先前 运行)。清理构建目录修复它。

当我在 AWS::Serverless::Function 定义中出现空格错误时,我得到了这个错误,特别是 Environment 需要成为 Properties 的子级,但处于同一级别。更正空格使此错误消失。节点 10.15.

如果您尝试在本地测试 websocket API,也会显示此错误消息。不幸的是,当前不支持 websockets 的本地测试 - 请参阅 https://github.com/awslabs/aws-sam-cli/issues/896

Google 员工:

  • 检查您是否有 EventType: Api
  • 还要检查您是否有 运行 sam build非常重要
  • 使用 --debug 标志,这样您就会知道发生了什么

自 2020 年 7 月 13 日起,Type: HttpApi 不适用于 sam local start-api。参见 issue

我收到此错误,但我的函数正在使用 HttpApi,看来 sam 的当前版本不支持 HttpApi

CLI 版本

SAM CLI, version 0.52.0

示例函数

FeedsFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri:
    Description: "Function that handles feeds"
    Events:
      Handler:
        Type: HttpApi
        Properties:
          ApiId: !Ref FeedsApi
          Path: /
          Method: get
    Handler: api
    MemorySize: 1024
    Runtime: go1.x
    Timeout: 5
    Tracing: Active

There is currently an open issue on GitHub for adding support: https://github.com/awslabs/aws-sam-cli/issues/1641