Come posso risolvere i problemi relativi all'integrazione di Amazon RDS for Oracle con Amazon S3?

Ultimo aggiornamento: 29-10-2021

Desidero risolvere problemi ed errori durante l'integrazione di Amazon Relational Database Service (Amazon RDS) for Oracle con Amazon Simple Storage Service (Amazon S3).

Breve descrizione

Quando trasferisci file tra un'istanza database di Amazon RDS for Oracle e un bucket Amazon S3, assicurati di quanto segue:

  • L'istanza database e il bucket S3 devono trovarsi nella stessa regione AWS.
  • L'istanza database deve disporre dell'accesso necessario al bucket S3.
  • L'istanza database deve essere associata a un gruppo di opzioni che include l'opzione S3_INTEGRATION.
  • I file vengono caricati solo dall'oggetto directory Oracle. Questa directory potrebbe essere una directory creata dall'utente o una directory DATA_PUMP_DIR.
  • Se si utilizza una directory creata dall'utente, l'utente che esegue il caricamento e il download deve disporre dei privilegi di lettura e scrittura richiesti sulla directory. Per ulteriori informazioni, consulta Concessione dei privilegi all'utente nel database di origine.
  • Se stai copiando i dati all'interno di sottodirectory, specifica esplicitamente il nome della sottodirectory quando si utilizzano i pacchetti rdsadmin. Non è possibile copiare le sottodirectory utilizzando l'opzione S3_INTEGRATION.

Risoluzione

Verifica che l'istanza database abbia l'accesso richiesto al bucket S3

Per verificare se l'istanza database ha un ruolo AWS Identity and Access Management (IAM) con i privilegi minimi per il caricamento e il download da S3, procedi come segue:

  1. Apri la console di Amazon RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Seleziona l'istanza database che desideri controllare.
  4. Scegli la scheda Connettività e sicurezza .
  5. Scorri verso il basso fino alla sezione Gestisci ruoli IAM per verificare se disponi di un ruolo IAM attivo con i seguenti privilegi:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

Puoi anche utilizzare il comando AWS Command Line Interface (AWS CLI) describe-db-instances per verificare se l'istanza database ha un ruolo IAM con questi privilegi minimi:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'
Nota: se durante l'esecuzione dei comandi AWS CLI ricevi un messaggio di errore, assicurati di utilizzare la versione più recente di AWS CLI.

Dopo aver verificato se il ruolo IAM esiste, esegui una delle operazioni riportate in base al risultato:

  • Se il ruolo IAM esiste, ma non dispone di questi privilegi minimi, modifica il ruolo in modo da includere queste autorizzazioni.
  • Se non disponi di un ruolo IAM con le autorizzazioni richieste, crea una policy IAM con le autorizzazioni necessarie per trasferire i file dal bucket S3 ad Amazon RDS. Per ulteriori informazioni, consulta Prerequisiti per l'integrazione di Amazon RDS for Oracle con Amazon S3. Assicurati di aggiungere autorizzazioni a livello di bucket ai bucket e autorizzazioni a livello di oggetto agli oggetti durante la creazione della policy IAM.

Se il problema con le autorizzazioni del bucket persiste, modifica il ruolo IAM in modo da concedere l'accesso completo al bucket S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket/*",
                "arn:aws:s3:::example-bucket"
            ]
        }
    ]
}

Importante: il ruolo IAM viene modificato per concedere l'accesso completo solo per verificare se il problema è causato dai privilegi IAM. Dopo aver risolto il problema, regolare i privilegi personalizzati secondo necessità.

Per caricare file in una cartella specifica in S3, utilizza il parametro p_s3_prefix nella procedura rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Assicurati di disporre delle autorizzazioni necessarie prima di caricare i file.

Ad esempio, per caricare i file nella cartella example-folder nel bucket di esempio del bucket S3, allega la seguente policy IAM:

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

Assicurati che l'istanza database sia associata a un gruppo di opzioni che include l'opzione S3_INTEGRATION

Per verificare se è presente un gruppo di opzioni collegato all'istanza DB di RDS, completa le seguenti operazioni:

  1. Apri la console di Amazon RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Seleziona l'istanza database che desideri controllare.
  4. Seleziona la scheda Configurazione.
  5. Prendi nota del parametro Gruppi di opzioni.

Se questo gruppo di opzioni non ha uno stato valido e stai provando ad aggiungere l'opzione S3_INTEGRATION, l'opzione non viene aggiunta correttamente. Pertanto, accertati che il gruppo di opzioni abbia lo stato valido.

Per verificare se questo gruppo di opzioni ha lo stato valido, emetti il seguente comando AWS CLI:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[OptionGroupMemberships[*]]'

Se il gruppo di opzioni non è nello stato valido, scegli la scheda Log ed eventi per il tuo database, quindi scorri verso il basso fino alla sezione Eventi recenti. Identifica il componente che rende non valido il gruppo di opzioni e rimuovilo dal database.

Se il gruppo di opzioni è nello stato valido, verifica se l'opzione S3_INTEGRATION è inclusa nel gruppo di opzioni. Per ulteriori informazioni, consulta Elenco delle opzioni e delle impostazioni delle opzioni per un gruppo di opzioni. Se l'opzione S3_INTEGRATION non è inclusa nel gruppo di opzioni, aggiungi l'opzione. Per ulteriori informazioni, consulta Aggiunta dell'opzione di integrazione di Amazon S3.

Nota: se l'opzione S3_INTEGRATION non viene aggiunta all'istanza database, viene visualizzato l'errore ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": identificativo non valido”. Questo errore indica che le procedure necessarie per il caricamento e il download non vengono create nell'istanza database.

L'aggiunta dell'opzione S3_INTEGRATION ad Amazon RDS non comporta tempi di inattività. Se prevedi di utilizzare l'opzione Applica immediatamente, assicurati che non vi siano azioni di manutenzione in sospeso. Se sono presenti azioni in sospeso, tali azioni vengono applicate insieme all'integrazione di S3. Per ulteriori informazioni, consulta Riavvio di un'istanza database.

Assicurati di caricare/scaricare file solo dall'oggetto directory Oracle creato dall'utente o dalla directory DATA_PUMP_DIR

Non è possibile accedere ai file S3 direttamente nell'istanza database. Per accedere a questi file, è necessario copiare i file in una directory nell'host RDS per accedervi. Per caricare/scaricare file dall'istanza database in un bucket S3, effettua le seguenti operazioni:

  1. Per copiare i file di esportazione in Amazon RDS in S3, assicurati di creare i file di dump utilizzando il comando expdp o l'API dbms_datapump in DATA_DUMP_DIR o nella directory personalizzata. Quindi, utilizza la procedura rdsadmin.rdsadmin_s3_tasks.upload_to_s3 per caricare i file su S3. Per informazioni sui parametri di questa procedura e query di esempio per il caricamento di file, consulta Caricamento di file da un'istanza database Oracle a un bucket Amazon S3.
  2. Utilizza la procedura rdsadmin. rdsadmin_s3_tasks.download_from_s3 per scaricare i file dal bucket S3 nella cartella DATA_PUMP_DIR o in qualsiasi directory creata dall'utente. Per informazioni sui parametri di questa procedura e query di esempio per i file di download, consulta Download di file da un bucket Amazon S3 a un'istanza database Oracle.

Per monitorare lo stato del trasferimento di file, visualizza il log generato quando si esegue la procedura per caricare o scaricare i pacchetti rdsadmin. Per visualizzare questi log, effettua le seguenti operazioni:

  1. Apri la console di Amazon RDS.
  2. Nel pannello di navigazione, scegli Database.
  3. Scegli l'istanza database per la quale desideri visualizzare i log.
  4. Scegli la scheda Log ed eventi.
  5. Nella sezione Log, specifica l'ID attività restituito dalla procedura nel filtro di ricerca.
  6. Seleziona il file restituito.
  7. Scegli Osserva per visualizzare i log.
    -oppure-
    Scegli Download per scaricare i log.

È inoltre possibile eseguire il seguente comando per leggere il file di log generato durante il processo di caricamento/download:

SELECT text FROM table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-task-id.log'));

Nota: assicurati di sostituire l'ID attività con l'ID attività restituito dalla procedura.