0

我将 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"
        }
    ]
}
4

0 回答 0