Я решил это сейчас.
Оказывается, что форма данных, передаваемых в бессерверный источник лямбда-данных, определяется пользователем.
В SamTemplate я посмотрел на определитель этого запроса и это выглядело как
getPersonQueryResolver:
Type: "AWS::AppSync::Resolver"
Properties:
ApiId: !GetAtt accountApi.ApiId
TypeName: "Query"
FieldName: "getPerson"
DataSourceName: !GetAtt PersonDatasource.Name
RequestMappingTemplate: |
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": {
"field": "getPerson",
"arguments": $utils.toJson($context.args)
}
}
ResponseMappingTemplate: |
$utils.toJson($context.result)
Я изменил этот преобразователь на
getPersonQueryResolver:
Type: "AWS::AppSync::Resolver"
Properties:
ApiId: !GetAtt accountApi.ApiId
TypeName: "Query"
FieldName: "getPerson"
DataSourceName: !GetAtt PersonDatasource.Name
RequestMappingTemplate: |
{
"version" : "2017-02-28",
"operation": "Invoke",
"payload": $utils.toJson($context.args)
}
ResponseMappingTemplate: |
$utils.toJson($context.result)
, а затем я изменил лямбда-код на
package main
import (
"context"
"log"
"github.com/aws/aws-lambda-go/lambda"
)
type GetPerson struct {
PersonID string `json:"personId"`
}
func main() {
lambda.Start(Handler)
}
// Handler is your serverless lambda function
func Handler(ctx context.Context, event GetPerson) error {
log.Println(ctx)
log.Println(event)
return nil
}
Это успешно упорядочило событие и зарегистрировано как {1}