AWS 备份构造库
AWS CDK v1在2023-06-01上达到了支持结束. 此软件包不再更新,用户应该迁移到 AWS CDK v2.
关于如何移徙的更多信息,请参见: 移动到 AWS CDK v2 指南。 。 。 .
AWS 备份是一个完全管理的备份服务,它容易集中和自动化 将数据备份到云层和房地的AWS服务。 使用 AWS 备份,可以 为您的 AWS 资源配置备份政策和监视备份活动.
备份计划和选择
在 AWS 备份中, a 备用计划 用于定义何时以及如何备份的政策表达式 您的 AWS 资源, 如 Amazon DynamoDB 表格或 Amazon 弹性文件系统文件 系统。 您可以为备份计划指派资源, AWS 备份会自动备份并保留 根据备份计划提供这些资源的备份。 您可以创建多个备份计划, 如果您 有不同备份需求的工作量.
本模块提供现成的备份计划(类似于控制台的经验):
// Daily, weekly and monthly with 5 year retention
const plan = backup.BackupPlan.dailyWeeklyMonthly5YearRetention(this, 'Plan');
将资源分配给一个计划,可以用 addSelection()数字 :
declare const plan: backup.BackupPlan;
const myTable = dynamodb.Table.fromTableName(this, 'Table', 'myTableName');
const myCoolConstruct = new Construct(this, 'MyCoolConstruct');
plan.addSelection('Selection', {
resources: [
backup.BackupResource.fromDynamoDbTable(myTable), // A DynamoDB table
backup.BackupResource.fromTag('stage', 'prod'), // All resources that are tagged stage=prod in the region/account
backup.BackupResource.fromConstruct(myCoolConstruct), // All backupable resources in `myCoolConstruct`
]
})
如果没有具体说明,将设立一个新的IAM角色,并有管理下的备份政策
为选择创建。 这个 BackupSelection 执行 IGrantable。 。 。 .
在计划中添加规则,使用 addRule()数字 :
declare const plan: backup.BackupPlan;
plan.addRule(new backup.BackupPlanRule({
completionWindow: Duration.hours(2),
startWindow: Duration.hours(1),
scheduleExpression: events.Schedule.cron({ // Only cron expressions are supported
day: '15',
hour: '3',
minute: '30',
}),
moveToColdStorageAfter: Duration.days(30),
}));
可配置连续备份和点入时间恢复(PITR).
财产 deleteAfter 定义备份的保留期。 如果启用了 PITR, 则必须使用 .
如果没有指定价值,留存期被确定为35天,这是PITR支持的最大留存期.
财产 moveToColdStorageAfter 不可指定,因为 PITR 不支持此选项.
这个例子定义了 AWS 备份规则与 PITR 和保留期设定为 14 天 :
declare const plan: backup.BackupPlan;
plan.addRule(new backup.BackupPlanRule({
enableContinuousBackup: true,
deleteAfter: Duration.days(14),
}));
现成的规则也有:
declare const plan: backup.BackupPlan;
plan.addRule(backup.BackupPlanRule.daily());
plan.addRule(backup.BackupPlanRule.weekly());
默认新建 保险库 在创建计划时创建. 也可以在计划一级或 规则级别.
const myVault = backup.BackupVault.fromBackupVaultName(this, 'Vault1', 'myVault');
const otherVault = backup.BackupVault.fromBackupVaultName(this, 'Vault2', 'otherVault');
const plan = backup.BackupPlan.daily35DayRetention(this, 'Plan', myVault); // Use `myVault` for all plan rules
plan.addRule(backup.BackupPlanRule.monthly1Year(otherVault)); // Use `otherVault` for this specific rule
你们可以 备份
VSS 启用的 Windows 应用程序通过设置运行在 Amazon EC2 实例上 windowsVss
参数改为 true如果应用程序在 Windows VSS 中注册了 VSS 写入器,
然后 AWS 备份创建了该应用程序的相容快照 .
const plan = new backup.BackupPlan(this, 'Plan', {
windowsVss: true,
});
备份金库
在 AWS 备份中, a 备份金库 是您组织备份的容器。 您可以使用备份 设置用于加密备份的 AWS 密钥管理服务( AWS KMS) 加密密钥的金库 在备用金库中,并控制对备用金库中备用金的访问。 如果你要求不同的话 为不同的备份组加密密钥或访问策略, 您可以选择创建多个 备用金库.
const myKey = kms.Key.fromKeyArn(this, 'MyKey', 'aaa');
const myTopic = sns.Topic.fromTopicArn(this, 'MyTopic', 'bbb');
const vault = new backup.BackupVault(this, 'Vault', {
encryptionKey: myKey, // Custom encryption key
notificationTopic: myTopic, // Send all vault events to this SNS topic
});
保险库有默认值 RemovalPolicy 设置为 RETAIN。请注意,移除一个金库
包含回收点的回收点将失败.
您可以为备份金库和其中包含的资源分配策略 。 指定政策允许 ,但限制 他们有能力在创建后删除恢复点.
使用 accessPolicy 属性以创建备份金库策略 :
const vault = new backup.BackupVault(this, 'Vault', {
accessPolicy: new iam.PolicyDocument({
statements: [
new iam.PolicyStatement({
effect: iam.Effect.DENY,
principals: [new iam.AnyPrincipal()],
actions: ['backup:DeleteRecoveryPoint'],
resources: ['*'],
conditions: {
StringNotLike: {
'aws:userId': [
'user1',
'user2',
],
},
},
}),
],
}),
})
可使用 addToAccessPolicy()。 。 。 .
使用 blockRecoveryPointDeletion 属性或 blockRecoveryPointDeletion() 添加方法
用于防止在您的金库中删除回收点的金库访问策略的语句 :
new backup.BackupVault(this, 'Vault', {
blockRecoveryPointDeletion: true,
});
declare const backupVault: backup.BackupVault;
backupVault.blockRecoveryPointDeletion();
默认访问不受限制.
导入已存在的备份金库
要将已有的备份金库导入您的 CDK 应用程序, 请使用 BackupVault.fromBackupVaultArn 或者说 BackupVault.fromBackupVaultName
静态方法。 以下是给予IAM角色权限启动备份任务的例子:
const importedVault = backup.BackupVault.fromBackupVaultName(this, 'Vault', 'myVaultName');
const role = new iam.Role(this, 'Access Role', { assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com') });
importedVault.grant(role, 'backup:StartBackupJob');