如何在 SAM 上开发 lambda 但在没有 api 网关的情况下进行部署

问题描述 投票:0回答:3

我正在使用 SAM 开发一个由 SNS 触发的 lambda。
当我使用 SAM 时,部署时似乎获得了与 Lambda 关联的 API GATEWAY。
在开发中很好,但在生产中却不好。
我如何开发 Lambda,而不将其部署到附加到 API 网关?

amazon-web-services aws-lambda aws-api-gateway aws-sam
3个回答
0
投票

“我不知道 Lambda 运行时 API”

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

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

这里有一些端到端教程。

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

创建和使用 Lambda 函数

创建计划事件以执行 AWS Lambda 函数

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

创建一个 AWS Lambda 函数来检测带有个人防护装备的图像

创建 Amazon Web Services Lambda 函数来标记位于 Amazon S3 存储桶中的数字资产

使用 AWS Step Functions 和适用于 Java 的 AWS 开发工具包创建 ETL 工作流程

更新

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


0
投票

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

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

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

0
投票

对于未来的读者:这是现在(2022 年 4 月)可以使用 Lambda 函数URL。 SAM 配置示例如下。请注意,您必须使用

sam local invoke
调用 lambda。您不能使用
sam local start-api
,因为没有 api 网关

HelloWorldFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: hello-world/
    Handler: app.lambdaHandler
    Runtime: nodejs18.x
    FunctionUrlConfig:
      AuthType: NONE

© www.soinside.com 2019 - 2024. All rights reserved.