我正在使用 SAM 开发一个由 SNS 触发的 lambda。
当我使用 SAM 时,部署时似乎获得了与 Lambda 关联的 API GATEWAY。
在开发中很好,但在生产中却不好。
我如何开发 Lambda,而不将其部署到附加到 API 网关?
“我不知道 Lambda 运行时 API”
使用 Lambda 运行时 API 和 AWS 开发工具包,作为开发人员,您可以构建更灵活的 Lambda 函数,并具有您想要的确切功能。
例如,您可以构建可以调用多个 AWS 服务来执行给定用例的 Lambda 函数。例如,我想通过 Lambda 函数检测 Amazon S3 存储桶内图像中的 PPE 信息,将结果存储在 Amazon DynamoDB 表中,并使用 SES 服务通过电子邮件发送结果。
这里有一些端到端教程。
例如 - 这里有两个 JavaScript 示例:
以下是一些 Java 运行时示例:
创建一个 AWS Lambda 函数来检测带有个人防护装备的图像
创建 Amazon Web Services Lambda 函数来标记位于 Amazon S3 存储桶中的数字资产
使用 AWS Step Functions 和适用于 Java 的 AWS 开发工具包创建 ETL 工作流程
更新
在 IDE 中测试代码后,部署它并从 Lambda 控制台进行测试。成功调用后,您将看到如下消息:
我发现的另一个选项,这次在 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