boto3 在 SNS 中发布消息

boto3 publish message in SNS

我想 运行 一个脚本来向我的 sns 主题发布消息。我按照文档进行操作,我的代码是这样的:

import boto3

client = boto3.client('sns')

response = client.publish(
    TopicArn='my topic arn',    
    Message='ptt message '
)
print("Response: {}".format(response))

它打印响应 json,但我在我的 AWS SNS 控制台中没有看到任何消息。我有一个 lambda 函数,作为这个 sns 的订阅者,它是非常基本的。

lambda 代码:

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
         'body': json.dumps('Hello from Lambda!') 
    }

如何确定我的消息 "ptt message" 已成功发布?我该如何检查?

为了测试集成,您可以为 SNS 主题配置传递状态日志记录。 SNS 的 GUI 中对此有一个简单的设置。这会将您的订阅触发器的日志导出到 CloudWatch。

其次,你的 Lambda 没有对事件做任何事情,所以你的 "ptt message stays in the "event" 字典。例如,你可以记录你的事件并查看实际消息正文所在的结构。

import logging

def lambda_handler(event, context):
    logging.info(event)
    ...

为了简单地查看 Lambda 是由订阅触发的,您可以打开 CloudWatch Logs,找到 AWS 为您的 Lambda 自动创建的 LogGroup(其中包含函数名称)并搜索 Log Group . "last X minutes" 提供舒适的过滤器。

为了测试此集成,如果感觉比 运行 脚本更方便,您还可以从 Web 界面向 SNS 主题发布测试消息。