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

19

我正在尝试将现有的Spring Boot应用程序转换为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

6个回答

20

您没有将任何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参见


啊,有没有办法设置 Lambda 以便它定期被触发(每天一次),而不需要通过调用该路径来启动它? - Kristof Plennings
@KristofPlennings 确定使用 Schedule 事件是正确的做法。对于 sam local,你需要使用 generate-event。请查看我的更新答案。 - H6.
感谢您的回复。我已经尝试了一下,它返回了一个类似于以下格式的示例负载: {"source": "aws.events"} ... 但我的实际handleRequest似乎并没有执行(handleRequest应该创建一个目录来测试它是否正在执行,但它并没有被创建)。非常感谢您的耐心与帮助。同时我注意到我应该更好地检查:https://docs.aws.amazon.com/lambda/latest/dg/test-sam-cli.html - Kristof Plennings
你需要调用它 sam local invoke function-name -e event_file.json - H6.

14

对于Google员工:

  • 检查是否有一个Type: ApiEvent
  • 同时检查是否已运行sam build(非常重要)
  • 使用--debug标志以便了解正在发生什么

截至2020/7/13,Type: HttpApi不能与sam local start-api一起使用。请参阅问题


3

这里有任何更新吗?现在支持了吗?:-) 有找到任何解决方法吗? - static void main

2
我也遇到了这个错误,即使我在SAM模板中定义了一个Api事件。问题是我之前有一个模板保存在我的.aws-sam/build/目录中,该模板没有定义Api事件(来自先前运行的sam build)。清理构建目录解决了这个问题。

1
我得到了这个错误,但是我的函数可以使用 HttpApi,看起来当前版本的 sam 不支持 HttpApiCLI 版本 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

目前在 GitHub 上有一个开放的问题需要添加支持:https://github.com/awslabs/aws-sam-cli/issues/1641


0
当我在我的 AWS::Serverless::Function 定义中有一个空格错误时,我遇到了这个错误,具体来说,Environment 需要成为 Properties 的子元素,但却处于相同级别。纠正空格使此错误消失。Nodejs 10.15。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接