El Servicio de transferencia de almacenamiento puede escuchar notificaciones de eventos en AWS o Google Cloud para transferir automáticamente los datos que se agregaron o actualizaron en la fuente ubicación. Las transferencias controladas por eventos son compatibles con AWS S3 o Cloud Storage a Cloud Storage.
Las transferencias controladas por eventos escuchan las notificaciones de eventos de Amazon S3 enviados a Amazon SQS para fuentes de AWS S3. Las fuentes de Cloud Storage envían notificaciones a una suscripción a Pub/Sub.
Beneficios de las transferencias controladas por eventos
Debido a que las transferencias controladas por eventos detectan cambios en el bucket de origen, las actualizaciones se copian en el destino casi en tiempo real. Servicio de transferencia de almacenamientoo no necesita para ejecutar una operación de lista con la fuente, lo que ahorra tiempo y dinero.
En los casos de uso, se incluye lo siguiente:
Análisis basado en eventos: Replica los datos de AWS en Cloud Storage para realizar análisis y procesamiento.
Replicación de Cloud Storage: Habilita objetos asíncronos y automáticos entre buckets de Cloud Storage.
Las transferencias controladas por eventos con el Servicio de transferencia de almacenamiento difieren de replicación típica de Cloud Storage a través de la creación una copia de tus datos en un bucket diferente.
Esto proporciona beneficios como los siguientes:
- Mantener los datos de desarrollo y producción en espacios de nombres separados
- Compartir datos sin proporcionar acceso al bucket original
- Crear una copia de seguridad en un continente diferente o en un área que no está cubierta por el almacenamiento dual y multirregional
Configuración de DR/HA: Replica objetos de la fuente al destino de copia de seguridad en orden de minutos:
- Copia de seguridad multinube: Crea una copia de la copia de seguridad de AWS S3 en Cloud Storage.
- Copia de seguridad entre regiones o proyectos: Crea una copia del bucket de Cloud Storage en una región o un proyecto diferente.
Migración en vivo: La transferencia basada en eventos puede potenciar la migración con poco tiempo de inactividad, del orden de minutos, como un paso de seguimiento de la migración por lotes única.
Configura transferencias impulsadas por eventos desde Cloud Storage
Las transferencias controladas por eventos de Cloud Storage usan notificaciones de Pub/Sub para saber cuándo se modificaron o agregaron objetos en el bucket de origen. No se detectan las eliminaciones de objetos. Si borras un objeto en la fuente, no se borrará el objeto asociado en el bucket de destino.
Configura permisos
Busca el nombre del agente de servicio del Servicio de transferencia de almacenamiento para tu proyecto:
Ve a la página de referencia de
googleServiceAccounts.get
.Se abrirá un panel interactivo con el título Prueba este método.
En el panel, en Parámetros de la solicitud, ingresa tu el ID del proyecto. El proyecto que especifiques aquí debe ser el proyecto que usas para administrar el Servicio de transferencia de almacenamiento, que puede ser diferente del en el proyecto del bucket.
Haz clic en Ejecutar.
El correo electrónico del agente de servicio se muestra como el valor de
accountEmail
. Copia este valor.El correo electrónico del agente de servicio usa el formato
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
.Otorga el rol
Pub/Sub Subscriber
al agente de servicio del Servicio de transferencia de almacenamiento.Consola de Cloud
Sigue las instrucciones en Cómo controlar el acceso a través de la consola de Google Cloud para otorgar el rol
Pub/Sub Subscriber
al servicio de Storage Transfer Service. El rol se puede otorgar a nivel de tema, suscripción o proyecto.gcloud
CLISigue las instrucciones que se indican en Cómo configurar una política para agregar la siguiente vinculación:
{ "role": "roles/pubsub.subscriber", "members": [ "serviceAccount:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com" }
Configura Pub/Sub
Asegúrate de haber cumplido con las Requisitos para usar Pub/Sub con Cloud Storage.
Configura notificaciones de Pub/Sub para Cloud Storage:
gcloud storage buckets notifications create gs://BUCKET_NAME --topic=TOPIC_NAME
Crea una suscripción de extracción para el tema:
gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_NAME --ack-deadline=300
Crear un trabajo de transferencia
Puedes usar la API de REST o la consola de Google Cloud para crear un trabajo de transferencia basado en eventos.
No incluyas información sensible, como información de identificación personal (PII) ni datos de seguridad en el nombre de la tarea de transferencia. Los nombres de recursos pueden ser se propagan a los nombres de otros recursos de Google Cloud y pueden exponerse a los sistemas internos de Google fuera de tu proyecto.
Consola de Cloud
Ve a la página Crear trabajo de transferencia en la consola de Google Cloud.
Selecciona Cloud Storage como el origen y el destino.
Como Modo de programación, selecciona Basado en eventos y haz clic en Siguiente paso.
Selecciona el bucket de origen para esta transferencia.
En la sección Transmisión del evento, ingresa el nombre de la suscripción:
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
De manera opcional, define los filtros y, luego, haz clic en Paso siguiente.
Selecciona el bucket de destino para esta transferencia.
De manera opcional, ingresa una hora de inicio y finalización para la transferencia. Si no especificas un horario, la transferencia comenzará de inmediato y se ejecutará hasta que se detenga de forma manual.
Especifica las opciones de transferencia. Puedes obtener más información en el Página Crear transferencias
Haz clic en Crear.
Una vez creado, el trabajo de transferencia comienza a ejecutarse y un objeto de escucha de eventos espera notificaciones en la suscripción de Pub/Sub. En la página de detalles del trabajo, se muestra una operación por hora y, además, incluye detalles sobre los datos transferidos para cada trabajo.
REST
Para crear una transferencia controlada por eventos con la API de REST, envía el siguiente JSON al extremo transferJobs.create:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "gcsDataSource" { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
y eventStreamExpirationTime
son opcionales.
Si se omite la hora de inicio, la transferencia comienza de inmediato. si el final
se omite el tiempo de transferencia, la transferencia continúa hasta que se detiene manualmente.
Bibliotecas cliente
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente del Servicio de transferencia de almacenamiento, consulta las Bibliotecas cliente del Servicio de transferencia de almacenamiento. Para obtener más información, consulta la API del Servicio de transferencia de almacenamiento Go documentación de referencia.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente del Servicio de transferencia de almacenamiento, consulta las Bibliotecas cliente del Servicio de transferencia de almacenamiento. Para obtener más información, consulta la API del Servicio de transferencia de almacenamiento Java documentación de referencia.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente para el Servicio de transferencia de almacenamiento, consulta Bibliotecas cliente del Servicio de transferencia de almacenamiento. Si deseas obtener más información, consulta la documentación de referencia de la API de Node.js del Servicio de transferencia de almacenamiento.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente del Servicio de transferencia de almacenamiento, consulta las Bibliotecas cliente del Servicio de transferencia de almacenamiento. Si deseas obtener más información, consulta la documentación de referencia de la API de Python del Servicio de transferencia de almacenamiento.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Configura transferencias basadas en eventos desde AWS S3
Las transferencias basadas en eventos de AWS S3 usan notificaciones de Amazon Simple Queue Service (SQS) para saber cuándo se modificaron o agregaron objetos en el bucket de origen. No se detectan las eliminaciones de objetos. borrar un objeto en la fuente no borra el objeto asociado en el bucket de destino.
Crea una cola de SQS
En la consola de AWS, ve a la página Servicio de filas simples.
Haz clic en Crear cola.
Ingresa un nombre para esta cola.
En la sección Política de acceso, selecciona Avanzada. Un objeto JSON es se muestra:
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": "01234567890" }, "Action": [ "SQS:*" ], "Resource": "arn:aws:sqs:us-west-2:01234567890:test" } ] }
Los valores de
AWS
yResource
son únicos para cada proyecto.Copia los valores específicos de
AWS
yResource
del JSON que se muestra en el siguiente fragmento de JSON:{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "RESOURCE", "Condition": { "StringEquals": { "aws:SourceAccount": "AWS" }, "ArnLike": { "aws:SourceArn": "S3_BUCKET_ARN" } } } ] }
Los valores de los marcadores de posición en el JSON anterior usan los siguientes valores: formato:
- AWS es un valor numérico que representa tu proyecto de Amazon Web Services. Por ejemplo,
"aws:SourceAccount": "1234567890"
- RESOURCE es un número de recurso de Amazon (ARN) que identifica esta fila. Por ejemplo,
"Resource": "arn:aws:sqs:us-west-2:01234567890:test"
- S3_BUCKET_ARN es un ARN que identifica el bucket de origen. Por ejemplo,
"aws:SourceArn": "arn:aws:s3:::example-aws-bucket"
. Puedes busca el ARN de un bucket en la pestaña Propiedades de la página de detalles del bucket en la consola de AWS.
- AWS es un valor numérico que representa tu proyecto de Amazon Web Services. Por ejemplo,
Reemplaza el JSON que se muestra en la sección Política de acceso por el JSON actualizado que se muestra arriba.
Haz clic en Crear cola.
Cuando termines, toma nota del Amazon Resource Name (ARN) de la cola. El ARN tiene el con el siguiente formato:
arn:aws:sqs:us-east-1:1234567890:event-queue"
Habilita las notificaciones en el bucket de S3
En la consola de AWS, ve a la página S3.
En la lista Buckets, selecciona tu bucket de origen.
Selecciona la pestaña Propiedades.
En la sección Notificaciones de eventos, haz clic en Crear notificación de evento.
Especifica un nombre para este evento.
En la sección Tipos de eventos, selecciona Todos los objetos crean eventos.
Como Destino, selecciona Cola de SQS y elige la cola que creaste para esta transferencia.
Haz clic en Guardar cambios.
Configura permisos
Sigue las instrucciones que se indican en Configura el acceso a una fuente: Amazon S3 para crear un ID de clave de acceso y una clave secreta, o una identidad en el área de la seguridad en la nube.
Reemplaza el JSON de permisos personalizados con lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME", "arn:aws:s3:::AWS_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
Una vez creada, ten en cuenta la siguiente información:
- Para un usuario, anota el ID de la clave de acceso y la clave secreta.
- Para un rol de identidad federada, toma nota de los nombres de recursos de Amazon (ARN).
que tiene el formato
arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME
Crear un trabajo de transferencia
Puedes usar la API de REST o la consola de Google Cloud para crear un trabajo de transferencia basado en eventos.
Consola de Cloud
Ve a la página Crear trabajo de transferencia en la consola de Google Cloud.
Selecciona Amazon S3 como el tipo de fuente y Cloud Storage como el destino.
Como Modo de programación, selecciona Basado en eventos y haz clic en Siguiente paso.
Ingresa el nombre de tu bucket de S3. El nombre del depósito es el nombre que aparece en la consola de administración de AWS. Por ejemplo,
my-aws-bucket
.Selecciona tu método de autenticación y, luego, ingresa la información solicitada. que creaste y anotaste en la sección anterior.
Ingresa el ARN de la cola de Amazon SQS que creaste antes. Utiliza el con el siguiente formato:
arn:aws:sqs:us-east-1:1234567890:event-queue"
De manera opcional, define los filtros y, luego, haz clic en Paso siguiente.
Selecciona el bucket de Cloud Storage de destino y, de forma opcional, la ruta de acceso.
De manera opcional, ingresa una hora de inicio y finalización para la transferencia. Si no especificar una hora, la transferencia comenzará de inmediato y se ejecutará hasta que se detuvieron manualmente.
Especifica las opciones de transferencia. Puedes obtener más información en el Página Crear transferencias
Haz clic en Crear.
Una vez creado, el trabajo de transferencia comienza a ejecutarse y un objeto de escucha de eventos espera notificaciones en la cola de SQS. En la página de detalles del trabajo, se muestra una operación cada hora y también incluye detalles sobre los datos transferidos para cada trabajo.
REST
Para crear una transferencia controlada por eventos con la API de REST, envía el siguiente JSON al extremo transferJobs.create:
transfer_job { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "transferSpec" { "awsS3DataSource" { "bucketName": "AWS_SOURCE_NAME", "roleArn": "arn:aws:iam::1234567891011:role/role_for_federated_auth" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" } } "eventStream" { "name": "arn:aws:sqs:us-east-1:1234567891011:s3-notification-queue", "eventStreamStartTime": "2022-12-02T01:00:00+00:00", "eventStreamExpirationTime": "2023-01-31T01:00:00+00:00" } }
eventStreamStartTime
y eventStreamExpirationTime
son opcionales.
Si se omite la hora de inicio, la transferencia comienza de inmediato. si el final
se omite el tiempo de transferencia, la transferencia continúa hasta que se detiene manualmente.
Bibliotecas cliente
Go
Para obtener información sobre cómo instalar y usar la biblioteca cliente del Servicio de transferencia de almacenamiento, consulta las Bibliotecas cliente del Servicio de transferencia de almacenamiento. Si deseas obtener más información, consulta la documentación de referencia de la API de Go del Servicio de transferencia de almacenamiento.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente para el Servicio de transferencia de almacenamiento, consulta Bibliotecas cliente del Servicio de transferencia de almacenamiento. Para obtener más información, consulta la API del Servicio de transferencia de almacenamiento Java documentación de referencia.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Node.js
Si deseas obtener información sobre cómo instalar y usar la biblioteca cliente para el Servicio de transferencia de almacenamiento, consulta Bibliotecas cliente del Servicio de transferencia de almacenamiento. Para obtener más información, consulta la API del Servicio de transferencia de almacenamiento Node.js documentación de referencia.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente del Servicio de transferencia de almacenamiento, consulta las Bibliotecas cliente del Servicio de transferencia de almacenamiento. Si deseas obtener más información, consulta la documentación de referencia de la API de Python del Servicio de transferencia de almacenamiento.
Para autenticarte en el Servicio de transferencia de almacenamiento, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.