in lib/constructs/backup.ts [11:71]
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
// create service role by myself
const backupRole = new iam.Role(scope, "game-studio-backup-role", {
assumedBy: new ServicePrincipal("backup.amazonaws.com"),
});
backupRole.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName("AWSBackupOperatorAccess")
);
backupRole.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName(
"service-role/AWSBackupServiceRolePolicyForBackup"
)
);
const valutKey = new kms.Key(scope, "ValutDefaultKey", {
enableKeyRotation: true,
alias: "backup/default",
});
const valut = new backup.CfnBackupVault(scope, "game-studio-backup-vault", {
backupVaultName: "game-studio-backup-vault",
encryptionKeyArn: valutKey.keyArn,
});
const backupPlan = new backup.CfnBackupPlan(
scope,
"game-studio-ebs-backup",
{
backupPlan: {
backupPlanName: "game-studio-ebs-backup",
backupPlanRule: [
{
ruleName: "daily-10days-retention",
targetBackupVault: valut.backupVaultName,
scheduleExpression: "cron(0 12 * * ? *)",
lifecycle: {
deleteAfterDays: 10,
},
},
],
},
}
);
backupPlan.addDependsOn(valut);
new backup.CfnBackupSelection(scope, "game-studio-ebs-backup-selection", {
backupSelection: {
iamRoleArn: backupRole.roleArn,
selectionName: "ebs-by-tag",
listOfTags: [
{
conditionType: "STRINGEQUALS",
conditionKey: this.BackupTagKey,
conditionValue: this.BackupTagValue,
},
],
},
backupPlanId: backupPlan.attrBackupPlanId,
});
}