Wie kann ich eine Lambda-Funktion verwenden, um eine Amazon RDS-Instance für mehr als sieben Tage zu stoppen?

Lesedauer: 7 Minute
0

Ich möchte AWS Lambda verwenden, um einen Amazon Relational Database Service (Amazon RDS) für einen Zeitraum von mehr als sieben Tagen zu beenden.

Kurzbeschreibung

Standardmäßig können Sie eine Amazon RDS-Datenbank-Instanz für bis zu sieben Tage am Stück anhalten. Nach sieben Tagen wird die Instanz neu gestartet, damit sie keine Wartungsupdates verpasst.

Um Ihre Instanz für mehr als sieben Tage anzuhalten, können Sie Schrittfunktionen verwenden, um den Workflow zu automatisieren, ohne ein Wartungsfenster zu verpassen.

**Hinweis:**Eine alternative Lösung finden Sie unter Wie kann ich Schrittfunktionen verwenden, um eine Amazon RDS-Instance für mehr als sieben Tage zu stoppen?

Lösung

IAM-Berechtigungen konfigurieren

Erstellen Sie eine AWS-Richtlinie für Identity and Access Management (IAM), damit Lambda die Instanz starten und beenden und Informationen über die Instanz abrufen kann.

1.Öffnen Sie die IAM-Konsole.

2.Wählen Sie im Navigationsbereich die Option Richtlinien aus.

3.Wählen Sie Richtlinie erstellen aus.

4.Wählen Sie die Registerkarte JSON aus.

  1. Um die erforderlichen IAM-Berechtigungen zu gewähren, geben Sie auf der Registerkarte JSON die folgende Richtlinie ein:
{
    "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.

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

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

  1. Geben Sie auf der Seite Richtlinie überprüfen unter Name den Namen für Ihre Richtlinie ein. Sehen Sie sich den Abschnitt Zusammenfassung an, um zu sehen, welche Berechtigungen Ihnen Ihre Richtlinie gewährt.

10.Wählen Sie Richtlinie erstellen aus.

Weitere Informationen finden Sie unter Richtlinien mit dem JSON-Editor erstellen.

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

  1. Wählen Sie unter Typ der vertrauenswürdigen Instanz auswählen die Option AWS-Service aus.

  2. Wählen Sie unter Oder wählen Sie einen Service aus, um dessen Anwendungsfälle anzuzeigen, die Option Lambda aus.

6.Wählen Sie Weiter: Berechtigungen.

  1. 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 **Filterrichtlinien ** awsLambdaBasicExecutionRole ein. Nachdem sie angezeigt wird, wählen Sie die verwaltete Richtlinie AWSLambdaBasicExecutionRole aus.

8.    Wählen Sie Weiter: Tags.

  1. (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.

  1. Geben Sie auf der Seite Rolle erstellen unter 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).

Fügen Sie Tags für DB-Instances hinzu

1.Öffnen Sie die Amazon RDS-Konsole.

2.Wählen Sie im Navigationsbereich Datenbanken aus.

  1. Wählen Sie die DB-Instance aus, die Sie automatisch starten und beenden möchten.

  2. Scrollen Sie im Detailbereich nach unten zum Abschnitt Tags.

  3. Wählen Sie auf der Registerkarte Tags die Option Hinzufügen aus. Geben Sie alsTag-Schlüssel Autostart ein. Geben Sie für Wert Ja ein. Wählen Sie Hinzufügen, um Ihre Änderungen zu speichern.

  4. Wählen Sie erneut Hinzufügen. Geben Sie als Tag-Schlüssel 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 markierten DB-Instances zu starten

1.Öffnen Sie die Lambda-Konsole.

  1. Wählen Sie im Navigationsbereich Funktionen aus.

  2. Wählen Sie Funktion erstellen.

  3. Wählen Sie Autor von Grund auf aus.

  4. Geben Sie unter Funktionsname den Namen Ihrer Funktion ein.

  5. Wählen Sie für Runtime Python 3.7 aus.

  6. Behalten Sie für Architektur die Standardauswahl x86\ _64 bei.

  7. Erweitern Standardausführungsrolle ändern.

  8. Wählen Sie für die Ausführungsrolle Bestehende Rolle verwenden aus.

  9. Wählen Sie unter Bestehende Rolle die IAM-Rolle aus, die Sie erstellt haben.

  10. Wählen Sie Funktion erstellen.

12.    Wählen Sie die Registerkarte Code.

  1. Löschen Sie im Codequellen-Editor den Beispielcode und geben 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)
  1. Wählen Sie Datei, Speichern und dann Bereitstellen.

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

  3. Füllen Sie unter Timeout die folgenden Felder aus:
    Wählen Sie für min 0 aus.
    Wählen Sie für sec 10 aus.

17.Wählen Sie Speichern aus.

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

Informationen zum Erstellen einer Lambda-Funktion zum Stoppen der markierten DB-Instances finden Sie im vorherigen Abschnitt Erstellen einer Lambda-Funktion zum Starten der markierten DB-Instances. Folgen Sie den gleichen Schritten, verwenden Sie jedoch einen anderen Code für Schritt 12.

Löschen Sie im Codequellen-Editor den Beispielcode und geben 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)

Funktionstests durchführen

Führen Sie für getaggte DB-Instances, die sich im Status Gestoppt befinden, die folgenden Schritte aus, um Funktionstests durchzuführen:

  1. Öffnen Sie die Liste der Lambda-Funktionen.

  2. Wählen Sie die Funktion, die Sie erstellt haben, um die DB-Instances zu starten.

3.Wählen Sie Aktionen und dann Test aus.

  1. Geben Sie auf der Registerkarte Test unter Name den Namen Ihres Ereignisses ein.

  2. Wählen Sie Änderungen speichern und dann Test aus.

Erstellen Sie den Zeitplan

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

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

Gehen Sie wie folgt vor, um die Regel für den automatischen Start der DB-Instance 30 Minuten vor dem Wartungsfenster zu erstellen:

  1. Öffnen Sie die Liste der Lambda-Funktionen.

  2. Wählen Sie die Funktion, die Sie erstellt haben, um die DB-Instances zu starten.

  3. Wählen Sie unter Funktionsübersicht die Option Trigger hinzufügen aus.

  4. Wählen Sie EventBridge (CloudWatch Events) und dann Neue Regel erstellen aus.

  5. Geben Sie unter Regelname den Namen der Regel ein, die Sie erstellen möchten.

  6. Fügen Sie für Zeitplan-Ausdruck einen Cron-Ausdruck für den automatisierten Zeitplan hinzu (Beispiel: cron(30 21 ? * SUN *)).

7.    Wählen Sie Hinzufügen aus.

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

Ähnliche Informationen

Implementierung von Stopp und Start von DB-Instances in Amazon RDS

Stoppen einer automatisch gestarteten Datenbank-Instanz mit Amazon RDS

Wie kann ich einen Amazon Aurora-Cluster für mehr als sieben Tage anhalten?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr