Comment puis-je résoudre les problèmes rencontrés lors de l'intégration d'Amazon RDS for Oracle à Amazon S3 ?

Lecture de 8 minute(s)
0

Je souhaite résoudre des problèmes et des erreurs liés à l'intégration d'Amazon Relational Database Service (Amazon RDS) for Oracle à Amazon Simple Storage Service (Amazon S3).

Brève description

Pour pouvoir transférer des fichiers entre une instance de base de données Amazon RDS for Oracle et un compartiment Amazon S3, les conditions suivantes doivent être remplies :

  • L'instance de base de données et le compartiment S3 doivent se trouver dans la même région AWS.
  • L'instance de base de données doit disposer de l'accès requis au compartiment S3.
  • L'instance de base de données doit être associée à un groupe d'options qui comprend l'option S3_INTEGRATION.
  • Vous devez uniquement charger des fichiers à partir de l'objet de répertoire Oracle. Ce répertoire peut être un répertoire créé par l'utilisateur ou un répertoire DATA_PUMP_DIR.
  • Dans le cas d'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 en savoir plus, reportez-vous à Comment puis-je gérer les privilèges et les rôles des utilisateurs dans mon instance de base de données Amazon RDS for Oracle ?
  • Si vous copiez des données vers des sous-répertoires, vous devez spécifier le nom du sous-répertoire de manière explicite lorsque vous utilisez les packages rdsadmin. Vous ne pouvez pas utiliser l'option S3_INTEGRATION pour copier des sous-répertoires.

Résolution

Vérifiez que l'instance de base de données dispose de l'accès requis au compartiment S3

Vérifiez que votre instance de base de données possède un rôle AWS Identity and Access Management (IAM) doté de moindres privilèges pour charger et télécharger depuis S3 :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, choisissez Bases de données.
  3. Choisissez l'instance de base de données que vous souhaitez vérifier.
  4. Choisissez l'onglet Connectivité et sécurité.
  5. Faites défiler la page jusqu'à la section Gérer les rôles IAM pour vérifier que vous disposez bien d'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'interface de la ligne de commande AWS (AWS CLI) pour vérifier si votre instance de base de données possède un rôle IAM doté des moindres privilèges suivants :

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

Remarque : si des erreurs surviennent lors de l'exécution des commandes AWS CLI, vérifiez que vous utilisez la version la plus récente de l'AWS CLI.

Après avoir confirmé la présence du rôle IAM, effectuez l'une des opérations suivantes en fonction des cas :

  • Si le rôle IAM existe, mais ne dispose pas de moindres privilèges, modifiez-le pour inclure ces autorisations.
  • Si vous ne disposez pas d'un rôle IAM doté des autorisations requises, créez une politique IAM. Accordez à cette politique les autorisations nécessaires pour pouvoir transférer les fichiers du compartiment S3 vers Amazon RDS. Lors de la création de votre politique IAM, souvenez-vous d'ajouter des autorisations au niveau du compartiment aux compartiments, ainsi que des autorisations au niveau de l'objet aux objets.

Si les autorisations du compartiment continuent de poser problème, 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 : cette opération accorde uniquement un accès complet au rôle IAM dans le but de tester si le problème rencontré est lié aux privilèges IAM. Une fois le problème résolu, vous pourrez ajuster les privilèges personnalisés en fonction de vos besoins.

Pour télé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. Vérifiez que vous disposez bien des autorisations nécessaires avant de télécharger les fichiers.

Par exemple, pour télécharger des fichiers dans le dossier example-folder du compartiment S3 example-bucket, vous devez attacher 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 votre instance de base de données est associée à un groupe d'options qui comprend l'option S3_INTEGRATION

Vérifiez si un groupe d'options est attaché à votre instance de base de données RDS :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, choisissez Bases de données.
  3. Choisissez l'instance de base de données que vous souhaitez vérifier.
  4. Ouvrez l'onglet Configuration.
  5. Notez le paramètre Groupes d'options.

Si ce groupe d'options n'est pas synchronisé, il ne sera pas possible d'ajouter l'option S3_INTEGRATION. Il est donc important de s'assurer que le groupe d'options est synchronisé.

Pour vérifier si ce groupe d'options est synchronisé, 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 synchronisé, sélectionnez l'onglet Journaux et événements de votre base de données, puis faites défiler la page jusqu'à la section Événements récents. Identifiez le composant qui empêche le groupe d'options d'être synchronisé et supprimez-le de la base de données.

Si le groupe d'options est synchronisé, vérifiez si l'option S3_INTEGRATION est comprise dans le groupe d'options. Pour en savoir plus, reportez-vous à la Liste des options et des paramètres d'options pour un groupe d'options. Si l'option S3_INTEGRATION n'est pas comprise dans le groupe d'options, ajoutez-la. Pour en savoir plus, reportez-vous à 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 obtiendrez l'erreur ORA-00904 : « RDSADMIN ».« RDSADMIN_S3_TASKS ».« UPLOAD_TO_S3 » : identifiant non valide ». Cette erreur indique que les procédures requises pour le chargement et le téléchargement 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 souhaitez utiliser l'option Appliquer immédiatement, assurez-vous d'abord qu'aucune opération de maintenance n'est en attente. Si des actions sont en attente, celle-ci prendront effet avec l'intégration d'Amazon S3. Pour en savoir plus, reportez-vous à Maintenance d'une instance de base de données.

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

Les fichiers S3 ne sont pas directement accessibles depuis l'instance de base de données. Pour accéder à ces fichiers, vous devez les copier vers un répertoire de l'hôte RDS. Pour charger ou télécharger des fichiers depuis l'instance de base de données vers un compartiment S3, procédez comme suit :

  1. Pour pouvoir copier les fichiers d'exportation d'Amazon RDS vers S3, commencez par créer les fichiers de vidage. Pour ce faire, utilisez la commande expdp ou l'API dbms_datapump dans le répertoire DATA_DUMP_DIR ou dans le répertoire personnalisé. Utilisez ensuite la procédure rdsadmin.rdsadmin_s3_tasks.upload_to_s3 pour charger vos fichiers dans S3. Pour en savoir plus sur les paramètres de cette procédure et obtenir des exemples de requêtes pour le chargement de fichiers, reportez-vous à Chargement de fichiers depuis 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 autre répertoire créé par l'utilisateur. Pour en savoir plus sur les paramètres de cette procédure et obtenir des exemples de requêtes pour des fichiers de téléchargement, reportez-vous à Téléchargement de fichiers d'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é lors de l'exécution de la procédure de chargement ou de téléchargement des packages rdsadmin :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, choisissez Bases de données.
  3. Choisissez l'instance de base de données pour laquelle vous souhaitez afficher les journaux.
  4. Choisissez l'onglet Journaux et événements.
  5. Dans la section Journaux, entrez l'ID de tâche renvoyé par la procédure dans le filtre de recherche.
  6. Sélectionnez le fichier renvoyé.
  7. Choisissez Regarder pour afficher les journaux.
    -ou-
    Choisissez 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 ou de téléchargement :

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

Remarque : remplacez task-id par l'ID de tâche renvoyé par la procédure.

Informations connexes

Intégration Amazon S3

Pourquoi mon instance de base de données Amazon RDS for Oracle utilise-t-elle plus d'espace de stockage que prévu ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 8 mois