Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erste Schritte mit Amazon RDS — ETL Zero-Integrationen mit Amazon Redshift
Bevor Sie eine ETL Zero-Integration mit Amazon Redshift erstellen, konfigurieren Sie Ihren RDS und Ihr Amazon Redshift Redshift-Data Warehouse mit den erforderlichen Parametern und Berechtigungen. Während der Einrichtung führen Sie die folgenden Schritte aus:
Wenn Sie diese Aufgaben abgeschlossen haben, fahren Sie mit Erstellen von Amazon RDS ETL mit Amazon Redshift fort.
Tipp
Sie können diese Einrichtungsschritte für Sie RDS ausführen lassen, während Sie die Integration erstellen, anstatt sie manuell durchzuführen. Um sofort mit der Erstellung einer Integration zu beginnen, siehe Erstellen von Amazon RDS ETL mit Amazon Redshift.
Schritt 1: Erstellen einer benutzerdefinierten DB--Parametergruppe
Amazon RDS ETL Zero-Integrationen mit Amazon Redshift erfordern spezifische Werte für die DB-Parameter, die die binäre Protokollierung (Binlog) steuern. Um die binäre Protokollierung zu konfigurieren, müssen Sie zuerst eine benutzerdefinierte DB-Parametergruppe erstellen und diese dann der Quelldatenbank zuordnen.
Erstellen Sie eine benutzerdefinierte mit den folgenden Einstellungen. Anweisungen zum Erstellen einer Parametergruppe finden Sie unter DB-Parametergruppen für Amazon RDS Amazon.
-
binlog_format=ROW
-
binlog_row_image=full
Stellen Sie außerdem sicher, dass der binlog_row_value_options
-Parameter nicht auf PARTIAL_JSON
gesetzt ist.
Schritt 2: Wählen oder erstellen Sie einen
Nachdem Sie eine benutzerdefinierte erstellt haben, wählen oder erstellen Sie einen Aurora My- Datenbank. Dieser wird die Quelle für die Datenreplikation nach Amazon Redshift sein. Anweisungen zum Erstellen eines Single-AZ- oder finden Sie unter. Eine Amazon RDS DB-Instance erstellen
Auf der Datenbank muss eine unterstützte DB-Engine-Version ausgeführt werden. Eine Liste der unterstützten Versionen finden Sie unter Unterstützte Regionen und DB-Engines für Amazon RDS ohne ETL Integrationen mit Amazon Redshift.
Anweisungen zum Erstellen eines Single-AZ- oder finden Sie unter. Eine Amazon RDS DB-Instance erstellen Anweisungen zum Erstellen eines Multi-AZ-DB-Clusters finden Sie unter. Einen Multi-AZ-DB-Cluster für Amazon erstellen RDS
Wenn Sie die Datenbank erstellen, ändern Sie unter Zusätzliche Konfiguration die in die benutzerdefinierte Parametergruppe, die Sie im vorherigen Schritt erstellt haben.
Anmerkung
die Parametergruppe dem zuordnen, nachdem der bereits erstellt wurde, müssen Sie die neu starten, um die Änderungen zu übernehmen, bevor Sie eine ETL Zero-Integration erstellen können. Anleitungen Anweisungen finden Sie unter Neustarten einer DB-Instance oder Einen Multi-AZ-DB-Cluster und Reader-DB-Instances für Amazon neu starten RDS.
Stellen Sie außerdem sicher, dass automatische Backups in der Datenbank aktiviert sind. Weitere Informationen finden Sie unter Aktivieren von automatisierten Backups.
Schritt 3: Erstellen eines Ziel-Data-Warehouses in Amazon Redshift
Nachdem Sie Ihren erstellt haben, müssen Sie ein Ziel-Data Warehouse in Amazon Redshift erstellen und konfigurieren. Das Data Warehouse muss die folgenden Anforderungen erfüllen:
-
Verwendung eines RA3 Knotentyps mit mindestens zwei Knoten oder Redshift Serverless.
-
Es muss verschlüsselt sein (bei Verwendung eines bereitgestellten Clusters). Weitere Informationen finden Sie unter Datenbankverschlüsselung in Amazon Redshift.
Anweisungen zum Erstellen eines Data Warehouse finden Sie unter Erstellen eines Clusters für bereitgestellte Cluster oder Erstellen einer Arbeitsgruppe mit einem Namespace für Redshift Serverless.
Aktivieren Sie die Berücksichtigung von Groß- und Kleinschreibung im Data Warehouse
Damit die Integration erfolgreich ist, muss der Parameter für die Berücksichtigung von Groß- und Kleinschreibung (enable_case_sensitive_identifier
) für das Data Warehouse aktiviert sein. Standardmäßig ist die Berücksichtigung von Groß- und Kleinschreibung auf allen bereitgestellten Clustern und Redshift-Serverless-Arbeitsgruppen deaktiviert.
Um die Berücksichtigung von Groß- und Kleinschreibung zu aktivieren, führen Sie je nach Data-Warehouse-Typ die folgenden Schritte aus:
-
Bereitgestellter Cluster – Um die Berücksichtigung von Groß- und Kleinschreibung in einem bereitgestellten Cluster zu aktivieren, erstellen Sie eine benutzerdefinierte Parametergruppe mit aktiviertem
enable_case_sensitive_identifier
-Parameter. Ordnen Sie diese Parametergruppe dann dem Cluster zu. Anweisungen finden Sie unter Parametergruppen mithilfe der Konsole verwalten oder Parameterwerte mit dem konfigurieren AWS CLI.Anmerkung
Denken Sie daran, den Cluster neu zu starten, nachdem Sie ihm die benutzerdefinierte Parametergruppe zugeordnet haben.
-
Serverlose Arbeitsgruppe — Um die Berücksichtigung von Groß- und Kleinschreibung in einer serverlosen Redshift-Arbeitsgruppe zu aktivieren, müssen Sie die AWS CLI. Die Amazon Redshift Redshift-Konsole unterstützt derzeit nicht das Ändern von Redshift Serverless-Parameterwerten. Senden Sie die folgende Anfrage zur Aktualisierung der Arbeitsgruppe:
aws redshift-serverless update-workgroup \ --workgroup-name
target-workgroup
\ --config-parameters parameterKey=enable_case_sensitive_identifier,parameterValue=trueSie müssen eine Arbeitsgruppe nicht neu starten, nachdem Sie ihre Parameterwerte geändert haben.
Konfigurieren der Autorisierung für das Data Warehouse
Nachdem Sie ein Data Warehouse erstellt haben, müssen Sie den der RDSQuelldatenbank als autorisierte Integrationsquelle konfigurieren. Anweisungen finden Sie unter Konfigurieren der Autorisierung für Ihr Amazon-Redshift-Data-Warehouse.
Richten Sie eine Integration mit dem ein AWS SDKs
Anstatt jede Ressource manuell einzurichten, können Sie das folgende Python-Skript ausführen, um die erforderlichen Ressourcen automatisch für Sie einzurichten. Das Codebeispiel verwendet AWS SDK for Python (Boto3)
Führen Sie die folgenden Befehle aus, um die erforderlichen Abhängigkeiten zu installieren:
pip install boto3 pip install time
Innerhalb des Skripts können Sie optional die Namen der Quell-, Ziel- und Parametergruppen ändern. Die letzte Funktion erstellt eine Integration, die my-integration
nach der Einrichtung der Ressourcen benannt ist.
import boto3 import time # Build the client using the default credential configuration. # You can use the CLI and run 'aws configure' to set access key, secret # key, and default Region. rds = boto3.client('rds') redshift = boto3.client('redshift') sts = boto3.client('sts') source_db_name = 'my-source-db' # A name for the source database source_param_group_name = 'my-source-param-group' # A name for the source parameter group target_cluster_name = 'my-target-cluster' # A name for the target cluster target_param_group_name = 'my-target-param-group' # A name for the target parameter group def create_source_db(*args): """Creates a source RDS for MySQL DB instance""" response = rds.create_db_parameter_group( DBParameterGroupName=source_param_group_name, DBParameterGroupFamily='mysql8.0', Description='RDS for MySQL zero-ETL integrations' ) print('Created source parameter group: ' + response['DBParameterGroup']['DBParameterGroupName']) response = rds.modify_db_parameter_group( DBParameterGroupName=source_param_group_name, Parameters=[ { 'ParameterName': 'binlog_format', 'ParameterValue': 'ROW', 'ApplyMethod': 'pending-reboot' }, { 'ParameterName': 'binlog_row_image', 'ParameterValue': 'full', 'ApplyMethod': 'pending-reboot' } ] ) print('Modified source parameter group: ' + response['DBParameterGroupName']) response = rds.create_db_instance( DBInstanceIdentifier=source_db_name, DBParameterGroupName=source_param_group_name, Engine='mysql', EngineVersion='8.0.32', DBName='mydb', DBInstanceClass='db.m5.large', AllocatedStorage=15, MasterUsername=
'username'
, MasterUserPassword='Password01**
' ) print('Creating source database: ' + response['DBInstance']['DBInstanceIdentifier']) source_arn = (response['DBInstance']['DBInstanceArn']) create_target_cluster(target_cluster_name, source_arn, target_param_group_name) return(response) def create_target_cluster(target_cluster_name, source_arn, target_param_group_name): """Creates a target Redshift cluster""" response = redshift.create_cluster_parameter_group( ParameterGroupName=target_param_group_name, ParameterGroupFamily='redshift-1.0', Description='RDS for MySQL zero-ETL integrations' ) print('Created target parameter group: ' + response['ClusterParameterGroup']['ParameterGroupName']) response = redshift.modify_cluster_parameter_group( ParameterGroupName=target_param_group_name, Parameters=[ { 'ParameterName': 'enable_case_sensitive_identifier', 'ParameterValue': 'true' } ] ) print('Modified target parameter group: ' + response['ParameterGroupName']) response = redshift.create_cluster( ClusterIdentifier=target_cluster_name, NodeType='ra3.4xlarge', NumberOfNodes=2, Encrypted=True, MasterUsername='username', MasterUserPassword='Password01**', ClusterParameterGroupName=target_param_group_name ) print('Creating target cluster: ' + response['Cluster']['ClusterIdentifier']) # Retrieve the target cluster ARN response = redshift.describe_clusters( ClusterIdentifier=target_cluster_name ) target_arn = response['Clusters'][0]['ClusterNamespaceArn'] # Retrieve the current user's account ID response = sts.get_caller_identity() account_id = response['Account'] # Create a resource policy granting access to source database and account ID response = redshift.put_resource_policy( ResourceArn=target_arn, Policy=''' { \"Version\":\"2012-10-17\", \"Statement\":[ {\"Effect\":\"Allow\", \"Principal\":{ \"Service\":\"redshift.amazonaws.com\" }, \"Action\":[\"redshift:AuthorizeInboundIntegration\"], \"Condition\":{ \"StringEquals\":{ \"aws:SourceArn\":\"%s\"} } }, {\"Effect\":\"Allow\", \"Principal\":{ \"AWS\":\"arn:aws:iam::%s:root\"}, \"Action\":\"redshift:CreateInboundIntegration\"} ] } ''' % (source_arn, account_id) ) return(response) def wait_for_db_availability(*args): """Waits for both databases to be available""" print('Waiting for source and target to be available...') response = rds.describe_db_instances( DBInstanceIdentifier=source_db_name ) source_status = response['DBInstances'][0]['DBInstanceStatus'] source_arn = response['DBInstances'][0]['DBInstanceArn'] response = redshift.describe_clusters( ClusterIdentifier=target_cluster_name ) target_status = response['Clusters'][0]['ClusterStatus'] target_arn = response['Clusters'][0]['ClusterNamespaceArn'] # Every 60 seconds, check whether the databases are available if source_status != 'available' or target_status != 'available': time.sleep(60) response = wait_for_db_availability( source_db_name, target_cluster_name) else: print('Databases available. Ready to create zero-ETL integration.') create_integration(source_arn, target_arn) return def create_integration(source_arn, target_arn): """Creates a zero-ETL integration using the source and target databases""" response = rds.create_integration( SourceArn=source_arn, TargetArn=target_arn, IntegrationName='my-integration
' ) print('Creating integration: ' + response['IntegrationName']) def main(): """main function""" create_source_db(source_db_name, source_param_group_name) wait_for_db_availability(source_db_name, target_cluster_name) if __name__ == "__main__": main()
Nächste Schritte
Mit einem für die RDSQuelldatenbank und einem Amazon Redshift Redshift-Ziel-Data Warehouse können Sie jetzt ohne ETL Integration Daten erstellen und replizieren. Detaillierte Anweisungen finden Sie unter Erstellen von Amazon RDS ETL mit Amazon Redshift.