AWS Lambda接收AmazonMQ RabbitMQ消息[AWS Lambda教程-AWS SAM系列]

719 阅读3分钟

AWS Lambda可以和多种数据源做集成,几乎全部的AWS托管服务都可以方便的触发Lambda的运行,详情请看Using AWS Lambda with other services。一般就海外用户而言在AWS上用MQ触发Lambda运行的场景以AWS SQS占绝大多数,但是在中国国内我们喜欢使用Kafka、RabbitMQ、ActiveMQ等开源MQ,这时我们也可以方便的让AWS Lambda和上述的3种开源的MQ集成。其中Amazon MQ是AWS托管的MQ产品,能支持RabbitMQ和ActiveMQ。本文以Amazon MQ中的RabbitMQ为例,介绍Amazon MQ和AWS Lambda的集成。

AmazonMQ和AWS Lambda的集成,我们需要仔细的了解网络配置,在本文中我的Lamdba和RabbiMQ都放在私有子网里面,并为私有子网设置了NAT网关,允许它们通过NAT访问互联网

创建AmazonMQ RabbitMQ

提前在AWS Secrets Manager中保存RabbitMQ访问密码

这里我们直接设置username和password的值,方便后续lambda和RabbitMQ的集成有权限。 截屏2023-11-25 21.38.32.png

创建AmazonMQ RabbitMQ

在AmazonMQ控制台选择RabbitMQ。 截屏2023-11-25 21.30.04.png 只是测试使用,我们可以选择单节点即可,生产环境建议选择集群模式,提示MQ整体的性能和可用性。 截屏2023-11-25 21.30.38.png 我们可以自由选择RabbitMQ的实例的规格和账户密码,账户密码需要和前面保存在AWS Secrets Manager中的一致。 截屏2023-11-25 21.48.22.png 这里我们设置RabbitMQ的可访问性,对AWS Lambda而言RabbitMQ的private和public模式都可以正常的触发Lambda的运行。这里为了方便我们可以选择public,这样我们可以直接访问RabbitMQ的控制台。 截屏2023-11-25 21.50.12.png 创建后我们需要等一段时间直到RabbitMQ就绪 ... 截屏2023-11-25 21.59.49.png RabbitMQ就绪后我们就可以继续和AWS Lambda集成了 截屏2023-11-25 22.00.59.png 我们登陆RabbitMQ的控制台,并创建一个queue来接收消息并触发Lambda运行,名称我自己设置为lambda-poc-queue 截屏2023-11-25 22.15.00.png

集成AWS Lambda和RabbitMQ

我们需要提前找到RabbitMQ的ARN 截屏2023-11-25 22.20.03.png 我们需要提前找到AWS Secrets Manager的ARN 截屏2023-11-25 22.19.12.png

然后我们在AWS SAM中设置好事件触发源,这里我们可以填入前面知道的RabbitMQ ARN、AWS Secrets Manager ARN和Queue名称 截屏2023-11-25 22.16.32.png 最后我们直接发布即可,发布成功后会看到Lambda的触发源中,RabbitMQ的state: EnabledActivate trigger: Yes,这时说明RabbitMQ和lambda的集成已经成功了。 截屏2023-11-25 22.12.39.png

测试

我们可以直接在RabbitMQ中发送文字消息 截屏2023-11-25 22.30.01.png 等待片刻会发现这个消息触发了Lambda执行,Lamdba接收到了消息内容并运行了。其中data内容看起来是乱码了,实际上没问题,MQ传过来的内容是Base64编码后的,使用的时候Base64解码即可。 截屏2023-11-25 22.34.52.png

到这里全部的开发就完成了,详细的代码请看amazon-mq-rabbitmq-demo

参考