如何通过AWS工具实现Aurora PostgreSQL集群新建数据库的SNS告警?
实现Aurora PostgreSQL新建数据库的SNS告警方案
方案一:PostgreSQL事件触发器 + Lambda + SNS
通过PostgreSQL原生事件触发器捕捉CREATE DATABASE操作,调用Lambda函数发送SNS通知,具备精准性和实时性。
步骤1:在Aurora PostgreSQL中创建事件触发器
首先确认集群已启用pg_lambda扩展(Aurora PostgreSQL原生支持),执行以下SQL:
-- 创建捕捉数据库创建事件的函数 CREATE OR REPLACE FUNCTION capture_db_creation() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE rec RECORD; payload JSON; BEGIN FOR rec IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP IF rec.command_tag = 'CREATE DATABASE' THEN -- 构造包含关键信息的JSON payload payload := json_build_object( 'database_name', rec.object_identity, 'creation_time', now()::text, 'created_by', current_user, 'cluster_endpoint', inet_server_addr()::text ); -- 调用指定的Lambda函数 PERFORM lambda.invoke( 'arn:aws:lambda:你的AWS区域:你的账号ID:function:你的Lambda函数名', payload::text ); END IF; END LOOP; END; $$; -- 创建绑定到DDL事件的触发器 CREATE EVENT TRIGGER track_db_creation ON ddl_command_end WHEN TAG IN ('CREATE DATABASE') EXECUTE FUNCTION capture_db_creation();
注意:执行该SQL的数据库角色需要SUPERUSER权限,同时需确保Aurora的IAM角色拥有调用目标Lambda的权限。
步骤2:创建Lambda函数处理告警
编写Lambda函数接收PostgreSQL传来的事件,调用SNS发送通知,示例Python代码:
import boto3 import json sns_client = boto3.client('sns') SNS_TOPIC_ARN = 'arn:aws:sns:你的AWS区域:你的账号ID:你的SNS主题名' def lambda_handler(event, context): db_event = json.loads(event['Payload']) # 格式化告警消息 alert_message = ( f"⚠️ 检测到Aurora PostgreSQL新数据库创建\n" f"数据库名称: {db_event['database_name']}\n" f"创建时间: {db_event['creation_time']}\n" f"创建用户: {db_event['created_by']}\n" f"集群端点: {db_event['cluster_endpoint']}" ) # 发送SNS通知 sns_client.publish( TopicArn=SNS_TOPIC_ARN, Message=alert_message, Subject='Aurora PostgreSQL 新数据库创建告警' ) return {'statusCode': 200, 'body': '告警已发送'}
给Lambda配置权限:添加AmazonSNSFullAccess(或更精细的发布权限),同时允许Aurora的IAM角色调用该Lambda。
步骤3:配置SNS主题和订阅
在SNS控制台创建主题,添加订阅(如邮件、短信、企业微信机器人等),确保接收端能及时收到告警。
方案二:CloudWatch日志过滤 + CloudWatch Events + SNS
无需修改数据库配置,通过监控PostgreSQL日志实现告警,适合不想改动数据库的场景。
步骤1:开启Aurora日志导出到CloudWatch
在Aurora集群控制台的「日志导出」设置中,开启postgresql.log导出到指定的CloudWatch Log组。
步骤2:创建CloudWatch日志过滤规则
进入目标CloudWatch Log组,创建过滤模式匹配CREATE DATABASE操作:
[timestamp, user, db, pid, conn_id, sess_id, severity, sql_state, msg] ?msg = '*CREATE DATABASE*'
根据Aurora日志格式调整过滤规则,确保能精准匹配创建数据库的日志条目。
步骤3:创建CloudWatch Events规则触发SNS
- 新建CloudWatch Events规则,选择「CloudWatch Logs」作为触发器,关联上述过滤规则。
- 目标选择SNS主题,可配置消息转换,将日志内容格式化为易读的告警消息。
方案对比
- 方案一:实时性高,能获取创建者、时间等精准信息,但需要修改数据库配置,依赖
pg_lambda扩展。 - 方案二:无需改动数据库,配置简单,但日志可能有延迟,若日志格式变化可能出现漏报。
内容的提问来源于stack exchange,提问作者P_Ar
相关产品推荐
相关产品推荐

