You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Serverless Framework创建以Kinesis Firehose为触发源的Lambda

Kinesis Data Firehose作为Lambda事件源的配置方案

问题解答

Kinesis Data Firehose完全可以作为Lambda的事件触发源,主要用于数据转换场景:Firehose在将数据投递至目标存储(如S3、Redshift等)前,会调用Lambda对数据进行预处理。

你当前配置报错的原因是:Serverless Framework内置的stream事件类型仅支持Kinesis数据流(Kinesis Data Streams)、DynamoDB流和SQS,无法直接识别Kinesis Data Firehose的ARN,因此需要通过自定义CloudFormation资源来配置关联。

正确配置方式

1. 基础配置(关联已存在的Firehose交付流)

通过Serverless Framework的resources块手动创建Lambda事件源映射,并赋予Firehose调用Lambda的权限:

service: firehose-lambda-transformer

provider:
  name: aws
  runtime: nodejs18.x # 替换为你的Lambda运行时
  region: us-east-1 # 替换为你的AWS区域
  iamRoleStatements:
    - Effect: Allow
      Action: lambda:InvokeFunction
      Resource: !GetAtt TransformerLambdaFunction.Arn
      Principal:
        Service: firehose.amazonaws.com

functions:
  transformer:
    handler: index.handler

resources:
  Resources:
    FirehoseLambdaEventMapping:
      Type: AWS::Lambda::EventSourceMapping
      Properties:
        EventSourceArn: "arn:aws:firehose:us-east-1:123456789012:deliverystream/your-firehose-name" # 替换为你的Firehose ARN
        FunctionName: !GetAtt TransformerLambdaFunction.Arn
        Enabled: true

2. 进阶配置(同时创建Firehose交付流与Lambda关联)

如果需要通过Serverless Framework一并创建Firehose交付流,可以在resources中定义Firehose资源并配置其处理规则:

service: firehose-lambda-transformer

provider:
  name: aws
  runtime: nodejs18.x
  region: us-east-1
  iamRoleStatements:
    - Effect: Allow
      Action: lambda:InvokeFunction
      Resource: !GetAtt TransformerLambdaFunction.Arn
      Principal:
        Service: firehose.amazonaws.com

functions:
  transformer:
    handler: index.handler

resources:
  Resources:
    MyFirehoseDeliveryStream:
      Type: AWS::KinesisFirehose::DeliveryStream
      Properties:
        DeliveryStreamType: DirectPut
        ProcessingConfiguration:
          Enabled: true
          Processors:
            - Type: Lambda
              Parameters:
                - ParameterName: LambdaArn
                  ParameterValue: !GetAtt TransformerLambdaFunction.Arn
        # 配置Firehose目标存储(示例为S3)
        S3DestinationConfiguration:
          BucketARN: "arn:aws:s3:::your-bucket-name"
          RoleARN: !GetAtt FirehoseDeliveryRole.Arn

    FirehoseDeliveryRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Principal:
                Service: firehose.amazonaws.com
              Action: sts:AssumeRole
        Policies:
          - PolicyName: FirehoseDeliveryPolicy
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: Allow
                  Action:
                    - s3:PutObject
                  Resource: "arn:aws:s3:::your-bucket-name/*"

关键要点

  • 必须为Lambda的执行角色添加权限,允许Firehose服务调用该Lambda函数,否则触发会失败。
  • 使用AWS::Lambda::EventSourceMapping或Firehose的ProcessingConfiguration均可建立关联,选择哪种方式取决于是否需要同时创建Firehose交付流。

配置完成后,执行sls deploy即可完成部署。

内容的提问来源于stack exchange,提问作者Kate B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 10:17:19