通过 HTTP 请求调用 AWS Lambda 函数

64

是否可以通过HTTP请求(GET或POST)直接调用AWS Lambda函数? 如果不行,是否有绕过SNS或S3的解决方法?因为我想不到其他办法...

具体来说,我想使用JSON创建一个小型API。


你能再解释一下你的使用情况吗?从哪里调用?使用curl命令?还是通过浏览器?默认情况下,invoke的调用类型是RequestResponse,基本上就是一个HTTP请求。你甚至可以通过链接查看请求的语法。 - William Gaul
我们已经为此构建了一些工具。这全部都是公开的。请随意fork它。https://github.com/bespoken/bstpy以及https://github.com/bespoken/bst。 - Bela Vizy
6个回答

51
AWS API网关是唯一将Lambda函数暴露在HTTP上的方法。如果您在创建新的Lambda函数时使用微服务-HTTP端点蓝图,则AWS Lambda Web控制台应该会自动为您创建一个API网关。请注意,保留HTML标签。

enter image description here

您可以从以下屏幕上进行设置: 在此输入图像描述 或者,您可以从AWS API Gateway Web控制台创建它。 在此输入图像描述

您还可以使用客户端、移动或 Web 应用程序中的 SDK 按需调用它。更多信息在此处


5
一旦设置好了API网关,如何使用它?在 stages/prod 下,给出了每种可能的HTTP方法和它们的共同URL。访问该URL会显示 {"message":"Missing Authentication Token"} - Bruno Bronosky
6
新的应用程序负载均衡器现在可以调用Lambda函数。 - rocketspacer
4
您可以使用Amazon SDK来调用Lambda函数,它在底层使用HTTP连接到AWS Lambda API。这种请求需要安全凭证以便正确签名。 - Graham Lea
3
小心使用“X是做Y的唯一方式”这样的陈述。即使答案已经发布,您仍可以通过SNS触发Lambda,并由此触发HTTP。 - DiegoAlfonso

23

是的,您可以使用HTTP POST方法调用AWS Lambda函数,这需要使用有效的AWS IAM凭据进行sigv4签名请求。

我使用POSTMAN进行了测试:

curl -X POST https://lambda.us-west-2.amazonaws.com/2015-03-31/functions/Function_NAME/invocations

链接: 调用语法


7
你能分享一下如何使用sigv4对请求进行签名吗? 你是如何生成授权头的? - Binod Karunanayake
2
@BinodKarunanayake 这个问题比较复杂。如果可以的话,最好使用AWS SDK。但是这里还是提供详细信息:https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html - Graham Lea
1
如果你是这样做的话,我认为可以添加 X-Amz-Invocation-Type: <InvocationType> header 来使用特定的调用类型进行调用。这只是一个补充说明。 - trademark

9

9

7
Lambda现在有内置的HTTPS端点,您可以使用它来调用lambda。 这可以在“高级设置”窗格中通过“启用函数URL”选项启用:

enter image description here

您可以在此处找到更多关于此功能的信息。


1

可以的。这里有一个API:Invoke


2
你可能需要澄清一下,但你需要签名 - Tim Erickson

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