例如,如果我们想要使用
GET /user?name=bob
要么
GET /user/bob
您如何将这两个示例作为参数传递给Lambda函数?
我在文档中看到了关于设置"映射到"的内容,但我在API网关控制台中找不到该设置.
method.request.path.parameter-name对于parameter-name在"方法请求"页面中定义的路径参数.method.request.querystring.parameter-name对于parameter-name在"方法请求"页面中定义的名称的查询字符串参数.即使我定义了查询字符串,我也看不到这些选项中的任何一个.
首先,有人可能会说这个问题与HTTP request body not getting to AWS lambda function via AWS API Gateway或Getting json body in aws Lambda via API gateway非常相似
但是,这些问题都没有解决使用 Golang 的问题,我遇到的问题是找到event与 Node.js 文档中随处使用的参数等效的参数。
这是我的 Lambda 函数:
package main
import (
"context"
"encoding/json"
"github.com/aws/aws-lambda-go/lambda"
"github.com/aws/aws-lambda-go/events"
"log"
)
type MyReturn struct {
Response string `json:"response"`
}
type APIGWResponse struct {
IsBase64Encoded bool `json:"isBase64Encoded"`
StatusCode int `json:"statusCode"`
Headers map[string]string `json:"headers"`
Body string `json:"body"`
}
func handle(ctx context.Context, name MyReturn) (APIGWResponse, error) {
log.Print("Called by …Run Code Online (Sandbox Code Playgroud) 目前,我认为我对如何从lambda函数提取/传递数据有基本的误解,我正在寻求澄清
示例:假设我想将一些数据传递给lambda函数,即{"hello":"world"}通过在AWS API Gateway中创建REST端点将数据传递给该Lambda函数来实现
目前,我了解有三种提取数据的方法:
1)event.queryStringParameters(有意义)
例如 我们可以将查询参数附加到请求URL:https : //fakefakefake.execute-api.us-west-2.amazonaws.com/test/myapi?hello=world以及lambda函数中:
const data = event.queryStringParameters.hello; // 'world'
Run Code Online (Sandbox Code Playgroud)
2)event.body(很有意义,由于“ Lambda代理集成”,这是可能的)
例如 如果我们使用Lambda代理集成将数据附加到POST / PUT / etc请求的主体中(即转发所有数据),则可以event.body在lambda函数中通过&访问它(但请确保JSON.parse event.body)因为Lambda代理集成将通过字符串化JSON(无效/“真实” JSON)传递:
const parsedBody = JSON.parse(event.body); // should wrap in try/catch
const data = parsedBody.hello; // 'world'
Run Code Online (Sandbox Code Playgroud)
3)直接在事件对象上(不清楚)
例如 目前尚不清楚这种情况-通过API网关中的REST端点设置将数据传递给lambda函数,然后可以从事件对象直接访问它?
const data = event.hello; // 'world'
Run Code Online (Sandbox Code Playgroud)
例如在案例3中,如何在Lambda函数中的事件对象上“直接”传递数据的示例是什么?我认为这种情况要求我在设置API / Lambda时创建一个“映射模板”,但是我仍然不清楚。
对于简单的Node脚本,情况2似乎具有从字符串化JSON解析事件主体的“开销”,因此这是可以理解的缺点,但是除了如何做到这一点,为什么情况3或何时将是情况3?
Lambda代理集成:通过API网关在AWS Lambda中获取json正文
Lambda代理集成(AWS示例):https : //docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html
Lambda代理集成与Lambda代理(上面的选项#2与选项#3):Lambda集成与Lambda代理:优缺点
javascript amazon-web-services node.js aws-lambda aws-api-gateway