如何将app仓库的Table添加至infra仓库的BackupPlan?
解决AWS CDK跨仓库将DynamoDB表添加到现有备份计划的问题
核心原因
通过BackupPlan.fromBackupPlanId导入的是只读的IBackupPlan接口实例,该接口仅用于引用已存在的备份计划,不提供addSelection这类修改方法。要实现将表加入备份计划,需通过创建独立的BackupSelection资源来关联。
解决方案1:修改infra仓库导出备份计划ARN(推荐)
在infra仓库中,除了导出备份计划ID,额外导出其ARN(创建BackupSelection需要ARN):
// infra仓库代码 import { BackupPlan, CfnOutput } from 'aws-cdk-lib/aws-backup'; const backupPlan = new BackupPlan(this, 'backup-plan', {/*...*/}); // 导出备份计划ARN new CfnOutput(this, `backupPlanArnOutput`, { value: backupPlan.backupPlanArn, exportName:`backupPlanArn`, });
在app仓库中,导入ARN并创建BackupSelection关联你的DynamoDB表:
// app仓库代码 import { BackupSelection, BackupPlan } from 'aws-cdk-lib/aws-backup'; import { Fn } from 'aws-cdk-lib'; import { Table } from 'aws-cdk-lib/aws-dynamodb'; const myTable = new Table(this, 'my-table', { /* ... */ }); // 通过ARN导入备份计划 const backupPlan = BackupPlan.fromBackupPlanArn(this, 'imported-backup-plan', Fn.importValue('backupPlanArn')); // 创建备份选择器,将表加入备份计划 new BackupSelection(this, 'table-backup-selection', { backupPlan: backupPlan, resources: [ BackupSelection.dynamoDbTable(myTable) ], selectionName: 'MyTableBackupSelection' // 可选:自定义选择器名称 });
解决方案2:通过ID拼接ARN(无需修改infra仓库)
如果无法修改infra仓库的输出,可以利用AWS备份计划ARN的固定格式,通过导入的ID拼接出ARN:
ARN格式:arn:aws:backup:${region}:${account-id}:backup-plan/${backup-plan-id}
// app仓库代码 import { BackupSelection, BackupPlan } from 'aws-cdk-lib/aws-backup'; import { Fn, Stack } from 'aws-cdk-lib'; import { Table } from 'aws-cdk-lib/aws-dynamodb'; const myTable = new Table(this, 'my-table', { /* ... */ }); const currentStack = Stack.of(this); // 拼接备份计划ARN const backupPlanId = Fn.importValue('backupPlan'); const backupPlanArn = `arn:aws:backup:${currentStack.region}:${currentStack.account}:backup-plan/${backupPlanId}`; // 通过ARN导入备份计划并创建选择器 const backupPlan = BackupPlan.fromBackupPlanArn(this, 'imported-backup-plan', backupPlanArn); new BackupSelection(this, 'table-backup-selection', { backupPlan: backupPlan, resources: [BackupSelection.dynamoDbTable(myTable)] });
内容的提问来源于stack exchange,提问作者Isaac
相关产品推荐
相关产品推荐

