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

7 minuti di lettura
0

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 Amazon RDS per Oracle e un bucket Amazon S3, verifica le seguenti condizioni:

  • L'istanza database e il bucket S3 si trovano nella stessa regione AWS.
  • L'istanza database ha l'accesso richiesto al bucket S3.
  • L'istanza database è associata a un gruppo di opzioni che include l'opzione S3_INTEGRATION.
  • Stai caricando file solo dall'oggetto directory Oracle. Questa directory può 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 Come posso gestire i privilegi e i ruoli utente nella mia istanza database Amazon RDS per Oracle?
  • Se stai copiando dati all'interno di sottodirectory, specifica esplicitamente il nome della sottodirectory quando usi i pacchetti rdsadmin. Non puoi usare l'opzione S3_INTEGRATION per copiare le sottodirectory.

Risoluzione

Assicurati che l'istanza database disponga dell'accesso richiesto al bucket S3

Verifica se la tua istanza database ha un ruolo AWS Identity and Access Management (IAM) con i privilegi minimi per il caricamento e il download da S3:

  1. Apri la console Amazon RDS.
  2. Nel riquadro di navigazione, scegli Database.
  3. Scegli l'istanza database che desideri monitorare.
  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 la tua 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 ricevi errori durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

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

  • Se il ruolo IAM esiste ma non dispone di questi privilegi minimi, modifica il ruolo per includere queste autorizzazioni.
  • Se non disponi di un ruolo IAM con le autorizzazioni richieste, crea una policy IAM. Concedi a questa policy le autorizzazioni per trasferire i file dal bucket S3 ad Amazon RDS. 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 hai ancora problemi con le autorizzazioni del bucket, modifica il ruolo IAM per 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, modifica i privilegi personalizzati in base alle esigenze.

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 file nella cartella example-folder nel bucket S3 example-bucket, 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

Controlla se hai un gruppo di opzioni collegato alla tua istanza database RDS:

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

Se questo gruppo di opzioni è nello stato sincronizzato e stai aggiungendo l'opzione S3_INTEGRATION, l'opzione non viene aggiunta correttamente. Pertanto, assicurati che il gruppo di opzioni sei nello stato sincronizzato.

Per verificare se questo gruppo di opzioni è nello stato sincronizzato, esegui 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 sincronizzato, scegli la scheda Registri ed eventi per il tuo database, quindi scorri verso il basso fino alla sezione Eventi recenti. Identifica il componente che impedisce la sincronizzazione del gruppo di opzioni e rimuovilo dal database.

Se il gruppo di opzioni è nello stato sincronizzato, controlla se l'opzione S3_INTEGRATION è inclusa nel gruppo di opzioni. Per ulteriori informazioni, consulta Copia di un gruppo di opzioni. Se l'opzione S3_INTEGRATION non è inclusa nel gruppo di opzioni, aggiungila. Per ulteriori informazioni, consulta Aggiunta dell'opzione di integrazione 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": invalid identifier". Questo errore indica che le procedure richieste per il caricamento e il download non vengono create sull'istanza database.

L'aggiunta dell'opzione S3_INTEGRATION ad Amazon RDS non comporta tempi di inattività. Se desideri utilizzare l'opzione Applica immediatamente, assicurati che non vi siano azioni di manutenzione in sospeso. Se ci sono azioni in sospeso, tali azioni hanno effetto con l'integrazione con Amazon S3. Per ulteriori informazioni, consulta Manutenzione di un'istanza database.

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

Non puoi accedere ai file S3 direttamente nell'istanza del database. Per accedere a questi file, è necessario copiarli in una directory dell'host RDS. Per caricare o scaricare file dall'istanza database in un bucket S3, completa i seguenti passaggi:

  1. Per copiare i file di esportazione da Amazon RDS a S3, crea innanzitutto i file di dump. Per fare ciò, usa il comando expdp o l'API dbms_datapump nella directory DATA_DUMP_DIR o in una 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 sulle 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 sulle query di esempio per lo scaricamento di file, 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:

  1. Apri la console Amazon RDS.
  2. Nel riquadro 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, immetti l'ID dell'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 comando seguente per leggere il file di log generato durante il processo di caricamento o download:

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

Nota: Sostituisci task-id con l'ID attività restituito dalla procedura.

Informazioni correlate

Integrazione Amazon S3

Perché la mia istanza database Amazon RDS per Oracle utilizza più storage del previsto?

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa