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

8 minutos de lectura
0

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

Breve descripción

Cuando transfiera archivos entre una instancia de base de datos de Amazon RDS para Oracle y un bucket de Amazon S3, compruebe las siguientes condiciones:

  • 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á asociada a un grupo de opciones que incluye la opción S3_INTEGRATION.
  • Está cargando archivos únicamente desde el objeto de directorio de Oracle. Este directorio puede ser un directorio creado por el usuario o un directorio DATA_PUMP_DIR.
  • En el caso de un directorio creado por el usuario, el usuario que realiza la carga y la descarga debe tener los privilegios de lectura y escritura necesarios en el directorio. Para obtener más información, consulte ¿Cómo administro los privilegios y roles de usuario en la instancia de base de datos de Amazon RDS para Oracle?
  • Si está copiando datos de subdirectorios, especifique el nombre del subdirectorio de forma explícita cuando utilice los paquetes rdsadmin. No puede usar la opción S3_INTEGRATION para copiar subdirectorios.

Resolución

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

Compruebe 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:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, seleccione Bases de datos.
  3. Seleccione la instancia de base de datos que desee supervisar.
  4. Seleccione la pestaña Conectividad y seguridad.
  5. Desplácese hacia abajo hasta la sección Administrar los roles de IAM para comprobar si tiene un rol de IAM activo con los siguientes privilegios:
    S3:ListBucket
    S3:PutObject
    S3:GetObject

También puede usar el comando describe-db-instances de la Interfaz de la línea de comandos de AWS (AWS CLI) para comprobar 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 se muestran errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.

Tras comprobar 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, modifique el rol para incluir estos permisos.
  • Si no tiene un rol de IAM con los permisos necesarios, cree una política de IAM. Otorgue a esta política los permisos para transferir los archivos del bucket de S3 a Amazon RDS. Asegúrese de añadir permisos a nivel de bucket a los buckets y permisos a nivel de objeto a los objetos al crear la política de IAM.

Si sigue teniendo problemas con los permisos del bucket, modifique el rol de IAM para conceder 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: Esto modifica el rol de IAM para conceder acceso total solo para comprobar 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 a 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é asociada a un grupo de opciones que incluya la opción S3_INTEGRATION

Compruebe si tiene un grupo de opciones adjunto a su instancia de base de datos de RDS:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, seleccione Bases de datos.
  3. Seleccione la instancia de base de datos que desee supervisar.
  4. Seleccione la pestaña Configuración.
  5. Tenga en cuenta el parámetro Grupos de opciones.

Si este grupo de opciones no está sincronizado y va a 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é sincronizado.

Para comprobar si este grupo de opciones está sincronizado, 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á sincronizado, seleccione la pestaña Registros y eventos de su base de datos y, a continuación, desplácese hacia abajo hasta la sección Eventos recientes. Identifique el componente que impide que el grupo de opciones esté sincronizado y elimine este componente de la base de datos.

Si el grupo de opciones está sincronizado, compruebe si la opción S3_INTEGRATION está incluida en el grupo de opciones. Para obtener más información, consulte Descripción de opciones y configuración de opciones para un grupo de opciones. Si la opción S3_INTEGRATION no está incluida en el grupo de opciones, añádala. Para obtener más información, consulte Adición de la opción de integración con Amazon S3.

Nota: Si la opción S3_INTEGRATION no se añade 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 se han creado en la instancia de base de datos.

La adición de la opción S3_INTEGRATION a Amazon RDS no genera tiempo de inactividad. Si desea utilizar la opción Aplicar inmediatamente, asegúrese de que no haya acciones de mantenimiento pendientes. Si hay acciones pendientes, estas acciones se aplicarán con la integración de Amazon S3. Para obtener más información, consulte Mantenimiento de una instancia de base de datos.

Asegúrese de cargar o descargar archivos únicamente desde el objeto de directorio de Oracle creado por el usuario o el directorio DATA_PUMP_DIR

No puede acceder a los archivos de S3 directamente en la instancia de base de datos. Para acceder a estos archivos, debe copiarlos en un directorio del host RDS para acceder a ellos. Para cargar o descargar archivos de la instancia de base de datos a un bucket de S3, siga estos pasos:

  1. Para copiar los archivos de exportación de Amazon RDS a S3, cree primero los archivos de volcado. Para ello, utilice el comando expdp o la API dbms_datapump en el directorio DATA_DUMP_DIR o personalizado. A continuación, utilice el procedimiento rdsadmin.rdsadmin_s3_tasks.upload_to_s3 para cargar archivos en S3. Para obtener información sobre los parámetros de este procedimiento y consultas de ejemplo para cargar 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 descargar archivos, consulte Descarga de archivos de un bucket de Amazon S3 a una instancia de base de datos de Oracle.

Para supervisar 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:

  1. Abra la consola de Amazon RDS.
  2. En el panel de navegación, seleccione Bases de datos.
  3. Elija la instancia de base de datos de la que quiere ver los registros.
  4. Seleccione la pestaña Registros y eventos.
  5. En la sección Registros, introduzca el identificador de tarea devuelto por el procedimiento en el filtro de búsqueda.
  6. Seleccione el archivo que se devuelve.
  7. Seleccione Observar para ver los registros.
    -o-
    Seleccione Descargar para descargar los registros.

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

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

**Nota:**Sustituya task-id por el identificador de tarea devuelto por 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?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses