【问题标题】:how to develop a lambda on SAM but deploy without api gateway如何在 SAM 上开发 lambda 但在没有 api 网关的情况下部署
【发布时间】:2021-08-18 11:46:21
【问题描述】:

我正在使用 SAM 开发由 SNS 触发的 lambda。
当我使用 SAM 时,似乎我在部署时获得了与 Lambda 关联的 API GATEWAY。
它在开发中很好,但在产品中却不是。
如果不将 Lambda 部署到 API GATEWAY,我将如何开发它?

【问题讨论】:

  • 您使用 SAM 开发 Lambda 函数而不是使用 Lambda 运行时 API 和 AWS 开发工具包(如 Java、JavaScript 或 Python)对其进行编码的任何原因?
  • @smac2020 不知道 Lambda 运行时 API -> 检查。是否有类似的工具可以在本地模拟 Dynmo 和 SNS?
  • 在下面查看我的回复。

标签: amazon-web-services aws-lambda aws-api-gateway aws-sam


【解决方案1】:

“我不知道 Lambda 运行时 API”

使用 Lambda 运行时 API 和 AWS 开发工具包,作为开发人员,您可以使用您想要的确切功能构建更灵活的 Lambda 函数。

例如,您可以构建可以调用多个 AWS 服务来执行给定用例的 Lambda 函数。例如,通过 Lambda 函数,我想检测 Amazon S3 存储桶中图像中的 PPE 信息,将结果存储在 Amazon DynamoDB 表中,并使用 SES 服务通过电子邮件发送结果。

这里有一些端到端的教程。

例如 - 这里有两个 JavaScript 示例:

Creating and using Lambda functions

Creating scheduled events to execute AWS Lambda functions

以下是一些 Java 运行时示例:

Creating an AWS Lambda function that detects images with Personal Protective Equipment

Creating an Amazon Web Services Lambda function that tags digital assets located in Amazon S3 buckets

Creating an ETL workflow by using AWS Step Functions and the AWS SDK forJava

更新

在 IDE 中测试代码后,从 Lambda 控制台进行部署和测试。成功调用后,您将看到如下消息:

【讨论】:

  • 据我了解,这需要部署到AWS进行测试,我无法在本地测试。这是正确的吗?
  • 可以在本地测试代码。例如,如果您使用的是 IDE,则可以设置断点并单步执行代码。然后,一旦您对代码感到满意,将其部署到 AWS 并从 Lambda 控制台进行测试。当 Lambda 函数成功时,您将看到一条成功消息
【解决方案2】:

我发现的另一个选项,这次在 SAM 中使用不同的事件源定义函数。
如果事件源定义为 Api
,则 Lambda 将被公开 您可以将其定义为许多其他事物(S3、Sns、Sqs 等)

这里是一个通过 api 网关和 http 事件触发的函数示例,另一个是 Sns 触发的函数示例。 SNS 的配置不完整,请查看此链接以获取完整详细信息https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md

in template.yaml 请注意每个 Lambda 定义的 Events 部分。

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs14.x
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get
  BooBooFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: booboo/
      Handler: app.lambdaHandler
      Runtime: nodejs14.x
      Events:
        BooBoo:
          Type: Sns # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api

【讨论】:

    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2022-01-06
    • 2020-12-14
    相关资源
    最近更新 更多