我将 serverless.com 框架和插件 serverless-apigateway-service-proxy 用于以下用例:
user sends rest api request
-> AWS REST API gateway
-> rest endpoint
-> kinesis
-> lambda
我能够在 event.Records[0].kinesis.data 下的 lambda 中获取用户请求正文。但我无法获取请求标头。请求标头没有从 API 网关传播到 kinesis 到 lambda。
下面是我的 serverless.yml 的片段,用于 api gateway 到 kinesis 集成:
apiGatewayServiceProxies 部分:在自定义部分下:
apiGatewayServiceProxies:
- kinesis:
path: raw
method: post
action: PutRecord
streamName: { Ref: 'RawDataStream'}
cors: true
资源部分
resources:
Resources:
RawDataStream:
Type: AWS::Kinesis::Stream
Properties:
Name: RawStream
ShardCount: 1
Outputs:
rawArn:
Value: !GetAtt MyRawDataStream.Arn
Export:
Name: RawDataStream-kinesis-stream-arn
功能部分:
- process:
name: ${self:service}-${self:provider.stage}
description: Accept user datapoints
handler: src/handlers/${self:provider.name}/handler.handle
timeout: 28
package:
include:
- src/handlers/${self:provider.name}/handler.js
- node_modules/user-datapoints-post/**
events:
- stream:
type: kinesis
arn:
Fn::ImportValue: RawDataStream-kinesis-stream-arn
我是否需要使用自定义属性下 apiGatewayServiceProxies 部分中的映射模板来映射 API 网关请求标头?如果是,那么示例示例会有所帮助。从https://www.serverless.com/plugins/serverless-apigateway-service-proxy上的文档 我们可以添加自定义标头,但是如何将发送到 api 网关的现有请求标头传递给我可以接收的 kinesis所有这些都在 lambda 中。
目前,我在从 Kinesis 接收到 lambda 的事件对象下看不到标题部分:我收到的事件对象示例:
Event Received:
{
"Records": [
{
"kinesis": {
"kinesisSchemaVersion": "1.0",
"partitionKey": "bf6329d9-ab64-4cc7-8e3a-99949cae1e92",
"sequenceNumber": "496255055042869073315338278500007633849242117787281784834",
"data": "eyJkYXRhIjoiZXlKdFpYUmhaR0YwWVNJNmV5S",
"approximateArrivalTimestamp": 1642245841.534
},
"eventSource": "aws:kinesis",
"eventVersion": "1.0",
"eventID": "shardId-000000000000:4962550507331533827851587633849242117787281784834",
"eventName": "aws:kinesis:record",
"invokeIdentityArn": "arn:aws:iam::259398755136:role/my-processor-dev-eu-west-1-lambdaRole",
"awsRegion": "eu-west-1",
"eventSourceARN": "arn:aws:kinesis:eu-west-1:259398758736:stream/RawStream"
}
]
}