Amazon Relational Database Service (RDS) ist zu einem Eckpfeiler für viele Unternehmen geworden, die ihre relationalen Datenbanken in der Cloud verwalten möchten. Eine leistungsstarke Funktion von RDS ist die Möglichkeit, Snapshots zu erstellen, die als Point-in-Time-Backups Ihrer Datenbankinstanzen dienen. Wussten Sie jedoch, dass Sie diese RDS-Snapshots direkt in einen Amazon S3-Bucket exportieren können? In diesem Blog-Beitrag werden wir den Wert des Exports von RDS-Snapshots zu S3 untersuchen und wie man Python verwendet, um Daten aus bestimmten Datenbanken, Schemata oder Tabellen zu extrahieren und sie in das SQL- oder CSV-Format für weitere Analysen zu konvertieren.
Warum RDS-Snapshots nach S3 exportieren?
Standardmäßig bedeutet die Wiederherstellung einer Datenbank aus einem Snapshot die Erstellung eines neuen Clusters aus diesem Snapshot. Das ist manchmal zu viel und nicht erforderlich. Was aber, wenn man nur einen Teil der Daten aus dem Snapshot erhalten möchte? Natürlich könnte man einen neuen Cluster erstellen und dann eine Verbindung herstellen und die benötigten Daten dumpen, aber es gibt eine Alternative - den Export in S3.
Exportieren von RDS-Snapshots nach S3
Das Exportieren von RDS-Snapshots nach S3 ist einfach zu bewerkstelligen. Hier finden Sie einen kurzen Überblick über die erforderlichen Schritte:
1. Ein S3 Bucket erstellen
Wenn Sie dies noch nicht getan haben, erstellen Sie einen S3-Bucket, in dem Sie Ihre RDS-Snapshots speichern möchten
2. Eine IAM-Rolle erstellen
Erstellen Sie eine IAM-Rolle mit Berechtigungen, die es RDS erlauben, auf Ihr S3-Bucket zu schreiben.
3. Exportieren Sie den Snapshot
Verwenden Sie die AWS Management Console, AWS CLI oder SDKs, um Ihren RDS-Snapshot in den S3-Bucket zu exportieren
Beispiel mit AWS CLI:
aws rds start-export-task \
--export-task-identifier my-snapshot-export \
--source-arn arn:aws:rds:AWS_Region:123456789012:snapshot:snapshot-name \
--s3-bucket-name amzn-s3-demo-bucket \
--iam-role-arn iam-role \
--export-only database.schema.table \
--kms-key-id my-key
Die Aufgabe "Exportieren" unterstützt den teilweisen Datenbankexport über das Flag "Nur exportieren", gefolgt von der Tabelle oder dem Schema, das exportiert werden soll. Mehr Details HIER


Die Wiederherstellung nimmt Zeit in Anspruch - in meinen Testszenarien dauerte sie etwa 30-40 Minuten. RDS muss einen ganzen Cluster hochfahren und den Datenbank-Dump durchführen.
Danach finden Sie die extrahierten Daten im Bucket. Sie liegen im ".parquet"-Format vor. Wir können ein einfaches Python-Skript verwenden, um sie in SQL-Anweisungen umzuwandeln
- python3 -m venv .venv
- Quelle .venv/bin/activate
- pip install pandas pyarrow
Beispiel für ein Python-Skript zur Umwandlung einer .parquet-Datei in eine SQL-Datei:
import pandas as pd
import argparse
def parquet_to_sql(parquet_file, table_name, output_file):
# Read the Parquet file into a DataFrame
df = pd.read_parquet(parquet_file)
# Get the column names from the DataFrame
columns = df.columns.tolist()
# Create a list to store SQL insert statements
sql_statements = []
# Generate SQL INSERT statement for each row
for index, row in df.iterrows():
# Prepare the SQL insert statement
values = [f"'{str(val)}'" if isinstance(val, str) else 'NULL' if pd.isna(val) else str(val) for val in row]
insert_statement = f"INSERT INTO {table_name} ({', '.join(columns)}) VALUES ({', '.join(values)});"
sql_statements.append(insert_statement)
# Write SQL statements to the output file
with open(output_file, 'w') as f:
for statement in sql_statements:
f.write(statement + '\n')
print(f"SQL statements saved to {output_file}")
def main():
# Set up argument parser
parser = argparse.ArgumentParser(description='Convert Parquet to SQL insert statements.')
parser.add_argument('parquet_file', type=str, help='Path to the Parquet file')
parser.add_argument('table_name', type=str, help='Name of the target SQL table')
parser.add_argument('--output', type=str, default='output.sql', help='Output SQL file (default: output.sql)')
# Parse command-line arguments
args = parser.parse_args()
# Convert the Parquet file to SQL
parquet_to_sql(args.parquet_file, args.table_name, args.output)
if __name__ == "__main__":
main()
Verwendung:
python main.py --output MY_OUTPUT.sql MY_EXPORT.gz.parquet TABLE_NAME
Beispiel:
python main.py --output senders.sql part-00000-657cc6f6-1bc3-466f-9e2d-433e98af2b6f-c000.gz.parquet senders
Schlussfolgerung: Vorteile des Exports von Amazon RDS-Snapshots in S3
Der Export von Amazon RDS-Snapshots nach S3 kann eine äußerst effektive Methode sein, um auf Daten zuzugreifen und sie zu analysieren, ohne dass ein neuer RDS-Cluster erstellt werden muss. Durch den direkten Export in S3 und die Nutzung eines einfachen Python-Skripts können Sie selektiv Tabellen oder bestimmte Daten aus Snapshots für Aufgaben wie Data Warehousing, Auditing und Archivierung extrahieren.
Zusätzliche Überlegungen und Anforderungen für eine bessere Einrichtung
Datensicherheit und Compliance
Stellen Sie immer sicher, dass Ihr S3-Bucket mit strengen Zugriffsrichtlinien konfiguriert ist, insbesondere wenn Ihre Snapshots sensible Informationen enthalten. Verwenden Sie AWS KMS, um Daten bei der Übertragung und im Ruhezustand zu verschlüsseln.
Fehlerbehandlung
Erweiterung des Python-Skripts um Mechanismen zur Fehlerbehandlung, einschließlich Prüfungen auf Datenkompatibilität und Protokollierung, um es in Produktionsumgebungen robuster zu machen
Optimierung der Kosten
Beachten Sie die potenziellen S3-Speicherkosten für große Snapshots und ziehen Sie die Einrichtung von Lebenszyklusrichtlinien in Betracht, um Daten auf kostengünstigere Speicherklassen zu übertragen, wenn eine langfristige Speicherung erforderlich ist.
Export und Konvertierung automatisieren
Verwenden Sie AWS Lambda und Step Functions, um Snapshot-Exporte und Konvertierungen nach einem Zeitplan zu automatisieren, um die Datenextraktion zu optimieren und manuelle Eingriffe zu minimieren.
Optimierung der Leistung
Wenn Sie mit großen Datensätzen arbeiten, sollten Sie das Python-Konvertierungsskript für die Verarbeitung größerer Parquet-Dateien optimieren
Durch die Integration dieser Verbesserungen können Sie einen skalierbaren, sicheren und effizienten Workflow für den Export und die Verarbeitung von RDS-Snapshots direkt in S3 einrichten, der für Analysen und die Integration in Ihre breitere Datenstrategie bereit ist.

