首页 > 解决方案 > amazonmq 调用 aws lambda

问题描述

AWS CloudWatch Events 触发轮询队列消息的 Lambda 函数。然后将消息发送到第二个 Lambda 函数,该函数将消息写入 Kinesis 代理。

我找到了这篇文章的解决方案,但用 node.js 编写。但我正在寻找 Python 脚本。您能否帮我获得一篇文章,我可以在其中找到自己转换的方法。

https://github.com/aws-samples/amazonmq-invoke-aws-lambda

const stomp = require('stompit')
const AWS = require('aws-sdk')

let lambda = new AWS.Lambda()

const QUEUE_NAME = process.env.QUEUE_NAME
const CONNECTION_OPTIONS = {
    host: process.env.HOST,
    port: 61614,
    ssl: true,
    connectHeaders: {
        login: process.env.LOGIN,
        passcode: process.env.PASSWORD
    }
}

exports.handler = (event, context, callback) => {
  var client

  /* */
  const onError = (error) => {
    console.error(`[ERROR] ${error}`)
    callback(error)
  }

  /* */
  const onMessage = (error, message) => {
    console.log('Message received')

    message.readString('utf-8', (error, body) => {
      if (error) {
        onError(error)
        return
      }

      let payload = {
        message: body,
        timestamp: Date.now()
      }

      console.log(payload)

      let params = {
        FunctionName: process.env.WORKER_FUNCTION,
        Payload: JSON.stringify(payload)
      }

      lambda.invoke(params, (error, data) => {
        if (error) {
          console.error(`Could not invoke Lambda: ${error}`)
        }
      })
    })
  }

  /* Main */
  stomp.connect(CONNECTION_OPTIONS, (error, client) => {
    if (error) {
      onError(error)
      return
    }

    var headers = {
      destination: `/queue/${QUEUE_NAME}`,
      ack: 'auto'
    }

    client.subscribe(headers, onMessage)

    setTimeout(() => {
      client.disconnect()
      callback(null, { 'message': 'Finished' })
    }, context.getRemainingTimeInMillis() - 1000)

  })

}

标签: pythonnode.jspython-3.xpython-2.7

解决方案


你没有说清楚你想要达到什么目标,你走了多远,你面临什么问题。

您可以按照SO 指南改进您的问题。

在 python(3) 中与 AWS 服务交互的库是boto3


推荐阅读