Я пытаюсь вызвать лямбда-функцию в другой лямбда-функции. У меня работает вызов лямбда-функции, однако я не могу заставить потребляющую лямбда-функцию получать полезную нагрузку / тело от отправляющей лямбда-функции.
Lambda go doc при вызове лямбда-функции
Вот моя функция отправки / вызова лямбда-функции
type Response events.APIGatewayProxyResponse
func Handler(ctx context.Context) (Response, error) {
region := os.Getenv("AWS_REGION")
session, err := session.NewSession(&aws.Config{ // Use aws sdk to connect to dynamoDB
Region: ®ion,
})
svc := invoke.New(session)
payload, err := json.Marshal(map[string]interface{}{
"message": "message to other lambda func",
})
if err != nil {
fmt.Println("Json Marshalling error")
}
input := &invoke.InvokeInput{
FunctionName: aws.String("invokeConsume"),
InvocationType: aws.String("RequestResponse"),
LogType: aws.String("Tail"),
Payload: payload,
}
result, err := svc.Invoke(input)
if err != nil {
fmt.Println("error")
fmt.Println(err.Error())
}
var m map[string]interface{}
json.Unmarshal(result.Payload, &m)
fmt.Println(m["body"])
body, err := json.Marshal(m["body"])
resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Headers: map[string]string{
"Content-Type": "application/json",
},
Body: string(body),
}
fmt.Println(resp)
return resp, nil
}
func main() {
lambda.Start(Handler)
}
Ответ, который я получаю от вызванной лямбды ...
{200 map[Content-Type:application/json] "{\"message\":\"Something\"}" false}
Моя лямбда-функция потребления
type Response events.APIGatewayProxyResponse
func Handler(ctx context.Context, req events.APIGatewayProxyRequest) (Response, error) {
fmt.Println(req)
var m map[string]interface{}
err := json.Unmarshal([]byte(req.Body), &m)
if err != nil {
fmt.Println("Json Unmarshalling error")
fmt.Println(err.Error())
}
fmt.Println(m)
body, _ := json.Marshal(map[string]interface{}{
"message": "Something",
})
resp := Response{
StatusCode: 200,
IsBase64Encoded: false,
Headers: map[string]string{
"Content-Type": "application/json",
},
Body: string(body),
}
return resp, nil
}
func main() {
lambda.Start(Handler)
}
Бревна от потребляющей лямбда-функции
{ map[] map[] map[] map[] { { } map[] } false}
Json Unmarshalling error
unexpected end of JSON input
map[]
Кажется, что лямбда-функция не получает никаких событий. APIGatewayProxyRequest, однако я не уверен, почему.
EDIT:
Мое решение - я должен был также включить объект json body в полезную нагрузку. Вот как я это решил
body, err := json.Marshal(map[string]interface{}{
"name": "Jimmy",
})
type Payload struct {
Body string `json:"body"`
}
p := Payload{
Body: string(body),
}
payload, err := json.Marshal(p) // This should give you {"body":"{\"name\":\"Jimmy\"}"} if you print it out which is the required format for the lambda request body.