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

Lesedauer: 7 Minute
0

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 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 Wartungs-Updates für die Hardware, das zugrunde liegende Betriebssystem oder die Version des Datenbankmoduls nicht ins Hintertreffen gerät.

Um Ihre RDS-Instance länger als sieben Tage anzuhalten, ohne die erforderlichen Wartungs-Updates zu verpassen, führen Sie die folgenden Schritte aus:

1.    Richten Sie die AWS Identity Access Management (IAM)-Berechtigungen 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 einer IAM-Rolle und Hinzufügen der erforderlichen Richtlinien im Anschluss

1.    Öffnen Sie die IAM-Konsole.

2.    Wählen Sie im Navigationsbereich Rollen aus.

3.    Wählen Sie Rolle erstellen aus.

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 aus.

7.    Geben Sie für Filterrichtlinien den Namen der Richtlinie ein, die Sie im vorherigen Abschnitt erstellt haben. Nachdem sie angezeigt wird, wählen Sie die Richtlinie aus. Geben Sie für Filter-policies****AWSLambdaBasicExecutionRole ein. Wenn sie angezeigt wird, wählen Sie die verwaltete Richtlinie AWSLambdaBasicExecutionRole 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 aus.

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 aus.

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

Tags 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-Taste****Autostart ein. Geben Sie für Wert****ja ein. Wählen Sie Hinzufügen, um Ihre Änderungen zu speichern.

6.    Wählen Sie erneut Hinzufügen. Geben Sie für Tag-Taste****Autostop ein. Geben Sie für Wert****ja 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.    Behalten Sie für Architektur die Standardauswahl von x86_64 bei.

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 den folgenden Code 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'):
            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']))
            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 Minute****0 aus. Wählen Sie für Sekunde****10 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, lesen Sie den vorherigen Abschnitt Erstellen einer Lambda-Funktion, um die getaggten DB-Instances mit der folgenden Änderung zu starten: Folgen Sie den gleichen Schritten, verwenden Sie jedoch einen anderen Code für Schritt 12.

Löschen Sie im Quellcode-Editor den Beispielcode und fügen Sie den folgenden Code 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'):
            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']))
            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

Führen Sie für markierte DB-Instances, die sich im Status gestoppt befinden, die folgenden Schritte aus, um einen Funktionstest 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

Sie können Regeln erstellen, um einen Zeitplan einzurichten. Wenn Ihr wöchentliches Wartungsfenster für die markierten DB-Instances beispielsweise Sonntag von 22:00 bis 22:30 Uhr ist, können Sie die folgenden Regeln erstellen:

  • DB-Instance automatisch 30 Minuten vor Beginn des Wartungsfensters starten
  • DB-Instance automatisch 30 Minuten nach Ende des Wartungsfensters stoppen

Um die Regel zum automatischen Starten der DB-Instance 30 Minuten vor dem Wartungsfenster zu erstellen, führen Sie die folgenden Schritte aus:

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übersicht Auslöser 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 *)).


Ähnliche Informationen

Implementierung eines DB-Instance-Stopps und -Starts in Amazon RDS

Stoppen einer automatisch gestarteten Datenbankinstance mit Amazon RDS

Wie kann ich einen Amazon-Aurora-Cluster für länger als sieben Tage stoppen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten