Automatische Backups eurer AWS Ressourcen mit AWS Backup

February 26, 2020

Was sind die besten Backups? Richtig, jene die automatisch auf konsistente Weise ausgeführt und jedes Mal auf zuverlässige Weise wiederhergestellt werden können.

AWS Backup ist ein relativ neuer Dienst, der das Problem konsistenter Sicherungen und Wiederherstellungen angeht. Für eine allgemeine Einführung empfehlen wir euch, den Cloudonaut-Test für AWS Backup zu lesen.

In diesem Beitrag geben wir euch einen Überblick über die Automatisierung von Backups durch Kombination von AWS Backup und AWS CloudFormation.

Lasst uns zunächst einen kurzen Blick auf die AWS Backup-Terminologie werfen:

  • Ein “Backup Vault” ist ein Speichercontainer für Backups.
  • Ein “Backup Plan” ist der Planer für Sicherungen. Ihr könnt in einer Cron-ähnlichen Syntax angeben, wann Sicherungen durchgeführt werden sollen. Der Backup Plan ist an einen Backup Vault angehängt.
  • Ein “Resource assignment” oder “Backup selection” definiert, welche Ressourcen gesichert werden sollen. Derzeit ist die Auswahl von Ressourcen nach Tags oder nach Ressourcen-ARN möglich. Die Backup selection ist an einen Backup Plan angehängt.
  • Ein “Recovery Point” ist eine Momentaufnahme / Sicherung einer von AWS Backup gesicherten Ressource. Ein solcher Wiederherstellungspunkt kann mit AWS Backup wiederhergestellt werden.

Und wisst ihr, was wirklich cool ist? AWS Backup kann mithilfe von AWS CloudFormation vollständig automatisiert werden. In diesem Beispiel zeigen wir euch, wie ihr alle derzeit und zukünftig von AWS Backup unterstützten Ressourcentypen (EBS, RDS, DynamoDB, EFS, EC2) sichert, die mit dem Tag-Paar BackupMe / daily getagged sind:

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  BackupRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: SampleBackupRole
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - backup.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup
  BackupVault:
    Type: AWS::Backup::BackupVault
    Properties:
      BackupVaultName: SampleBackupVault

  BackupPlan:
    Type: AWS::Backup::BackupPlan
    Properties:
      BackupPlan:
        BackupPlanName: SampleBackupVault
        BackupPlanRule:
          - RuleName: RuleForDailyBackups
            TargetBackupVault: !Ref BackupVault
            ScheduleExpression: cron(0 5 ? * * *)

  BackupSelection:
    Type: AWS::Backup::BackupSelection
    Properties:
      BackupSelection:
        SelectionName: SampleBackupSelection
        IamRoleArn: !GetAtt BackupRole.Arn
        ListOfTags:
          - ConditionType: STRINGEQUALS
            ConditionKey: BackupMe
            ConditionValue: daily
      BackupPlanId: !Ref BackupPlan

Dieses Beispiel besteht aus vier CloudFormation-Ressourcen:

  • Eine IAM-Rolle: AWS Backup benötigt eine Servicerolle, um seine Arbeit in eurem AWS-Konto ausführen zu können. Es verwendet eine von AWS verwaltete IAM-Policy, um die hier zu erledigende Arbeit zu minimieren.
  • Ein grundlegender Vault BackupVault ist der Container für die Backups.
  • Ein Backup Plan, der AWS Backup anweist, täglich um fünf Uhr morgens Ressourcen zu sichern. Die von AWS Backup verwendete Syntax ist dieselbe wie bei CloudWatch Events
  • Eine Backup selection, die nach Ressourcen sucht, die mit BackupMe / daily getaggt sind.

Nach dem Provisionieren über CloudFormation erstellt AWS Backup tägliche Sicherungen von (unterstützten) Ressourcen, die mit BackupMe / daily getaggt sind - in diesem Beispiel eine DynamoDB-Tabelle:

Automatisierte Sicherungen einer DynamoDB-Beispieltabelle

Das war’s schon! Ihr könnt ganz einfach weitere Backup-Selections und -pläne für eure Workloads und Szenarien hinzufügen.

PS: Es wird derzeit nicht unterstützt, ALLE Ressourcen eines bestimmten Typs zu sichern, da AWS Backup ARNs in der Backup selection nicht zulässt, selbst wenn dies in der Dokumentation in CloudFormation angegeben ist.

PPS: AWS Backup unterstützt derzeit noch keine Backups über AWS-Konten hinweg, von Off-Site-Backups ganz zu schweigen. Die Backups verbleiben derzeit im selben AWS-Konto wie die Quelle. Daher solltet ihr die Backups zumindest über sogenannte Preventive Guardrails (Service Control Policies) schützen. Wie das geht, zeigen wir euch in einem folgenden Blogbeitrag.

photo of Sönke

Sönke is Co-founder Senior Cloud Consultant at superluminar, AWS Partner Ambassador, AWS Community Builder, and AWS Certified Solutions Architect Professional, as well as AWS Certified DevOps Engineer Professional. He writes here primarily about his favourite topics: Professional AWS setups and software development. He can be found under the handle @s0enke on Twitter.