AWS Backup完成Aurora RDS集群备份后如何获取集群ID
实现方案
方案1:直接从AWS Backup事件结构解析集群ID
你之前在EventBridge排查时漏了事件顶层的resources字段——AWS Backup的作业完成事件不会直接在detail块里放明文集群ID,被备份资源的唯一标识存在事件顶层的resources数组中。
SNS触发Lambda时,事件体封装在Records[0].Sns.Message字段中,是JSON格式字符串,反序列化后提取resources[0]即可拿到Aurora集群的完整ARN,Aurora集群ARN固定格式为arn:aws:rds:<区域>:<账号ID>:cluster:<集群ID>,按冒号分割取最后一段就是目标集群ID,参考处理代码:
import json import boto3 rds_client = boto3.client('rds') def lambda_handler(event, context): # 解析SNS推送的消息体 backup_event = json.loads(event['Records'][0]['Sns']['Message']) # 提取被备份资源ARN cluster_arn = backup_event['resources'][0] # 解析集群ID cluster_id = cluster_arn.split(':')[-1] # 后续可直接调用RDS接口查询集群详情 cluster_info = rds_client.describe_db_clusters(DBClusterIdentifier=cluster_id) return cluster_info
方案2:通过备份作业ID反查资源信息(容错率更高)
如果担心事件结构变动导致解析失败,可以用事件detail块中自带的jobId字段(即本次备份作业的唯一ID),调用AWS Backup的DescribeBackupJob接口获取资源信息:
- Lambda执行角色需要提前附加
backup:DescribeBackupJob权限 - 接口返回结果中的
ResourceArn字段即为Aurora集群ARN,解析后即可拿到集群ID
该方法不依赖事件结构的固定位置,兼容性更强。
无效路径说明
你之前配置的RDS事件订阅无法收到AWS Backup操作通知属于正常现象:RDS事件订阅仅捕获RDS服务原生触发的操作事件,AWS Backup是独立的备份服务,其触发的备份作业不会向RDS事件总线推送对应事件,无需在该方向继续调试。
可选优化链路
如果不想依赖SNS做中转,可以直接配置EventBridge规则匹配AWS Backup作业完成事件:
- 匹配条件:
source=aws.backup、detail.state=COMPLETED、detail.resourceType=Aurora - 规则目标直接绑定Lambda,同时可配置输入转换器提前提取集群ID,简化Lambda侧的处理逻辑
内容的提问来源于stack exchange,提问作者user18890347
相关产品推荐
相关产品推荐

