我正在开发一个由API Gateway和SQS触发的Lambda函数。
package main
import (
"context"
"fmt"
"log"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
regcode "company/gateway/lambda/regcode/lib"
)
func main() {
// Start the Lambda function with both SQS and Lambda URL handlers
lambda.Start(func(ctx context.Context, event interface{}) error {
fmt.Println("Event type: ", event)
switch event.(type) {
case events.SQSEvent:
return regcode.HandlerSqs(ctx, event.(events.SQSEvent))
case events.APIGatewayProxyRequest:
response, err := regcode.HandlerLambdaURL(ctx, event.(events.APIGatewayProxyRequest))
if err != nil {
log.Println(err)
return err
}
log.Printf("API Gateway response: %v", response)
return nil
default:
return fmt.Errorf("unknown event type: %T", event)
}
})
}
但是我的开关类型无法识别我何时使用SQS或API网关事件。它总是落在默认语句中。例如,对于SQS,我正在使用此事件:
{
"Records": [
{
"messageId": "19dd0b57-b21e-4ac1-bd88-01bbb068cb78",
"receiptHandle": "MessageReceiptHandle",
"body": "Hello from SQS!",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1523232000000",
"SenderId": "123456789012",
"ApproximateFirstReceiveTimestamp": "1523232000001"
},
"messageAttributes": {},
"md5OfBody": "{{{md5_of_body}}}",
"md5OfMessageAttributes": "test",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-1:123456789012:MyQueue",
"awsRegion": "us-east-1"
}
]
}
并收到以下信息:
unknown event type: map[string]interface {}: errorString
我做错了什么?我是新手,对使用golang感到困惑。
另外,我尝试直接将事件发送到regcode.HandlerSqs
,但是我得到了一个类型转换错误。就像这样:
func main() {
// Start the Lambda function with both SQS and Lambda URL handlers
lambda.Start(func(ctx context.Context, event interface{}) error {
sqsEvent, _ := event.(SQSEvent)
// ...
})
}
sqsEvent为空。
event.(events.SQSEvent)
- milho