Saltar al contenido

¿Cómo soluciono los problemas al integrar Amazon RDS para Oracle con Amazon S3?

7 minutos de lectura
0

Quiero solucionar problemas al integrar Amazon Relational Database Service (Amazon RDS) para Oracle con Amazon Simple Storage Service (Amazon S3).

Descripción corta

Antes de transferir archivos entre una instancia de base de datos de Amazon RDS para Oracle y un bucket de Amazon S3, confirma los siguientes requisitos:

  • La instancia de base de datos y el bucket de S3 se encuentran en la misma región de AWS.
  • El rol de AWS Identity and Access Management (IAM) para la instancia de base de datos tiene el acceso necesario al bucket de S3.
  • La instancia de base de datos está asociada a un grupo de opciones que incluye la opción S3_INTEGRATION.
  • Está cargando archivos únicamente desde el objeto de directorio de Oracle.
    Nota: Este directorio puede ser un directorio creado por el usuario o un directorio DATA_PUMP_DIR.
  • Si usas un directorio creado por el usuario, asegúrate de que el usuario que carga y descarga tiene los permisos necesarios en el directorio. 
  • Si estás copiando datos de subdirectorios, especifica el nombre del subdirectorio de forma explícita cuando utilices los paquetes rdsadmin.
    Nota: No puedes copiar subdirectorios que usen la opción S3_INTEGRATION. Solo puedes usar la opción S3_INTEGRATION para copiar archivos entre un directorio lógico de Oracle, como DATA_PUMP_DIR y Amazon S3.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de errores de la AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

Comprobación de que el rol de IAM de la instancia de base de datos tenga permisos para el bucket de S3

Sigue estos pasos:

  1. Abre la consola de Amazon RDS.

  2. En el panel de navegación, selecciona Bases de datos.

  3. Selecciona la instancia de base de datos que deseas comprobar.

  4. Selecciona la pestaña Conectividad y seguridad.

  5. Desplázate hacia abajo hasta la sección Administrar roles de IAM y comprueba si tienes un rol de IAM activo que incluya los siguientes permisos mínimos:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

    También puedes ejecutar el comando describe-db-instances:

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

    Nota: Sustituye example-db-instance por tu instancia de base de datos.

  6. Si el rol de IAM existe pero no tienes los permisos mínimos, actualiza el rol para incluir estos permisos.

Si no tienes un rol de IAM con los permisos necesarios, sigue estos pasos:

  1. Crea una política de IAM con los permisos necesarios para transferir los archivos.
    Nota: Asegúrate de agregar permisos a nivel de bucket a los buckets y permisos a nivel de objeto a los objetos al crear la política de IAM.
  2. Crea un rol de IAM para tu instancia de base de datos de Amazon RDS para Oracle y adjunta tu política al rol.
  3. Asocia tu rol de IAM a tu instancia de base de datos de Amazon RDS para Oracle.

Si el problema con los permisos del bucket persiste, usa el siguiente ejemplo de política para conceder al rol de IAM acceso total 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: Concede acceso total al bucket de S3 únicamente para comprobar si el problema se debió a una configuración incorrecta de los permisos de IAM. Tras resolver el problema, devuelve los permisos personalizados a su estado anterior.

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

Por ejemplo, para cargar archivos a la carpeta example-folder del bucket de S3 example-bucket, adjunta 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/*"
            ]
        }
    ]
}

Comprobación de que tienes un grupo de opciones adjunto a la instancia de base de datos de RDS

Sigue estos pasos:

  1. Abre la consola de Amazon RDS.

  2. En el panel de navegación, selecciona Bases de datos.

  3. Selecciona la instancia de base de datos que desees comprobar.

  4. Selecciona la pestaña Configuración y toma nota del parámetro Grupos de opciones.

  5. Para comprobar si este grupo de opciones está sincronizado, ejecuta el siguiente comando describe-db-instances:

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

    Nota: Sustituye example-db-instance por tu instancia de base de datos.

  6. Elige una de las siguientes opciones:
    Si el grupo de opciones no está sincronizado, elige la pestaña Registros y eventos y revisa la sección Eventos recientes. Identifica el componente que impide que el grupo de opciones esté sincronizado y elimina este componente de la base de datos.
    Alternativa:
    Si el grupo de opciones está sincronizado, comprueba si la opción S3_INTEGRATION está incluida en el grupo de opciones. Si la opción S3_INTEGRATION no está incluida en el grupo de opciones, agrega la opción de integración de S3.

Nota: Si se produce el error "ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier";", asegúrate de agregar la opción S3_INTEGRATION a la instancia de base de datos.

El tiempo de inactividad no se produce cuando se agrega la opción S3_INTEGRATION. Si quieres utilizar la opción Aplicar inmediatamente, asegúrate de que no haya acciones de mantenimiento pendientes. Si hay acciones de mantenimiento pendientes, esas acciones se aplicarán con la integración de S3. Para obtener más información, consulta Mantenimiento de una instancia de base de datos.

Carga y descarga de archivos

No puedes acceder a los archivos de S3 directamente en la instancia de base de datos. Para acceder a estos archivos, debes copiarlos en un directorio del host de Amazon RDS. Para cargar o descargar archivos de la instancia de base de datos a un bucket de S3, sigue estos pasos:

  1. Usa el comando expdp, la API dbms_datapump en DATA_DUMP_DIR o el directorio personalizado para crear los archivos de exportación a Amazon S3.
  2. A continuación, utiliza el procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3 para cargar archivos a S3.
  3. Utiliza 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.

Cuando ejecutes el procedimiento de carga o descarga del paquete rdsadmin, consulta los registros y supervisa el estado de la transferencia de archivos. Para ver estos eventos, sigue estos pasos:

  1. Abre la consola de Amazon RDS.

  2. En el panel de navegación, selecciona Bases de datos.

  3. Elige la instancia de base de datos que deseas ver.

  4. Selecciona la pestaña Registros y eventos.

  5. En la sección Registros, introduce el ID de la tarea del procedimiento en el filtro de búsqueda.

  6. Selecciona el archivo que se devuelve.

  7. Selecciona Ver para ver los registros o elige Descargar para descargarlos.

  8. Para leer el archivo de registro generado durante el proceso de carga o descarga, ejecuta la siguiente instrucción de selección:

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

    Nota: Sustituye task-id por el ID de tarea que devuelve el procedimiento.

Información relacionada

Integración de Amazon S3

¿Por qué mi instancia de base de datos de Amazon RDS para Oracle utiliza más almacenamiento del esperado?