¿Cómo puedo solucionar los problemas al integrar Amazon RDS for Oracle con Amazon S3?

Última actualización: 29 de octubre de 2021

Quiero solucionar los problemas y errores que surgen al integrar Amazon Relational Database Service (Amazon RDS) for Oracle con Amazon Simple Storage Service (Amazon S3).

Descripción corta

Al transferir archivos entre una instancia de base de datos de Amazon RDS for Oracle y un bucket de Amazon S3, asegúrese de lo siguiente:

  • La instancia de base de datos y el bucket de S3 se encuentran en la misma región de AWS.
  • La instancia de base de datos tiene el acceso necesario al bucket de S3.
  • La instancia de base de datos está adjuntada a un grupo de opciones que incluye la opción S3_INTEGRATION.
  • Está cargando archivos únicamente desde el objeto directorio de Oracle. Este directorio puede ser un directorio creado por el usuario o un directorio DATA_PUMP_DIR.
  • Si está utilizando un directorio creado por el usuario, el usuario que realiza la carga y descarga debe tener los privilegios de lectura y escritura necesarios en dicho directorio. Para obtener más información, consulte Concesión de privilegios al usuario de la base de datos de origen.
  • Si está copiando datos dentro de subdirectorios, especifique el nombre del subdirectorio explícitamente cuando utilice los paquetes rdsadmin. No se pueden copiar subdirectorios utilizando la opción S3_INTEGRATION.

Resolución

Asegúrese de que la instancia de base de datos tiene el acceso necesario al bucket de S3

Para verificar si su instancia de base de datos tiene un rol de AWS Identity and Access Management (IAM) con los privilegios mínimos para cargar y descargar desde S3, haga lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Databases (Bases de datos).
  3. Elija la instancia de base de datos que desea verificar.
  4. Elija la pestaña Connectivity & security (Conectividad y seguridad).
  5. Desplázate hacia abajo hasta la sección Manage IAM roles (Administrar roles de IAM) para verificar si tiene un rol de IAM activo con los siguientes privilegios:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

También puede utilizar el comando de la AWS Command Line Interface (AWS CLI) describe-db-instances para verificar si su instancia de base de datos tiene un rol de IAM con estos privilegios mínimos:

aws rds describe-db-instances \
--db-instance-identifier example-db-instance \
--query 'DBInstances[*].[AssociatedRoles[*]]'
Nota: si recibe errores al ejecutar comandos de AWS CLI, asegúrese de que utiliza la versión más reciente de AWS CLI.

Después de verificar si el rol de IAM existe, realice una de las siguientes acciones en función de sus resultados:

  • Si el rol de IAM existe, pero no tiene estos privilegios mínimos, entonces modifique el rol para incluir estos permisos.
  • Si no tiene un rol de IAM con los permisos requeridos, cree una política de IAM con los permisos necesarios para transferir los archivos desde el bucket de S3 a Amazon RDS. Para obtener más información, consulte Requisitos previos para la integración de Amazon RDS for Oracle con Amazon S3. Asegúrese de agregar permisos de nivel de bucket a los buckets y permisos de nivel de objeto a los objetos al crear la política de IAM.

Si el problema con los permisos del bucket aún persiste, modifique el rol de IAM para conceder acceso completo al bucket de S3:

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

Importante: El rol de IAM se modifica para conceder acceso completo únicamente para probar si el problema se debe a los privilegios de IAM. Una vez resuelto el problema, ajuste los privilegios personalizados según sea necesario.

Para cargar archivos en una carpeta específica de S3, utilice el parámetro p_s3_prefix del procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3. Asegúrese de tener los permisos necesarios antes de cargar los archivos.

Por ejemplo, para cargar archivos de la carpeta example-folder del bucket de S3 example-bucket, adjunte la siguiente política de 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/*"
            ]
        }
    ]
}

Asegúrese de que la instancia de base de datos está adjuntada a un grupo de opciones que incluye la opción S3_INTEGRATION

Para verificar si tiene un grupo de opciones adjuntado a su instancia de base de datos RDS, haga lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Databases (Bases de datos).
  3. Elija la instancia de base de datos que desea verificar.
  4. Elija la pestaña Configuration (Configuración).
  5. Fíjese en el parámetro Option groups.

Si este grupo de opciones no está en estado válido, y está intentando agregar la opción S3_INTEGRATION, la opción no se agrega correctamente. Por lo tanto, asegúrese de que el grupo de opciones esté en el estado válido.

Para verificar si este grupo de opciones está en estado válido, ejecute el siguiente comando de la AWS CLI:

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

Si el grupo de opciones no está en estado válido, elija la pestaña Logs & events (Registros y eventos) de la base de datos y, a continuación, desplácese hacia abajo hasta la sección Recent events (Eventos recientes). Identifique el componente que hace que el grupo de opciones no sea válido y elimine este componente de la base de datos.

Si el grupo de opciones está en estado válido, verifique si la opción S3_INTEGRATION está incluida en el grupo de opciones. Para obtener más información, consulte Enumeración de las opciones y la configuración de opciones de un grupo de opciones. Si la opción S3_INTEGRATION no está incluida en el grupo de opciones, agréguela. Para obtener más información, consulte Cómo agregar la opción de integración de Amazon S3.

Nota: Si la opción S3_INTEGRATION no se agrega a la instancia de base de datos, aparece el error ORA-00904: “RDSADMIN”. “RDSADMIN_S3_TASKS”. “UPLOAD_TO_S3”: invalid identifier”. Este error indica que los procedimientos necesarios para cargar y descargar no están creados en la instancia de base de datos.

La agregación de la opción S3_INTEGRATION a Amazon RDS no genera tiempo de inactividad. Si planeas utilizar la opción Apply Immediately (Aplicar inmediatamente), asegúrese de que no hay acciones de mantenimiento pendientes. Si hay acciones pendientes, éstas se aplican junto con la integración de S3. Para obtener más información, consulte Mantenimiento de una instancia de base de datos.

Asegúrese de que está cargando/descargando archivos únicamente desde el objeto de directorio de Oracle creado por el usuario o el directorio DATA_PUMP_DIR

No puedes acceder a los archivos de S3 directamente en la instancia de base de datos. Para acceder a estos archivos, debe copiar los archivos a un directorio en el host RDS para acceder a él. Para cargar o descargar archivos de la instancia de base de datos a un bucket de S3, haga lo siguiente:

  1. Para copiar los archivos de exportación en Amazon RDS a S3, asegúrese de crear los archivos de volcado mediante el comando expdp o la API dbms_datapump en el directorio DATA_DUMP_DIR o en un directorio personalizado. A continuación, utilice el procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3 para cargar los archivos en S3. Para obtener información sobre los parámetros de este procedimiento y consultas de ejemplo para la carga de archivos, consulte Carga de archivos desde una instancia de base de datos de Oracle a un bucket de Amazon S3.
  2. Utilice el procedimiento rdsadmin. rdsadmin_s3_tasks.download_from_s3 para descargar archivos del bucket de S3 a la carpeta DATA_PUMP_DIR o a cualquier directorio creado por el usuario. Para obtener información sobre los parámetros de este procedimiento y consultas de ejemplo para la descarga de archivos, consulte Descarga de archivos de un bucket de Amazon S3 a una instancia de base de datos de Oracle.

Para monitorear el estado de la transferencia de archivos, consulte el registro que se genera al ejecutar el procedimiento para cargar o descargar los paquetes de rdsadmin. Para ver estos registros, haga lo siguiente:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, elija Databases (Bases de datos).
  3. Elija la instancia de base de datos de la que desea ver los registros.
  4. Elija la pestaña Logs & events (Registros y eventos).
  5. En la sección Logs (Registros), ingrese el ID de tarea devuelto por el procedimiento en el filtro de búsqueda.
  6. Seleccione el archivo devuelto.
  7. Elija Watch (Ver) para ver los registros.
    -o bien-
    Elija Download (Descargar) para descargar los registros.

También puede ejecutar el siguiente comando para leer el archivo de registros generado durante el proceso de carga/descarga:

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

Nota: Asegúrese de sustituir task-id por el ID de tarea devuelto por el procedimiento.