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

如何通过Lambda响应AWS S3 Put事件并向MQTT主题发布消息

实现Lambda向AWS IoT主题发布MQTT消息及后续移动端推送思路

嗨,恭喜你已经搞定了S3触发Lambda的核心配置!既然调用次数正常,那接下来就聚焦怎么让Lambda给IoT主题发消息,以及后续的移动端推送方案,咱一步步来:

第一步:给Lambda角色添加上IoT发布权限

Lambda要调用AWS IoT的API,得先拿到权限才行。你需要给当前Lambda使用的IAM角色添加一条自定义权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:Publish",
            "Resource": "arn:aws:iot:你的区域:你的AWS账号ID:topic/你的目标主题名"
        }
    ]
}

比如你的主题是s3-upload-notify,区域是us-east-1,就把对应的地方替换掉就行。

第二步:编写Lambda代码发布MQTT消息

以Python为例(新手友好),用AWS的boto3 SDK就能轻松实现。下面是完整的示例代码:

import boto3
import json

# 初始化IoT客户端,注意要和你的IoT Core区域一致
iot_client = boto3.client('iot-data', region_name='你的区域')
TARGET_TOPIC = '你的目标主题名'  # 比如"s3-upload-notify"

def lambda_handler(event, context):
    # 从S3事件里提取上传的对象信息(可选,用来丰富消息内容)
    s3_info = event['Records'][0]['s3']
    bucket_name = s3_info['bucket']['name']
    object_key = s3_info['object']['key']
    
    # 构造要发送的消息内容
    message = {
        "type": "s3_upload",
        "bucket": bucket_name,
        "object": object_key,
        "timestamp": context.get_remaining_time_in_millis()
    }
    
    # 发布消息到IoT主题
    try:
        response = iot_client.publish(
            topic=TARGET_TOPIC,
            qos=1,  # QoS级别,1确保消息至少送达一次
            payload=json.dumps(message)
        )
        print(f"消息发布成功,响应: {response}")
        return {
            'statusCode': 200,
            'body': json.dumps('消息已发布到IoT主题')
        }
    except Exception as e:
        print(f"发布失败: {str(e)}")
        raise e

代码里已经加了注释,你只需要替换区域和主题名就行。如果用Node.js的话,思路类似,用AWS SDK的IoTDataPlane客户端调用publish方法。

第三步:在IoT控制台验证消息

  1. 打开AWS IoT控制台,进入测试页面
  2. 在订阅主题里输入你的目标主题名,点击“订阅”
  3. 上传一个文件到触发Lambda的S3桶
  4. 很快就能在控制台的消息面板看到Lambda发送过来的消息啦!

后续:实现移动端推送的思路

当你搞定IoT消息发布后,要推送到iOS/Android应用可以用两种方式:

  • 方案一:IoT规则引擎+SNS
    1. 在IoT控制台创建规则,筛选你发布的s3_upload类型消息
    2. 把规则的动作设置为转发到Amazon SNS主题
    3. 在SNS里分别配置APNs(iOS)和FCM(Android)的平台应用,把设备令牌订阅到SNS主题,这样有消息时就会自动推送到移动端
  • 方案二:Lambda直接调用SNS
    如果你不想用IoT规则,也可以在Lambda里同时调用IoT和SNS的API,直接把消息推送给移动端。不过规则引擎更灵活,能做消息过滤、转换等操作,推荐优先考虑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:43:27