首页 > 解决方案 > AWS Lambda 监听 kafka 消息

问题描述

我正在尝试将 Lambda 用作 Kafka 消费者,一旦收到新的 Kafka 消息就会被触发。我有一个 .yaml 模板

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  my-service
  Sample SAM Template for my-service
Globals:
  Function:
    Timeout: 3
  Api:
    Cors:
      AllowMethods: "'POST, GET, PUT'"
      AllowHeaders: "'*'"
      AllowOrigin: "'*'"
      AllowCredentials: false

Resources:
  ProcessMSKfunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: .
      Handler: index.handler
      Runtime: nodejs12.x
      MemorySize: 312
      Timeout: 5000
      
      Events:
  MSKEvent:
    Type: MSK
    Properties:
      StartingPosition: LATEST
      Stream: [...]
      Topics:
        - MyTopic
  Policies:
  - AWSLambdaMSKExecutionRole: {}

这个 Lambda 正在执行一个示例处理程序

let response;

exports.handler = async (event) => {
  // Iterate through keys
  for (let key in event.records) {
    console.log('Key: ', key);
    // Iterate through records
    event.records[key].map((record) => {
      console.log('Record: ', record);
      // Decode base64
      const msg = Buffer.from(record.value, 'base64').toString();
      console.log('Message:', msg);
    });
  }
};

但是当我尝试构建,执行 sam build 时,它得到了错误:

"文件 "C:... ...site-packages\samtranslator\sdk\resource.py",第 24 行,在init self.type = resource_dict.get("Type") AttributeError: 'list' object has no attribute '得到'”

有没有人有解决这种错误的方法?

标签: node.jsamazon-web-servicesaws-lambda

解决方案


我将 .yaml 文件更改为使用 Type API 并接受“GET”请求,现在它正在工作。

Events:
        GET:
          Type: Api
          Properties:
            Path: /test
            Method: GET

推荐阅读