Wie kann ich eine Amazon RDS-Instance länger als sieben Tage stoppen?

Letzte Aktualisierung: 18.10.2021

Ich möchte einen Amazon Relational Database Service (Amazon RDS) länger als die Dauer von sieben Tagen beenden.

Kurzbeschreibung

Sie können Ihre Amazon-RDS-Instances einfach innerhalb weniger Minuten starten und stoppen. Diese Funktion unterstützt die Kostenersparnis für Datenbanken, die nicht ständig ausgeführt werden müssen. Sie können eine Datenbank-Instance für bis zu sieben Tage anhalten. Wenn Sie Ihre DB-Instance nach sieben Tagen nicht manuell starten, wird die Instance automatisch gestartet. Dies geschieht, damit die Instance bei erforderlichen Wartungsupdates für die Hardware, das zugrunde liegende Betriebssystem oder die Version des Datenbankmoduls nicht ins Hintertreffen gerät.

Gehen Sie wie folgt vor, um Ihre RDS-Instance länger als sieben Tage anzuhalten, ohne die erforderlichen Wartungsupdates zu verpassen:

  1. Richten Sie die AWS-Identity-Access-Management-Berechtigungen (IAM) ein, damit AWS Lambda Folgendes ausführen kann: Starten Sie die Instance. Stoppen Sie die Instance. Rufen Sie Informationen über die Instance ab.
  2. Fügen Sie Tags für RDS-Instances hinzu, die Sie automatisch starten und stoppen möchten.
  3. Erstellen Sie eine Lambda-Funktion, um die DB-Instance zu starten.
  4. Erstellen Sie eine Lambda-Funktion, um die DB-Instance zu stoppen.
  5. Erstellen Sie einen Zeitplan für Folgendes: Starten Sie eine DB-Instance zu Beginn des wöchentlichen Wartungsfensters. Stoppen Sie eine DB-Instance am Ende des Wartungsfensters.

Auflösung

Konfigurieren von IAM-Berechtigungen

Erstellen Sie eine IAM-Richtlinie, damit Lambda die Instance starten und stoppen und Informationen über die Instance abrufen kann.

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie Richtlinien im Navigationsbereich aus.

3.    Wählen Sie Richtlinie erstellen aus.

4.    Wählen Sie die Registerkarte JSON aus.

5.    Kopieren Sie die folgende Richtlinie und fügen Sie die Richtlinie auf der Registerkarte JSON ein, um die erforderlichen IAM-Berechtigungen zu erteilen:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "rds:StartDBCluster",
                "rds:StopDBCluster",
                "rds:ListTagsForResource",
                "rds:DescribeDBInstances",
                "rds:StopDBInstance",
                "rds:DescribeDBClusters",
                "rds:StartDBInstance"
            ],
            "Resource": "*"
        }
    ]
}

6.    Wählen Sie Weiter: Tags aus.

7.    (Optional) Um ein Tag hinzuzufügen, wählen Sie Tag hinzufügen und geben dann die entsprechenden Werte für die optionalen Felder Schlüsel und Wert ein.

8.    Wählen Sie Weiter: Überprüfung.

9.    Geben Sie auf der Seite Richtlinie überprüfen für Name den Namen für Ihre Richtlinie ein. Lesen Sie den Abschnitt Zusammenfassung, um die Berechtigungen anzuzeigen, die von Ihrer Richtlinie gewährt werden.

10.    Wählen Sie Richtlinie erstellen aus.

Weitere Informationen finden Sie unter Erstellen von Richtlinien auf der Registerkarte JSON.

Erstellen Sie eine IAM-Rolle und fügen Sie dann die erforderlichen Richtlinien hinzu.

  1. Öffnen Sie die IAM-Konsole.
  2. Wählen Sie im Navigationsbereich Rollen aus.
  3. Wählen Sie Rolle erstellen.
  4. Wählen Sie bei Typ der vertrauenswürdigen Entität auswählen AWS-Service aus.
  5. Wählen Sie unter Oder wählen Sie einen Service aus, um seine Anwendungsfälle anzuzeigen, Lambda aus.
  6. Wählen Sie Weiter:Berechtigungen.
  7. Geben Sie für Filterrichtlinien den Namen der im vorherigen Abschnitt erstellten Richtlinie ein. Wenn die von Ihnen erstellte Richtlinie angezeigt wird, wählen Sie die Richtlinie aus. Geben Sie für FilterrichtlinienAWSLambdaBasicExecutionRole ein. Wenn die von Ihnen erstellte verwaltete Richtlinie AWSLambdaBasicExecutionRole angezeigt wird, wählen Sie die Richtlinie aus.
  8. Wählen Sie Weiter: Tags aus.
  9. (Optional) Um ein Tag hinzuzufügen, geben Sie die entsprechenden Werte für die Felder Schlüssel und Wert (optional) ein.
  10. Wählen Sie Weiter: Überprüfung.
  11. Geben Sie auf der Seite Rolle erstellen für Rollenname den Namen für die Rolle ein, die Sie erstellen.
  12. Wählen Sie Rolle erstellen.

Weitere Informationen finden Sie unter Erstellen einer Rolle für einen AWS-Service (Konsole).

Schlagwörter für DB-Instances hinzufügen

  1. Öffnen Sie die Amazon RDS-Konsole.
  2. Wählen Sie im Navigationsbereich Datenbanken aus.
  3. Wählen Sie die DB-Instance aus, die Sie automatisch starten und stoppen möchten.
  4. Scrollen Sie im Abschnitt Details nach unten zum Abschnitt Tags.
  5. Wählen Sie auf der Registerkarte Tags die Option Hinzufügen aus. Geben Sie für Tag-TasteAutostart ein. Geben Sie für Wertja ein. Wählen Sie Hinzufügen, um Ihre Änderungen zu speichern.
  6. Wählen Sie erneut Hinzufügen. Geben Sie für Tag-TasteAutostop ein. Geben Sie für Wertja ein. Wählen Sie Hinzufügen, um Ihre Änderungen zu speichern.

Weitere Informationen finden Sie unter Hinzufügen, Auflisten und Entfernen von Tags.

Erstellen Sie eine Lambda-Funktion, um die getaggten DB-Instances zu starten

1.    Öffnen Sie die Lambda-Konsole.

2.    Wählen Sie Funktionen im Navigationsbereich aus.

3.    Wählen Sie Funktion erstellen.

4.    Wählen Sie Von Grund auf neu verfassen.

5.    Geben Sie für Funktionsname den Namen Ihrer Funktion ein.

6.    Wählen Sie für Laufzeit Python 3.7 aus.

7.    Lassen Sie für Architektur die Standardauswahl von x86_64.

7.    Erweitern Sie Standardausführungsrolle ändern.

8.    Für Ausführungsrolle wählen Sie die Option Vorhandene Rolle verwenden aus.

9.    Wählen Sie für „Vorhandene Rolle“ die IAM-Rolle aus, die Sie zuvor erstellt haben.

10.    Wählen Sie Funktion erstellen.

11.    Wählen Sie die Registerkarte Code.

12.    Löschen Sie im Quellcode-Editor den Beispielcode und fügen Sie Folgendes ein:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Start DB Instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance stopped. Start it if eligible.
        if (db['DBInstanceStatus'] == 'stopped'):
            doNotStart=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostart=yes" is set for instance, start it
                    if(tags['Key'] == 'autostart' and tags['Value'] == 'yes'):
                        result = rds.start_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Starting instance: {0}.".format(db['DBInstanceIdentifier']))
                if(doNotStart == 1):
                    doNotStart=1
            except Exception as e:
                print ("Cannot start instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)
                

if __name__ == "__main__":
    lambda_handler(None, None)

13.    Wählen Sie Datei, wählen Sie Speichern und dann Bereitstellen.

15.    Wählen Sie die Registerkarte Konfiguration, wählen Sie Allgemeine Konfiguration und dann Bearbeiten.

16.    Gehen Sie unter Timeout wie folgt vor: Wählen Sie für Minute0 aus. Wählen Sie für Sekunde10 aus. 17.    Wählen Sie Speichern aus.

Erstellen Sie eine Lambda-Funktion, um die getaggten DB-Instances zu stoppen

Um eine Lambda-Funktion zum Stoppen der getaggten DB-Instances zu erstellen, verwenden Sie die Anweisungen im vorherigen Abschnitt Erstellen einer Lambda-Funktion, um die getaggten DB-Instances mit der folgenden Änderung zu starten:

Löschen Sie im Quellcode-Editor den Beispielcode und fügen Sie Folgendes ein:

import boto3
rds = boto3.client('rds')

def lambda_handler(event, context):

    #Stop DB instances
    dbs = rds.describe_db_instances()
    for db in dbs['DBInstances']:
        #Check if DB instance is not already stopped
        if (db['DBInstanceStatus'] == 'available'):
            DoNotStop=1
            try:
                GetTags=rds.list_tags_for_resource(ResourceName=db['DBInstanceArn'])['TagList']
                for tags in GetTags:
                #if tag "autostop=yes" is set for instance, stop it
                    if(tags['Key'] == 'autostop' and tags['Value'] == 'yes'):
                        result = rds.stop_db_instance(DBInstanceIdentifier=db['DBInstanceIdentifier'])
                        print ("Stopping instance: {0}.".format(db['DBInstanceIdentifier']))
                if(DoNotStop == 1):
                    DoNotStop=1
            except Exception as e:
                print ("Cannot stop instance {0}.".format(db['DBInstanceIdentifier']))
                print(e)
                
if __name__ == "__main__":
    lambda_handler(None, None)

Durchführen von Funktionstests

Angenommen, Ihre getaggten DB-Instances befinden sich im Status Gestoppt. Gehen Sie wie folgt vor, um Funktionstests durchzuführen:

  1. Öffnen Sie die ListeLambda-Funktionen.
  2. Wählen Sie die Funktion aus, die Sie zum Starten der DB-Instances erstellt haben.
  3. Wählen Sie Aktionen und dann Testen.
  4. Geben Sie auf der Registerkarte Test für Name den Namen Ihrer Veranstaltung ein.
  5. Wählen Sie Änderungen speichern und dann Test.

Erstellen Sie den Zeitplan

Angenommen, das wöchentliche Wartungsfenster für die getaggten DB-Instances ist Sonntag 22:00 - 22:30 Uhr. Sie können einen Zeitplan einrichten, indem Sie zwei Regeln für Folgendes erstellen:

  • Starten Sie die DB-Instance automatisch 30 Minuten vor Beginn des Wartungsfensters
  • Stoppen Sie die DB-Instance automatisch 30 Minuten nach Ende des Wartungsfensters

Gehen Sie wie folgt vor, um die Regel zum automatischen Starten der DB-Instance 30 Minuten vor dem Wartungsfenster zu erstellen:

  1. Öffnen Sie die ListeLambda-Funktionen.
  2. Wählen Sie die Funktion aus, die Sie zum Starten der DB-Instances erstellt haben.
  3. Wählen Sie unter FunktionsübersichtTrigger hinzufügen.
  4. Wählen Sie EventBridge (CloudWatch Events) und wählen Sie dann Neue Regel erstellen aus.
  5. Geben Sie für Regelname den Namen der Regel ein, die Sie erstellen möchten.
  6. Fügen Sie für Zeitplanausdruck einen Cron-Ausdruck für den automatisierten Zeitplan hinzu (Beispiel: cron(30 21 ? *SONNE*)).
  7. Wählen Sie Hinzufügen.

Verwenden Sie dieselben Anweisungen, um eine weitere Regel zu erstellen, mit der die DB-Instance 30 Minuten nach dem Wartungsfenster automatisch angehalten werden kann. Achten Sie darauf, den Namen der Regel und den Cron-Ausdruck für den automatisierten Zeitplan entsprechend zu ändern (Beispiel: cron(0023? * SONNE *)).