Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Guida introduttiva alle integrazioni Zero-ETL di Amazon RDS
Prima di creare un'integrazione zero-ETL, configura il database RDS, il cluster e il data warehouse con i parametri e le autorizzazioni richiesti. Durante la configurazione, dovrai completare i seguenti passaggi:
Dopo aver completato queste attività, continua con o. Creazione di integrazioni Zero-ETL di Amazon RDS con Amazon Redshift Creazione di integrazioni Zero-ETL di Amazon RDS con un lago Amazon SageMaker
Suggerimento
Puoi fare in modo che RDS completi questi passaggi di configurazione al posto tuo mentre crei l'integrazione, anziché eseguirli manualmente. Per iniziare subito a creare un'integrazione, consulta Creazione di integrazioni Zero-ETL di Amazon RDS con Amazon Redshift.
Per la Fase 3, puoi scegliere di creare un data warehouse di destinazione (Fase 3a) o un Target Lakehouse (Fase 3b) a seconda delle tue esigenze:
-
Scegli un data warehouse se hai bisogno di funzionalità di data warehousing tradizionali con analisi basate su SQL.
-
Scegli un Amazon SageMaker AI lakehouse se hai bisogno di funzionalità di apprendimento automatico e desideri utilizzare le funzionalità di Lakehouse per flussi di lavoro di data science e ML.
Fase 1: creazione di un gruppo di parametri del DB personalizzato
Le integrazioni Zero-ETL di Amazon RDS richiedono valori specifici per i parametri DB che controllano la replica dei dati. I parametri specifici dipendono dal motore DB di origine. Per configurare questi parametri, è necessario innanzitutto creare un gruppo di parametri DB personalizzato e quindi associarlo al database di origine. Configura i seguenti valori dei parametri in base al motore DB di origine. Per istruzioni sulla creazione di un gruppo di parametri, consulta Gruppi di parametri DB per RDSistanze. Ti consigliamo di configurare tutti i valori dei parametri all'interno della stessa richiesta per evitare problemi di dipendenza.
RDS per MySQL:
-
binlog_format=ROW
-
binlog_row_image=full
Inoltre, assicurati che il parametro binlog_row_value_options
non sia impostato su PARTIAL_JSON
. Se il database di origine è un cluster DB Multi-AZ, assicurati che il binlog_transaction_compression
parametro non sia impostato su. ON
Alcuni di questi parametri (ad esempiobinlog_format
) sono dinamici, il che significa che è possibile applicare modifiche al parametro senza avviare un riavvio. Ciò significa che alcune sessioni esistenti potrebbero continuare a utilizzare il vecchio valore del parametro. Per evitare che ciò causi problemi durante la creazione di un'integrazione zero-ETL, abilita Performance Schema. Performance Schema garantisce l'esecuzione di controlli preliminari Zero-ETL, che aiutano a rilevare i parametri mancanti nelle prime fasi del processo.
RDS per PostgreSQL:
-
rds.logical_replication = 1
-
rds.replica_identity_full = 1
-
session_replication_role = origin
-
wal_sender_timeout ≥ 20000 or = 0
-
max_wal_senders ≥ 20
-
max_replication_slots ≥ 20
Per più integrazioni PostgreSQL, verrà utilizzato uno slot di replica logica per integrazione. Rivedi i max_wal_senders
parametri max_replication_slots
and in base al tuo utilizzo.
Per una sincronizzazione efficiente dei dati nelle integrazioni zero-ETL, impostatela rds.replica_identity_full
nell'istanza DB di origine. Ciò indica al database di registrare i dati di riga completi nel registroUPDATE
le operazioni, anziché solo le informazioni sulla chiave primaria. DELETE
Zero-ETL richiede dati di riga completi anche quando tutte le tabelle replicate devono avere chiavi primarie. Per determinare quali dati sono visibili durante le query, Amazon Redshift utilizza una strategia anti-join specializzata per confrontare i dati con una tabella di tracciamento delle eliminazioni interna. La registrazione di immagini a riga intera aiuta Amazon Redshift a eseguire questi antijoin in modo efficiente. Senza dati a riga intera, Amazon Redshift avrebbe bisogno di eseguire ricerche aggiuntive, il che potrebbe rallentare le prestazioni durante le operazioni ad alto throughput nel motore a colonne utilizzato da Amazon Redshift.
Importante
L'impostazione dell'identità di replica per registrare righe complete aumenta il volume WAL, il
RDS per Oracle:
Non è richiesta alcuna modifica dei parametri per RDS for Oracle.
Passaggio 2: selezionare o creare un cluster del database di origine
Dopo aver creato un gruppo di parametri DB personalizzato, scegli o crea un cluster DB di istanza RDS. Questo di database sarà la fonte della replica dei dati nel data warehouse di destinazione. Per istruzioni sulla creazione di un cluster DB Multi-AZ, vedere. Creazione di un cluster DB Multi-AZ per Amazon RDS
Il database deve eseguire una versione del motore DB supportata. Per un elenco delle versioni supportate, consulta Regioni e motori DB supportati per le integrazioni Zero-ETL di Amazon RDS.
Quando create il database, in Configurazione aggiuntiva, modificate il gruppo di parametri predefinito del DB con il gruppo di parametri personalizzato creato nel passaggio precedente.
Nota
Se si associa il gruppo di parametri al del database dopo che il di database è già stato creato, è necessario riavviare l' per applicare le modifiche prima di poter creare un'integrazione zero-ETL. Per istruzioni, consulta Riavvio di un'istanza database o Riavvio di un cluster DB Multi-AZ e di istanze DB di lettura per Amazon RDS.
Inoltre, assicuratevi che i backup automatici siano abilitati sul database. Per ulteriori informazioni, consulta Abilitazione dei backup automatici.
Fase 3a: Creare un data warehouse di destinazione
Dopo aver creato il del database di origine, è necessario creare e configurare un data warehouse di destinazione. Il data warehouse deve soddisfare i seguenti requisiti:
-
Utilizzando un tipo di RA3 nodo con almeno due nodi o Redshift Serverless.
-
Deve essere crittografato (se si utilizza un cluster con provisioning). Per ulteriori informazioni, consulta Crittografia dei database di Amazon Redshift.
Per istruzioni su come creare un data warehouse, consulta Creazione di un cluster per i cluster con provisioning o Creazione di un gruppo di lavoro con uno spazio dei nomi per Redshift Serverless.
Abilitazione della distinzione tra maiuscole e minuscole nel data warehouse
Affinché l'integrazione venga eseguita correttamente, il parametro di distinzione tra maiuscole e minuscole (enable_case_sensitive_identifier
) deve essere abilitato per il data warehouse. Per impostazione predefinita, la distinzione tra maiuscole e minuscole è disabilitata su tutti i cluster con provisioning e sui gruppi di lavoro Redshift serverless.
Per abilitare la distinzione tra maiuscole e minuscole, esegui i seguenti passaggi a seconda del tipo di data warehouse:
-
Cluster con provisioning: per abilitare la distinzione tra maiuscole e minuscole su un cluster con provisioning, crea un gruppo di parametri personalizzato con il parametro
enable_case_sensitive_identifier
abilitato. Poi, associa il gruppo di parametri al cluster. Per istruzioni, consulta Gestione di gruppi di parametri mediante la console o Configurazione dei valori di parametro mediante AWS CLI.Nota
Ricordati di riavviare il cluster dopo aver associato il gruppo di parametri personalizzati.
-
Gruppo di lavoro serverless: per abilitare la distinzione tra maiuscole e minuscole su un gruppo di lavoro SRedshift Serverless, è necessario utilizzare la AWS CLI. La console Amazon Redshift attualmente non supporta la modifica dei valori dei parametri Redshift Serverless. Invia la seguente richiesta di aggiornamento al gruppo di lavoro:
aws redshift-serverless update-workgroup \ --workgroup-name
target-workgroup
\ --config-parameters parameterKey=enable_case_sensitive_identifier,parameterValue=trueNon è necessario riavviare un gruppo di lavoro dopo aver modificato i valori dei parametri.
Configura l'autorizzazione per il data warehouse
Dopo aver creato un data warehouse, è necessario configurare il database RDS di origine cluster come fonte di integrazione autorizzata. Per istruzioni, consulta Configurazione dell'autorizzazione per il data warehouse Amazon Redshift.
Configurare un'integrazione utilizzando il AWS SDKs
Invece di configurare ogni risorsa manualmente, puoi eseguire il seguente script Python per configurare automaticamente le risorse richieste. L'esempio di codice lo utilizza AWS SDK per Python (Boto3)
Per installare le dipendenze richieste, eseguire i seguenti comandi:
pip install boto3 pip install time
All'interno dello script, modificate facoltativamente i nomi dei gruppi di origine, destinazione e parametri. La funzione finale crea un'integrazione che my-integration
prende il nome dall'impostazione delle risorse.
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()
Fase 3b: creare un AWS Glue catalogo per l'integrazione con Amazon SageMaker AI Zero-ETL
Quando crei un'integrazione zero-ETL con un lago Amazon SageMaker AI, devi creare un catalogo gestito in. AWS Glue AWS Lake Formation Il catalogo di destinazione deve essere un catalogo gestito da Amazon Redshift. Per creare un catalogo gestito di Amazon Redshift, crea innanzitutto il ruolo collegato al AWSServiceRoleForRedshift
servizio. Nella console Lake Formation, aggiungi AWSServiceRoleForRedshift
come amministratore di sola lettura.
Per ulteriori informazioni sulle attività precedenti, consulta i seguenti argomenti.
-
Per informazioni sulla creazione di un catalogo gestito di Amazon Redshift, consulta Creating an Amazon Redshift managed catalog nella Developer AWS Glue Data Catalog Guide.AWS Lake Formation
-
Per informazioni sul ruolo collegato ai servizi per Amazon Redshift, consulta Using service-linked roles for Amazon Redshift nella Amazon Redshift Management Guide.
-
Per informazioni sulle autorizzazioni di amministratore di sola lettura per Lake Formation, consulta Lake Formation personas e IAM permissions reference nella Developer Guide.AWS Lake Formation
Configura le autorizzazioni per il catalogo di destinazione AWS Glue
Prima di creare un catalogo di destinazione per l'integrazione zero-ETL, è necessario creare il ruolo di creazione del target Lake Formation e il ruolo di trasferimento dei AWS Glue dati. Usa il ruolo di creazione del target Lake Formation per creare il catalogo dei target. Quando crei il catalogo di destinazione, inserisci il ruolo di trasferimento dati Glue nel campo ruolo IAM nella sezione Accesso dai motori.
Il ruolo di creazione del target deve essere un amministratore di Lake Formation e richiede le seguenti autorizzazioni.
Il ruolo di creazione del target deve avere la seguente relazione di fiducia.
Il ruolo di trasferimento dati Glue è necessario per le operazioni del catalogo MySQL e deve disporre delle seguenti autorizzazioni.
Il ruolo di trasferimento dati Glue deve avere la seguente relazione di trust.
Passaggi successivi
Con un database RDS di origine, un cluster e un data warehouse di destinazione Amazon Redshift o SageMaker Amazon AI lakehouse, puoi creare un'integrazione zero-ETL e replicare i dati. Per istruzioni, consulta Creazione di integrazioni Zero-ETL di Amazon RDS con Amazon Redshift.