amazonmq调用aws lambda

时间:2018-11-16 09:41:18

标签: python node.js python-3.x python-2.7

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)

  })

}

1 个答案:

答案 0 :(得分:0)

您不清楚要达到的目标,达到的目标以及所面临的问题。

您可以按照the SO guidelines来改善问题。

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