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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:05:26