Almacenamiento de objetos para Roving Edge Infrastructure

Describe cómo gestionar las tareas de almacenamiento de objetos, incluidas las relacionadas con cubos y objetos, en los dispositivos de Roving Edge Infrastructure.

En esta sección se describen los siguientes servicios de dispositivo de Roving Edge Infrastructure relacionados con el almacenamiento de objetos:

Umbrales de Rendimiento y Uso

Le recomendamos que mantenga sus umbrales de almacenamiento por debajo del 80%. Mantener este nivel es importante para optimizar el rendimiento, especialmente para operaciones de escritura intensivas. Si la capacidad del dispositivo Roving Edge Infrastructure se acerca al 80 %, transfiera datos a su arrendamiento de OCI hasta que el nivel de almacenamiento sea inferior al 80 % para lograr un funcionamiento óptimo de los servicios.

Controle de forma regular el espacio de almacenamiento disponible para todos los dispositivos de Roving Edge Infrastructure. Consulte Roving Edge Infrastructure Device Monitoring.

API de compatibilidad de Amazon S3

Con la API de compatibilidad de Amazon S3, los clientes pueden seguir utilizando sus herramientas de Amazon S3 existentes (por ejemplo, los clientes SDK) y realizar cambios mínimos en sus aplicaciones para trabajar con Object Storage. Los conjuntos de datos de la API de compatibilidad de Amazon S3 y de Object Storage son congruentes. Si se escriben datos en Object Storage mediante el uso de la API de compatibilidad de Amazon S3, se pueden volver a leer mediante la API nativa de Object Storage y, a la inversa.

Diferencias entre la API de Object Storage y la API de compatibilidad de Amazon S3

El servicio Object Storage proporcionado por Oracle Cloud Infrastructure y Amazon S3 utilizan conceptos y terminología similares. En ambos casos, los datos se almacenan como objetos en cubos. Las diferencias se encuentran en la implementación de funciones y herramientas para trabajar con objetos.

A continuación, se destacan las diferencias entre las dos tecnologías de almacenamiento:

  • Compartimentos

    Amazon S3 no utiliza compartimentos. Por defecto, los cubos creados mediante la API de compatibilidad de Amazon S3 o la API de Swift se crean en el compartimento raíz del arrendamiento de Oracle Cloud Infrastructure. En su lugar, puede designar un compartimento diferente para que la API de compatibilidad de Amazon S3 o la API de Swift creen cubos en él.

  • Espacio de nombres de cubo global

    Object Storage no utiliza un espacio de nombres de cubo global. En su lugar, el espacio de nombres sirve como contenedor de nivel superior para todos los cubos y objetos. Durante la creación de la cuenta, a cada inquilino se le asigna un nombre de espacio de nombre inmutable, generado por el sistema y único. El espacio de nombre abarca todos los compartimentos dentro de una región. Puede controlar los nombres de cubo, pero esos nombres de cubo deben ser únicos dentro de un espacio de nombre. Aunque el espacio de nombre es específico de la región, el espacio de nombre en sí es el mismo en todas las regiones. Puede tener un cubo denominado MyBucket en el oeste de EE. UU. (Phoenix) y un cubo denominado MyBucket en el centro de Alemania (Fráncfort).

  • Cifrado

    El servicio Object Storage cifra todos los datos en reposo por defecto. El cifrado no se puede activar ni desactivar mediante la API.

  • Listas de control de acceso de nivel de objeto (ACL)

    Oracle Cloud Infrastructure no utiliza ACL para objetos. En su lugar, un administrador debe configurar grupos , compartimentos y políticas que controlen qué usuarios pueden acceder a qué servicios, qué recursos y el tipo de acceso. Por ejemplo, las políticas controlan quién puede crear usuarios y grupos, crear cubos, descargar objetos y gestionar reglas y políticas relacionadas con Object Storage.

Para obtener más información, consulte Descripción general de Object Storage.

Configuración de acceso a Oracle Cloud Infrastructure

Para permitir el acceso a la aplicación desde Amazon S3 a Object Storage, debe configurar el acceso a Oracle Cloud Infrastructure y modificar la aplicación.

  1. Regístrese en Oracle Cloud Infrastructure y obtenga un espacio de nombres único.

  2. Cualquier usuario de la API de compatibilidad de Amazon S3 con Object Storage necesita permiso para trabajar con el servicio. Si no está seguro de si tiene permiso, póngase en contacto con el administrador. Para obtener más información sobre las políticas, consulte Cómo funcionan las políticas. Para conocer las políticas que permiten el uso de Object Storage, consulte Políticas comunes y la Referencia de políticas.

  3. Utilice una clave secreta de cliente existente. Una clave secreta de cliente consta del par clave de acceso/clave secreta. La creación y el uso de estas claves se describen en la siguiente sección sobre la configuración del archivo de configuración S3.

Configuración del archivo de configuración S3

Object Storage en Roving Edge Infrastructure admite la herramienta S3cmd de Amazon, además de admitir la interfaz de línea de comandos de Oracle Cloud Infrastructure. El soporte de la herramienta S3cmd de Amazon requiere que configure el archivo de configuración S3, pero también admite S3cmd.

s3cmd se puede descargar del siguiente sitio:

https://s3tools.org/download

En Macintosh y Linux, el archivo de configuración s3cmd se denomina .s3cfg y se encuentra en el directorio raíz, por ejemplo:

/home/username/($HOME)

En Windows, el archivo de configuración s3cmd se denomina s3cmd.ini y se encuentra en %USERPROFILE% -> Application Data, que normalmente es el siguiente:

c:\users\username\AppData\Roaming\s3cmd.ini

Para obtener más información, consulte: https://s3tools.org/kb/item14.htm

En el siguiente ejemplo se muestra el contenido del archivo de configuración S3cmd:

[default]
access_key = 9aa40ec9-bec3-4fab-9e5a-3584a5979d48
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
cache_file =
ca_certs_file = <Full path to the bundle.pem file>
check_ssl_hostname = False
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encoding = UTF-8
encrypt = False
expiry_date =
expiry_days =
expiry_prefix =
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase =
guess_mime_type = True
host_base = <rover_node_ip>:8019
host_bucket = <rover_node_ip>:8019
human_readable_sizes = False
ignore_failed_copy = False
invalidate_default_index_on_cf = False
invalidate_default_index_root_on_cf = True
invalidate_on_cf = False
list_md5 = False
log_target_prefix =
max_delete = -1
mime_type =
multipart_chunk_size_mb = 15
preserve_attrs = True
progress_meter = True
proxy_host =
proxy_port = 0
put_continue = False
recursive = False
recv_chunk = 4096
reduced_redundancy = False
restore_days = 1
secret_key = <Your secret key, see below>
send_chunk = 4096
server_side_encryption = False
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = True
use_mime_magic = True
verbosity = WARNING
website_endpoint = https://<rover_node_ip>:8015
website_error =

Para configurar el archivo de configuración S3cmd para su uso con Roving Edge Infrastructure:

  1. Actualice el campo access_key:

    1. Inicie sesión en la consola de dispositivos de Roving Edge Infrastructure del dispositivo adecuado.

    2. Abra el menú de navegación y seleccione Gestión de identidad > Usuarios. Aparecerá la página Usuarios. Todos los usuarios se muestran en formato tabular.

    3. Haga clic en el usuario cuya clave de acceso desea utilizar en el archivo de configuración S3cmd. Aparece la página Detalles del usuario.

    4. Haga clic en Claves secretas de cliente en Recursos. Aparecerá la página Claves secretas de cliente. Todas las claves secretas de cliente se muestran en formato tabular.

    5. Copie la clave de acceso y péguela en el valor del campo access_key del archivo de configuración s3cmd.

  2. Actualice el campo ca_certs_file: introduzca la ruta de acceso completa del archivo bundle.pem, por ejemplo:

    /Users/user_name/.oci/bundle.pem

    Si no tiene el archivo ca certs, descárguelo con el siguiente comando:

    echo -n | openssl s_client -showcerts -connect rover_node_IP:8015 | 
    sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > bundle.pem
  3. Defina el campo check_ssl_hostname en false.

  4. Actualice el campo host_base: introduzca rover_node_IP:8019.

  5. Actualice el campo host_bucket: introduzca rover_node_IP:8019.

  6. Actualice el campo secret_key:

    1. Inicie sesión en la consola de dispositivos de Roving Edge Infrastructure del dispositivo adecuado.

    2. Abra el menú de navegación y seleccione Gestión de identidad > Usuarios. Aparece la página Usuarios. Todos los usuarios se muestran en formato tabular.

    3. Haga clic en el usuario cuya clave secreta desea utilizar en el archivo de configuración S3cmd. Aparece la página Detalles del usuario.

    4. Haga clic en Claves secretas de cliente en Recursos. Aparecerá la página Claves secretas de cliente. Todas las claves secretas de cliente se muestran en formato tabular.

    5. Haga clic en Generar clave secreta. La Clave secreta generada se mostrará en el cuadro de diálogo Generar clave secreta. Al mismo tiempo, Oracle genera la Clave de acceso que está emparejada con la Clave secreta. La clave secreta de cliente recién generada se agregará a la lista Claves secretas de cliente.

    6. Copie la clave y péguela en el valor del campo secret_key en el archivo de configuración s3cmd.

  7. Guardar y cerrar el archivo de configuración s3cmd.

Soporte de la API de compatibilidad de Amazon S3

El soporte de la API de compatibilidad de Amazon S3 se proporciona en el nivel de cubo y en el nivel de objeto.

API de cubo

Se admiten las siguientes API de cubo:

API de objeto

Se admiten las siguientes API de objeto:

API de carga de varias partes

Se admiten las siguientes API de carga de varias partes:

Soporte de SSE-C

Con las cabeceras de API opcionales, puede proporcionar su propia clave de cifrado AES de 256 bits que se utiliza para cifrar y descifrar objetos cargados y descargados en Object Storage.

Si desea utilizar sus propias claves para el cifrado de servidor, especifique las tres cabeceras de solicitud siguientes con la información de clave de cifrado:

Cabeceras Descripción API soportadas
x-amz-server-side-encryption-customer-algorithm Especifica "AES256" como algoritmo de cifrado.

GetObject

HeadObject

PutObject

InitiateMultipartUpload

UploadPart

x-amz-server-side-encryption-customer-key Especifica la clave de cifrado de 256 bits codificada en base64 que se utilizará para cifrar o descifrar los datos.
x-amz-server-side-encryption-customer-key-md5 Especifica el resumen MD5 de 128 bits codificado en base64 de la clave de cifrado. Este valor se utiliza para comprobar la integridad de la clave de cifrado.

El almacenamiento de objetos tiene API distintas para copiar objetos y copiar partes. Amazon S3 utiliza la presencia de las siguientes cabeceras en PutObject y UploadPart para determinar las operaciones de copia. Para copiar un objeto de origen cifrado con una clave SSE-C, debe especificar estas tres cabeceras para que Object Storage pueda descifrar el objeto.

Cabeceras Descripción API soportadas
x-amz-copy-source-server-side-encryption-customer-algorithm Especifica "AES256" como algoritmo de cifrado que se utilizará para descifrar el objeto de origen.

PutObject

UploadPart

x-amz-copy-source-server-side-encryption-customer-key Especifica la clave de cifrado de 256 bits codificación base64 que se utilizará para descifrar el objeto de origen.
x-amz-copy-source-server-side-encryption-customer-key-md5 Especifica el resumen MD5 de 128 bits codificado en base64 de la clave de cifrado utilizada para descifrar el objeto de origen.

Soporte para el cifrado utilizando sus propias claves en Vault

Con las cabecera de API opcionales, puede proporcionar su propia clave de cifrado en Vault, que se utiliza para cifrar los objetos cargados en Object Storage.

Si desea utilizar sus propias claves en Vault para el cifrado de servidor, especifique la siguiente cabecera de solicitud con el OCID de la clave de Vault:

Cabeceras Descripción API soportadas
x-amz-server-side-encryption-aws-kms-key-id OCID de una clave existente en Vault que se utilizará para cifrar el objeto.

PutObject

InitiateMultipartUpload

UploadPart

Clientes de Amazon S3 soportados

Puede configurar varias aplicaciones cliente para comunicarse con los puntos finales compatibles con Amazon S3 de Object Storage. En este tema se proporcionan algunos ejemplos de configuración para clientes de Amazon S3 soportados. Revise los requisitos en Configuración de acceso a Oracle Cloud Infrastructure.

SDK de AWS para Java

El SDK de AWS para el repositorio de Java, la descarga de archivos y los enlaces de documentación están disponibles en GitHub: https://github.com/aws/aws-sdk-java.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Java para utilizar Object Storage


                // Put the Access Key and Secret Key here
                
AWSCredentialsProvider credentials = new AWSStaticCredentialsProvider(new BasicAWSCredentials(
 "gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
 "7fa22331ebe62bf4605dc9a42aaeexampleuniqueID"))));

// Your namespace
String namespace = "rover-namespace";

// The region to connect to
String region = "us-ashburn-1";

// Create an S3 client pointing at the region
String endpoint = String.format("%s.compat.objectstorage.%s.oraclecloud.com",namespace,region);
AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(endpoint, region);
AmazonS3 client = AmazonS3Client.builder()
 .standard()
 .withCredentials(credentials)
 .withEndpointConfiguration(endpointConfiguration)
 .disableChunkedEncoding()
 .enablePathStyleAccess()
 .build();

SDK de AWS para Javascript

El SDK de AWS para el repositorio de Javascript, los enlaces de documentación y las instrucciones de instalación están disponibles en GitHub: https://github.com/aws/aws-sdk-js.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Javascript para utilizar Object Storage

s3 = new AWS.S3({
  region: 'us-ashburn-1',
  endpoint: 'https://' + rover-namespace + '.compat.objectstorage.us-ashburn-1.oraclecloud.com',
  accessKeyId: 'gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID',
  secretAccessKey: '7fa22331ebe62bf4605dc9a42aaeexampleuniqueID',
  s3ForcePathStyle: true,
  signatureVersion: 'v4',
});

SDK de AWS para Python (Boto3)

El SDK de AWS para el repositorio de Python (Boto3), los enlaces de documentación y las instrucciones de instalación están disponibles en GitHub: https://github.com/boto/boto3.

A continuación se muestra un ejemplo de configuración del SDK de AWS para Python para utilizar Object Storage

import boto3
  
s3 = boto3.resource(
    's3',
    aws_access_key_id="gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID",
    aws_secret_access_key="7fa22331ebe62bf4605dc9a42aaeexampleuniqueID",
    region_name="us-phoenix-1", # Region name here that matches the endpoint
    endpoint_url="https://rover-namespace.compat.objectstorage.us-phoenix-1.oraclecloud.com" # Include your rover-namespace in the URL
)
  
# Print out the bucket names
for bucket in s3.buckets.all():
    print bucket.name

Montaje de cubos de Object Storage mediante s3fs

s3fs permite a Linux y macOS montar Object Storage como un sistema de archivos. El repositorio s3fs, los enlaces de documentación, las instrucciones de instalación y los ejemplos están disponibles en GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

s3fs no es adecuado para todas las aplicaciones. Tenga en cuenta las siguientes limitaciones:

  • Los servicios de almacenamiento de objetos tienen una alta latencia en comparación con los sistemas de archivos locales por el tiempo hasta el primer byte y la falta de acceso de escritura aleatoria. s3fs obtiene el mejor rendimiento en cargas de trabajo que solo leen archivos grandes.

  • No es posible actualizar parcialmente un archivo, por lo que cambiar un único byte requiere cargar el archivo completo.

  • Las escrituras aleatorias o los anexos a archivos requieren que se vuelva a escribir todo el archivo.

  • s3fs no soporta las descargas parciales, por lo que incluso si solo desea leer un byte de un archivo, debe descargar el archivo completo.

  • s3fs no soporta las copias de archivos en el servidor. Los archivos duplicados deben descargarse primero en el cliente y, a continuación, cargarse en la nueva ubicación.

  • Las operaciones de metadatos, como mostrar directorios, tienen un rendimiento bajo debido a la latencia de red.

  • s3fs no soporta los enlaces físicos ni los cambios de nombre atómicos de archivos o directorios.

  • s3fs no proporciona coordinación entre varios clientes que monten el mismo cubo.

Para montar un cubo de Object Storage como un sistema de archivos:

  1. Siga las instrucciones de instalación que se proporcionan en GitHub: https://github.com/s3fs-fuse/s3fs-fuse.

    Si no puede realizar la instalación con un paquete creado previamente, siga las instrucciones de compilación aquí: https://github.com/s3fs-fuse/s3fs-fuse/blob/master/COMPILATION.md.

  2. Revise y realice los requisitos en Configuración de acceso a Oracle Cloud Infrastructure. Necesita un par clave de acceso/clave secreta y una política de IAM adecuada que le permita montar un cubo como un sistema de archivos. Por ejemplo:
    Allow group s3fsAdmins to manage object-family in tenancy
  3. Introduzca las credenciales del par clave de acceso/clave secreta en un archivo de credenciales ${HOME}/.passwd-s3fs}:

    cat ${HOME}/.passwd-s3fs
    access_key:secret_key

    Por ejemplo:

    cat ${HOME}/.passwd-s3fs
    gQ4+YC530sBa8qZI6WcbUbtH8oar0exampleuniqueID:7fa22331ebe62bf4605dc9a42aaeexampleuniqueID

    A continuación, defina permisos de solo propietario para el archivo de credenciales:

    chmod 600 ${HOME}/.passwd-s3fs
  4. Cree un punto de montaje para montar un cubo de Object Storage:
    mkdir /path/to/local_directory_name
    s3fs bucket_name local_directory_name -o passwd_file=${HOME}/.passwd-s3fs 
    -o url=https://rover-namespace.compat.objectstorage.region_ID.oraclecloud.com 
    -o use_path_request_style -o kernel_cache -o multipart_size=128 -o parallel_count=50 -o multireq_max=100 -o max_background=1000 
    [-o endpoint=region_ID]

    Donde:

    • bucket_name es el nombre del cubo que desea montar.

    • local_directory_name es el nombre del directorio local en el que desea montar el cubo.

    • namespace_name es el único generado por el sistema asignado a su arrendamiento en el momento de la creación de la cuenta. Puede utilizar la CLI o la consola para obtener el nombre del espacio de nombres. Consulte Descripción de los espacios de nombres de Object Storage para obtener más información.

    • region_ID es el identificador de región donde reside el cubo. Consulte Regiones y dominios de disponibilidad para obtener más información.

    • endpoint: si desea montar un cubo creado en su región principal, no necesita especificar el parámetro endpoint. Si desea montar un cubo creado en una región diferente, debe especificar el parámetro endpoint.

  5. Si desea que el cubo se monte automáticamente como un sistema de archivos al iniciar el sistema mediante s3fs, agregue lo siguiente al archivo /etc/fstab:

    bucket_name /path/to/local_directory_name fuse.
    s3fs use_path_request_style,passwd_file=/root/.s3fs-password,url=https://rover-namespace.
    compat.objectstorage.region_ID.oraclecloud.com,endpoint=region_ID 
    kernel_cache,multipart_size=128,parallel_count=50,multireq_max=100,max_background=1000,_netdev
  6. Para verificar el montaje del cubo s3fs, ejecute el comando df -h. La salida muestra el nuevo punto de montaje del cubo. Vaya hasta el nuevo punto de montaje y ejecute el comando ls para mostrar todos los objetos del cubo.

Para solucionar problemas de montaje de un cubo de Object Storage

  • Si recibe errores de autorización, revise las políticas de IAM y asegúrese de tener una que le permita montar un cubo como un sistema de archivos. Por ejemplo:
    Allow group s3fsAdmins to manage object-family in tenancy
  • Si intenta montar un cubo creado en una región distinta de su región principal, debe especificar esa otra región en los parámetros url y endpoint.
  • Si monta un cubo como usuario raíz, otros usuarios no podrán mostrar objetos o acceder a ellos en el cubo a menos que agregue -o allow_other al comando s3fs o allow_other en las opciones de montaje /etc/fstab. También puede proporcionar parámetros de UID y GID específicos para especificar detalles de acceso de usuario.
  • Si ha revisado y verificado las soluciones de solución de problemas y necesita ponerse en contacto con el soporte, vuelva a ejecutar el comando de montaje en modo DEBUG para obtener más detalles sobre los fallos. Agregue lo siguiente al final del comando y guarde la salida:
    -o dbglevel=info -f -o curldbg
Para desmontar un cubo de Object Storage de un sistema de archivos, ejecute el siguiente comando y especifique el punto de montaje:
umount /path/to/local_directory_name