El Servicio de transferencia de almacenamiento puede escuchar notificaciones de eventos en AWS o Google Cloud para transferir de forma automática los datos que se agregaron o actualizaron en la ubicación de origen. Las transferencias controladas por eventos son compatibles con AWS S3 o Cloud Storage.
Las transferencias controladas por eventos escuchan las notificaciones de eventos de Amazon S3 enviadas a fuentes de Amazon SQS para AWS S3. Las fuentes de Cloud Storage envían notificaciones a una suscripción de 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. El Servicio de transferencia de almacenamiento no necesita ejecutar una operación de lista en el origen, para ahorrar tiempo y dinero.
Los casos prácticos incluyen:
Estadísticas basadas en eventos: replica datos de AWS a Cloud Storage para realizar estadísticas y procesamiento.
Replicación de Cloud Storage: Habilita la replicación automática y asíncrona de objetos entre buckets de Cloud Storage.
Las transferencias controladas por eventos con el Servicio de transferencia de almacenamiento difieren de la Replicación turbo de Cloud Storage y la replicación predeterminada mediante la creación de 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 copias de seguridad en un continente diferente o en un área que no esté cubierta por el almacenamiento birregional y multirregional
Configuración de DR/HA: Replica los objetos de la fuente al destino de la copia de seguridad en minutos:
- Copia de seguridad entre nubes: Crea una copia de la copia de seguridad de AWS S3 en Cloud Storage.
- Copia de seguridad entre proyectos o entre regiones: crea una copia del bucket de Cloud Storage en otra región o proyecto.
Migración en vivo: La transferencia controlada por eventos puede impulsar la migración con un tiempo de inactividad bajo, en minutos de tiempo de inactividad, como paso siguiente a una migración por lotes única.
Configura transferencias controladas por eventos desde Cloud Storage
Configura permisos
Busca el nombre del agente 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 Request parameters, ingresa el ID del proyecto. El proyecto que especifiques aquí debe ser el que usas para administrar el Servicio de transferencia de almacenamiento, que puede ser diferente del proyecto del bucket de origen.
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 Controla el acceso a través de la consola de Google Cloud para otorgar la función
Pub/Sub Subscriber
al servicio de Servicio de transferencia de almacenamiento. La función se puede otorgar a nivel de tema, suscripción o proyecto.gcloud
CLISigue las instrucciones en Configura 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 cumplir con los requisitos previos para usar Pub/Sub con Cloud Storage.
Configura la notificación 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 Cloud Console para crear un trabajo de transferencia basado en eventos.
consola de Cloud
Ve a la página Crear trabajo de transferencia en Google Cloud Console.
Selecciona Cloud Storage como origen y destino.
Selecciona los buckets y, opcionalmente, las carpetas dentro de los buckets, para usarlos como fuente y destino.
En la pantalla Modo de ejecución de transferencia, selecciona Basado en eventos.
Ingresa el nombre de la suscripción con el siguiente formato:
projects/PROJECT_NAME/subscriptions/SUBSCRIPTION_ID
De forma opcional, ingresa una hora de inicio y de finalización para la transferencia. Si no especificas una hora, la transferencia comenzará de inmediato y se ejecutará hasta que se detenga de forma manual.
Especifica las opciones de transferencia. Para obtener más información, consulta la página Crea transferencias. Las transferencias controladas por eventos no se pueden configurar para borrar archivos de la fuente.
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. La página de detalles del trabajo muestra una operación cada hora, además de 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 objeto 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 se omite la hora de finalización, la transferencia continúa hasta que se detiene de forma manual.
Configura transferencias basadas en eventos desde AWS S3
Crear una cola de SQS
Las transferencias controladas por eventos desde AWS S3 usan notificaciones de Amazon Simple Queue Service (SQS) para saber cuándo se modificaron o agregaron objetos en el bucket de origen.
En la consola de AWS, ve a la página Servicio de cola simple.
Haz clic en Crear fila.
Ingresa un Nombre para la fila.
En la sección Política de acceso, selecciona Configuración avanzada. Se muestra un objeto JSON:
{ "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 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 el siguiente 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 cola. 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 encontrar 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 aparece más arriba.
Haz clic en Crear fila.
Cuando se complete, anota el nombre de recurso de Amazon (ARN) de la cola. El ARN tiene el siguiente formato:
arn:aws:sqs:us-east-1:1234567890:event-queue"
Habilita las notificaciones en tu bucket de S3
En la consola de AWS, ve a la página S3.
En la lista Bucket s, selecciona el bucket de origen.
Selecciona la pestaña Propiedades.
En la sección Notificaciones de eventos, haz clic en Crear notificación de eventos.
Especifica un nombre para este evento.
En la sección Tipos de eventos, selecciona Todos los eventos de creación de objetos.
En Destino, selecciona Cola de SQS y elige la cola que creaste para esta transferencia.
Haga clic en Guardar cambios.
Configura permisos
Sigue las instrucciones en Configura el acceso a una fuente: Amazon S3 para crear un ID de clave de acceso y una clave secreta, o una función de identidad federada.
Reemplaza el permiso JSON personalizado por lo siguiente:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME", "arn:aws:s3:::AWS_BUCKET_NAME/*", "AWS_QUEUE_ARN" ] } ] }
Una vez que lo crees, ten en cuenta la siguiente información:
- Para un usuario, toma nota del ID de clave de acceso y la clave secreta.
- Para una función de identidad federada, anota el nombre del recurso 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 Cloud Console para crear un trabajo de transferencia basado en eventos.
consola de Cloud
Ve a la página Crear trabajo de transferencia en Google Cloud Console.
Selecciona Amazon S3 como el tipo de origen y Cloud Storage como el destino.
Ingresa el nombre de tu bucket S3.
Selecciona el método de autenticación y, luego, ingresa la información solicitada que creaste y anotaste en la sección anterior.
Selecciona el bucket de Cloud Storage de destino y, de forma opcional, la ruta de acceso.
En la pantalla Modo de ejecución de transferencia, selecciona Basado en eventos.
Ingresa el ARN de cola de Amazon SQS.
De forma opcional, ingresa una hora de inicio y de finalización para la transferencia. Si no especificas una hora, la transferencia comenzará de inmediato y se ejecutará hasta que se detenga de forma manual.
Especifica las opciones de transferencia. Para obtener más información, consulta la página Crea transferencias. Las transferencias controladas por eventos no se pueden configurar para borrar archivos de la fuente.
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. La página de detalles del trabajo muestra una operación cada hora, además de 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 objeto 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 se omite la hora de finalización, la transferencia continúa hasta que se detiene de forma manual.