Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.

Einführung

Bei der Referenzierung von RDS-Daten

-Es gibt keinen Datums- und Zeitdump-Job usw. ・ Es gibt keine Lesereplik ・ Für die Anmeldung im kommerziellen Umfeld sind keine Fragen gestellt und eine Genehmigung erforderlich

Aus irgendeinem Grund war es manchmal schwierig, direkt in den Inhalt des RDS zu schauen. Zu diesem Zeitpunkt war es möglich, den Snapshot nach S3 nach Amazon RDS zu exportieren und mit Athena darauf zu verweisen, sodass ich tatsächlich den S3-Export des RDS-Snapshots mit Lambda versuchte.

Gesamtbild

スクリーンショット.png

Exportieren Sie RDS-Snapshots nach S3 in Lambda. Da die exportierten Daten von KMS verschlüsselt werden, muss auch der KMS-Schlüssel vorbereitet werden.

Annahme

-RDS und Snapshots wurden erstellt. -Der Exportziel S3-Bucket wurde erstellt.

Verfahren

1. Erstellen Sie Richtlinien und Rollen, die beim Exportieren von RDS-Snapshots nach S3 verwendet werden sollen

1-1. Richtlinienerstellung

Erstellen Sie eine Richtlinie für den Zugriff auf S3 über die Snapshot-Exportaufgabe mit dem folgenden JSON. (Ressource your-s3-Bucket gibt den S3-Bucket an, in den exportiert werden soll.)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject*",
                "s3:GetObject*",
                "s3:DeleteObject*"
            ],
            "Resource": [
                "arn:aws:s3:::your-s3-bucket",
                "arn:aws:s3:::your-s3-bucket/*"
            ]
        }
    ]
}

1-2. Rollenerstellung

Erstellen Sie eine Rolle und hängen Sie die oben erstellte Richtlinie an. Bearbeiten Sie unter "Vertrauensbeziehung bearbeiten" das Dokument zur Zugriffssteuerungsrichtlinie wie folgt. (Service wird zu "export.rds.amazonaws.com")


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "export.rds.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2. Erstellen eines KMS-Schlüssels

Erstellen Sie einen Schlüssel in KMS, um die exportierten Daten zu verschlüsseln.

  1. Wählen Sie in der Verwaltungskonsole "Vom Kunden verwalteter Schlüssel" in KMS aus.
  2. Zeigen Sie den Erstellungsassistenten mit "Schlüssel erstellen" an.
  3. Schritt 1/5 Schlüsseltyp: Ziel
  4. Schritt 2/5 Alias: Geben Sie den Namen eines beliebigen Schlüssels ein
  5. Schritt 3/5 Schlüsseladministrator: Wählen Sie den Schlüssel und den Benutzer aus, der der Administrator sein soll
  6. Schritt 4/5 Definieren von Schlüsselverwendungsberechtigungen: Hier nicht angegeben
  7. Schritt 5/5 abgeschlossen

3. Erstellen Sie Lambda

3-1. Rolle, Richtlinienerstellung

Erstellen Sie eine Rolle für "AWSLambdaBasicExecutionRole", die gleichzeitig mit dem Erstellen einer Lambda-Funktion erstellt werden kann. Erstellen Sie die folgende Richtlinie, die für den Snapshot-Export separat erforderlich ist, und hängen Sie sie an die oben genannte Rolle an.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "rds:StartExportTask"
            ],
            "Resource": "*"
        }
    ]
}

3-2. Erstellung des Lambda-Codes

pyhton:lambda_handler.py


import json
import boto3
from datetime import datetime

SOURCE_ARN="YOUR_SOURCE_ARN"
S3_BUCKET_NAME="YOUR_S3_BUCKET_NAME"
IAM_ROLE_ARN="YOUR_IAM_ROLE_ARN"
KMS_KEY_ID="YOUR_KMS_KEY_ID"

client = boto3.client('rds')

def lambda_handler(event, context):
  
    export_task_identifier="mysnapshot" + datetime.now().strftime("%Y%m%d%H%M%S")
    
    response = client.start_export_task(
        ExportTaskIdentifier=export_task_identifier,
        SourceArn=SOURCE_ARN,
        S3BucketName=S3_BUCKET_NAME,
        IamRoleArn=IAM_ROLE_ARN,
        KmsKeyId=KMS_KEY_ID,
        )

-Stellen Sie die folgenden Variablen im Code entsprechend Ihrer Umgebung ein.

Variablennamen Wert
SOURCE_ARN ARN des zu exportierenden RDS-Snapshots
S3_BUCKET_NAME Name des Ausgabe-S3-Buckets
IAM_ROLE_ARN ARN der Rolle, die beim Exportieren von in Schritt 1 erstelltem S3 verwendet wird
KMS_KEY_ID ARN des erstellten KMS-Schlüssels

Kennung exportieren Geben Sie einen Namen ein, um den Export zu identifizieren. Dieser Name muss unter allen Snapshot-Exporten des AWS-Kontos in der aktuellen AWS-Region eindeutig sein.

4. Fügen Sie dem Schlüsselbenutzer des KMS-Schlüssels eine Lambda-Rolle hinzu

Fügen Sie die in Schritt 3 in Lambda verwendete Rolle dem Schlüsselbenutzer des in Schritt 2 erstellten Schlüssels hinzu.

スクリーンショット.png

Wenn Sie dies nicht tun, wird beim Ausführen von Lambda der Fehler "Ein Fehler ist aufgetreten (KMSKeyNotAccessibleFault)" angezeigt.

Führen Sie nach dieser Arbeit Lambda aus, um den RDS-Snapshot nach S3 zu exportieren.

abschließend

Wenn Sie den Snapshot nur nach S3 exportieren möchten, können Sie dasselbe mit der Verwaltungskonsole tun. Ich wollte jedoch die Datenquelle zu einem System-Snapshot machen und die Daten zu Datum und Uhrzeit aktualisieren. Deshalb habe ich versucht, sie auf Lambda auszuführen.

Es wäre schön, wenn RDS auf der Verwaltungskonsole überprüft werden könnte, wenn es sich um eine kleine Referenz wie DynamoDB handelt, aber ich war der Meinung, dass die Methode zum Verweisen auf diesen Snapshot auch eine sichere und einfache Methode ist.

Verweise

Dieser Artikel wurde unter Bezugnahme auf die folgenden Informationen verfasst.

Recommended Posts

Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3
Zugriff auf RDS von Lambda (Python)
Beispiel für eine Slack-Benachrichtigung mit Python Lambda
Laden Sie Dateien mit Lambda (Python) auf Google Drive hoch.
Laden Sie das, was Sie angefordert haben, mit AWS Lambda Python in S3 hoch
Ich möchte Lambda mit Python auf Mac AWS!
Stellen Sie mit Python eine Verbindung zu BigQuery her
[S3] CRUD mit S3 unter Verwendung von Python [Python]
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
S3-Betrieb mit Python Boto3
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
Wie benutzt man Python Lambda?
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Herausforderung Problem 5 mit Python: Lambda ... Ich habe mich entschieden, ohne zu kopieren
[Einführung in die Udemy Python3 + -Anwendung] 58. Lambda
Python: So verwenden Sie Async mit
[Python] Mit Python in eine CSV-Datei schreiben
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben
Gesichtserkennung mit Lambda (Python) + Erkennung
Ausgabe in eine CSV-Datei mit Python
[Lambda] [Python] Von Lambda auf Twitter posten!
Konvertieren Sie die Liste mit Python in DataFrame
MP3 → WAV-Konvertierung mit Python
Schwanzrekursion mit Python2 durchführen
Erste Schritte mit Python
So berechnen Sie das Datum mit Python
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
Verwenden Sie boto3, um zu S3 zu gelangen
Verschieben Sie CloudWatch-Protokolle regelmäßig mit Lambda nach S3
[Python 3.8 ~] Wie man rekursive Funktionen mit Lambda-Ausdrücken intelligent definiert
Senden Sie mit ESP32-WROOM-32 aufgenommene Bilder an AWS (API Gateway → Lambda → S3).
Ich habe ChatOps mit Slack x API Gateway x Lambda (Python) x RDS ausprobiert
Verarbeiten Sie die mit Redshift entladene gzip-Datei mit Python of Lambda, gzipen Sie sie erneut und laden Sie sie in S3 hoch
ImportError beim Versuch, das gcloud-Paket mit der AWS Lambda Python-Version zu verwenden
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Ändern Sie die Python 64-Bit-Umgebung mit Anaconda in eine 32-Bit-Umgebung
Englische Spracherkennung mit Python [Rede zu Text]
Konvertieren Sie Memos sofort mit Python 2to3
Ich möchte es mit Python Lambda Django machen, aber ich werde aufhören
HTML-Mail mit Bild zum Senden mit Python
Memo, um nach KPI mit Python zu fragen
Python nur mit Hallo, Welten zu erinnern
Geben Sie Farbzeichen mit Python zu hübsch aus
Passwortlose Authentifizierung mit RDS und IAM (Python)
PUT gzip direkt in S3 in Python
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator