Comment résoudre les problèmes lorsque j'intègre Amazon RDS for Oracle avec Amazon S3 ?

Date de la dernière mise à jour : 29/10/2021

Je souhaite résoudre des problèmes et des erreurs lorsque j'intègre Amazon Relational Database Service (Amazon RDS) for Oracle avec Amazon Simple Storage Service (Amazon S3).

Brève description

Lorsque vous transférez des fichiers entre une instance de base de données Amazon RDS for Oracle et un compartiment Amazon S3, assurez-vous des points suivants :

  • L'instance de base de données et le compartiment S3 se trouvent dans la même région AWS.
  • L'instance de base de données dispose de l'accès requis au compartiment S3.
  • L'instance de base de données est associée à un groupe d'options qui comprend l'option S3_INTEGRATION.
  • Vous chargez des fichiers uniquement à partir de l'objet répertoire Oracle. Ce répertoire peut être un répertoire créé par l'utilisateur ou un répertoire DATA_PUMP_DIR.
  • Si vous utilisez un répertoire créé par l'utilisateur, l'utilisateur qui effectue le chargement et le téléchargement doit disposer des privilèges de lecture et d'écriture requis sur le répertoire. Pour plus d'informations, consultez Accorder des privilèges à l'utilisateur sur la base de données source.
  • Si vous copiez des données dans des sous-répertoires, spécifiez explicitement le nom du sous-répertoire lorsque vous utilisez les packages rdsadmin. Vous ne pouvez pas copier de sous-répertoires en utilisant l'option S3_INTEGRATION.

Solution

Assurez-vous que l'instance de base de données dispose de l'accès requis au compartiment S3

Pour vérifier si votre instance de base de données dispose d'un rôle AWS Identity and Access Management (IAM) avec les privilèges minimums pour charger et télécharger depuis S3, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Choisissez Databases (Bases de données) dans le panneau de navigation.
  3. Choisissez l'instance de base de données que vous voulez vérifier.
  4. Choisissez l'onglet Connectivity & security (Connectivité et sécurité).
  5. Faites défiler vers le bas jusqu'à la section Gérer les rôles IAM pour vérifier si vous avez un rôle IAM actif avec les privilèges suivants :
    S3:ListBucket
    S3:PutObject
    S3:GetObject

Vous pouvez également utiliser la commande describe-db-instances de l'AWS Command Line Interface (AWS CLI) pour vérifier si votre instance de base de données possède un rôle IAM avec ces privilèges minimums:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'
Remarque : Si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Après avoir vérifié si le rôle IAM existe, faites l'une ou l'autre des choses suivantes en fonction de votre constatation :

  • Si le rôle IAM existe, mais ne dispose pas de ces privilèges minimums, alors modifiez le rôle pour inclure ces autorisations.
  • Si vous n'avez pas de rôle IAM avec les autorisations requises, créez alors une politique IAM avec les autorisations requises pour transférer les fichiers du compartiment S3 vers Amazon RDS. Pour plus d'informations, consultez Conditions préalables à l'intégration d'Amazon RDS for Oracle avec Amazon S3. Veillez à ajouter des autorisations de niveau compartiment aux compartiments et des autorisations de niveau objet aux objets lors de la création de la politique IAM.

Si le problème des autorisations de compartiment persiste, modifiez le rôle IAM pour accorder un accès complet au compartiment S3 :

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

Important : Le rôle IAM est modifié pour accorder un accès complet uniquement pour tester si le problème est dû à des privilèges IAM. Une fois le problème résolu, ajustez les privilèges personnalisés si nécessaire.

Pour charger des fichiers dans un dossier spécifique de S3, utilisez le paramètre p_s3_prefix dans la procédure rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Assurez-vous que vous disposez des autorisations requises avant de charger les fichiers.

Par exemple, pour charger les fichiers du dossier example-folder dans le compartiment S3 example-bucket, attachez la politique IAM suivante :

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

Assurez-vous que l'instance de base de données est associée à un groupe d'options qui inclut l'option S3_INTEGRATION

Pour vérifier si vous avez un groupe d'options attaché à votre instance de base de données RDS, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Choisissez Databases (Bases de données) dans le panneau de navigation.
  3. Choisissez l'instance de base de données que vous voulez vérifier.
  4. Choisissez l'onglet Configuration.
  5. Notez le paramètre Groupes d'options.

Si ce groupe d'options n'est pas dans l'état valide et que vous essayez d'ajouter l'option S3_INTEGRATION, l'option n'est pas ajoutée avec succès. Par conséquent, assurez-vous que le groupe d'options est dans l'état valide.

Pour vérifier si ce groupe d'options est dans un état valide, exécutez la commande AWS CLI suivante :

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

Si le groupe d'options n'est pas dans un état valide, choisissez l'onglet Logs & events (Journaux et événements) pour votre base de données, puis faites défiler vers le bas jusqu'à la section Événements récents. Identifiez le composant qui rend le groupe d'options invalide et supprimez-le de la base de données.

Si le groupe d'options est dans l'état valide, vérifiez alors si l'option S3_INTEGRATION est incluse dans le groupe d'options. Pour plus d'informations, consultez Répertorier les options et les paramètres d'option d'un groupe d'options. Si l'option S3_INTEGRATION n'est pas incluse dans le groupe d'options, ajoutez-la. Pour plus d'informations, consultez Ajout de l'option d'intégration Amazon S3.

Remarque : Si l'option S3_INTEGRATION n'est pas ajoutée à votre instance de base de données, vous obtenez l'erreur ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier”. Cette erreur indique que les procédures requises pour charger et télécharger ne sont pas créées sur l'instance de base de données.

L'ajout de l'option S3_INTEGRATION à Amazon RDS n'entraîne pas de temps d'arrêt. Si vous envisagez d'utiliser l'option Appliquer immédiatement, assurez-vous qu'il n'y a pas d'actions de maintenance en attente. S'il y a des actions en attente, ces actions sont appliquées en même temps que l'intégration S3. Pour plus d'informations, consultez Maintenance d'une instance de base de données.

Assurez-vous que vous chargez/téléchargez des fichiers uniquement à partir de l'objet de répertoire Oracle ou du répertoire DATA_PUMP_DIR créé par l'utilisateur

Vous ne pouvez pas accéder aux fichiers S3 directement dans l'instance de base de données. Pour accéder à ces fichiers, vous devez copier les fichiers dans un répertoire de l'hôte RDS pour y accéder. Pour charger/télécharger des fichiers de l'instance de base de données vers un compartiment S3, procédez comme suit :

  1. Pour copier les fichiers d'exportation dans Amazon RDS vers S3, assurez-vous de créer les fichiers dump à l'aide de la commande expdp ou de l'API dbms_datapump dans le répertoire DATA_DUMP_DIR ou un répertoire personnalisé. Ensuite, utilisez la procédure rdsadmin.rdsadmin_s3_tasks.upload_to_s3 pour charger les fichiers vers S3. Pour plus d'informations sur les paramètres de cette procédure et des exemples de requêtes pour charger des fichiers, consultez Chargement de fichiers d'une instance de base de données Oracle vers un compartiment Amazon S3.
  2. Utilisez la procédure rdsadmin. rdsadmin_s3_tasks.download_from_s3 pour télécharger des fichiers depuis le compartiment S3 vers le dossier DATA_PUMP_DIR ou tout répertoire créé par l'utilisateur. Pour plus d'informations sur les paramètres de cette procédure et des exemples de requêtes de téléchargement de fichiers, consultez Téléchargement de fichiers depuis un compartiment Amazon S3 vers une instance de base de données Oracle.

Pour surveiller l'état du transfert de fichiers, consultez le journal généré lorsque vous exécutez la procédure pour charger ou télécharger les packages rdsadmin. Pour afficher ces journaux, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Choisissez Databases (Bases de données) dans le panneau de navigation.
  3. Choisissez l'instance de base de données pour laquelle vous souhaitez afficher les journaux.
  4. Choisissez l'onglet Logs & events(Journaux et événements).
  5. Sous la section Logs (Journaux), saisissez l'ID de tâche retournée par la procédure dans le filtre de recherche.
  6. Sélectionnez le fichier qui est retourné.
  7. Choisissez Watch (Surveiller) pour afficher les journaux.
    -ou-
    Choisissez Download (Télécharger) pour télécharger les journaux.

Vous pouvez également exécuter la commande suivante pour lire le fichier journal généré pendant le processus de chargement/téléchargement :

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

Remarque : Veillez à remplacer task-id par l'ID de tâche renvoyée par la procédure.