Ingeniería 8 min de lectura

Migré un proyecto completo de Google Cloud entre organizaciones y terminó en solo un día

El registro entre lágrimas de un desarrollador que llegó a crear scripts para migrar GCS poco a poco, solo para descubrir que se podía mover el proyecto entero

Terisuke
Share this article:
Logotipo de Google Cloud Platform

Migré un proyecto completo de Google Cloud entre organizaciones y terminó en solo un día

Hola, soy Terisuke.

Hoy voy a contar una historia sobre cómo perdí una cantidad enorme de tiempo.

Tuvimos que organizar el entorno en la nube de la empresa y surgió la necesidad de mover un proyecto administrado en [email protected] a la organización de [email protected].

Al principio estaba entusiasmado: “¡Bien, usaré Terraform y gcloud para migrar poco a poco los buckets de GCS y las instancias de Compute!”.

Sin embargo, descubrí que, si se trata del mismo Google Cloud, existe una forma de mover el proyecto entero de una sola vez.

Como resultado, el script de migración de GCS que preparé con tanto esfuerzo quedó completamente inservible (lloro).

Aun así, para no volver a cometer el mismo error y a modo de recordatorio, resumo aquí el método.

Requisitos previos

Esto es importante. Primero, es necesario cumplir con las siguientes condiciones:

  • Contar con permisos de propietario (Owner) en ambas organizaciones.
  • Que el proyecto a migrar no utilice VPC Service Controls ni Shared VPC.
  • Que no utilice servicios de pago de Marketplace (sería necesario comprarlos de nuevo).

Pasos de la migración que realicé

1. Confirmación de los IDs de organización

Primero, confirmamos los IDs de la organización de origen y de la de destino. Esto será fundamental para la configuración posterior.

# 移行元組織にログイン
gcloud config set account [email protected]
gcloud organizations list
# DISPLAY_NAME     ID             DIRECTORY_CUSTOMER_ID
# example-a.com    123456789012   C02xxxxxx

# 移行先組織にログイン  
gcloud config set account [email protected]
gcloud organizations list
# DISPLAY_NAME     ID             DIRECTORY_CUSTOMER_ID
# example-b.com    987654321098   C02yyyyyy

2. Comprobaciones previas

Revisa los siguientes puntos antes de la migración. Darse cuenta después de que aparezca un error es sumamente molesto.

# VPC Service Controlsの確認(エラーが出ればOK)
gcloud access-context-manager perimeters list

# Shared VPCの確認({}が返ればOK)
gcloud compute shared-vpc get-host-project your-project-id

# 現在の請求アカウントをメモ
gcloud beta billing projects describe your-project-id

3. Configuración del corredor de migración

Esta es la parte más importante. Abrimos un “corredor de migración” para poder mover proyectos entre organizaciones. En resumen, es una configuración para que ambas organizaciones confíen entre sí.

En la organización de origen, se configura el permiso de exportación.

# export-policy.yamlを作成
cat > export-policy.yaml << EOF
name: organizations/123456789012/policies/resourcemanager.allowedExportDestinations
spec:
  rules:
    - values:
        allowedValues:
          - under:organizations/987654321098
EOF

# ポリシーを適用
gcloud org-policies set-policy export-policy.yaml

En la organización de destino, se configura el permiso de importación.

# 移行先組織にログイン
gcloud config set account [email protected]

# import-policy.yamlを作成
cat > import-policy.yaml << EOF
name: organizations/987654321098/policies/resourcemanager.allowedImportSources
spec:
  rules:
    - values:
        allowedValues:
          - under:organizations/123456789012
EOF

# ポリシーを適用
gcloud org-policies set-policy import-policy.yaml

4. Asignación de permisos

Aquí me quedé atascado. Incluso siendo propietario de la organización, se requerían permisos a nivel de proyecto. Me di cuenta tras encontrar un error; se necesitan los siguientes permisos:

# 移行元アカウントに戻る
gcloud config set account [email protected]

# プロジェクトと組織に権限を付与
gcloud projects add-iam-policy-binding your-project-id \
    --member="user:[email protected]" \
    --role="roles/resourcemanager.projectMover"

gcloud organizations add-iam-policy-binding 123456789012 \
    --member="user:[email protected]" \
    --role="roles/resourcemanager.projectMover"

# 移行先組織にも権限を付与(組織をまたいだ権限付与)
gcloud config set account [email protected]
gcloud organizations add-iam-policy-binding 987654321098 \
    --member="user:[email protected]" \
    --role="roles/resourcemanager.projectCreator"

5. La migración definitiva

Una vez completados los preparativos, la migración se realiza con un solo comando.

# 移行元アカウントで実行
gcloud config set account [email protected]
gcloud beta projects move your-project-id --organization 987654321098

Aparecerá una advertencia, pero avanzamos con Y. La migración terminó en menos de un minuto. Fue tan rápido que me dejó desconcertado.

6. Cambio de la cuenta de facturación

El proyecto se movió, pero la cuenta de facturación sigue siendo la misma. Si olvidas esto, se seguirá facturando a la organización anterior y será un gran problema.

# 移行先アカウントに切り替え
gcloud config set account [email protected]

# 新しい請求先に紐付け
gcloud beta billing accounts list
gcloud beta billing projects link your-project-id --billing-account NEW-BILLING-ID

Aquí también apareció un error de permisos, por lo que fue necesario otorgar el rol de propietario del proyecto a la cuenta de destino.

# 移行元アカウントで実行
gcloud config set account [email protected]
gcloud projects add-iam-policy-binding your-project-id \
    --member="user:[email protected]" \
    --role="roles/owner"

7. Limpieza

Cerramos la “brecha de seguridad” que abrimos para la migración. Este paso es fundamental: si se olvida, continuará el estado en el que se pueden mover proyectos libremente entre las organizaciones.

# 組織ポリシーを削除
gcloud config set account [email protected]
gcloud org-policies delete resourcemanager.allowedExportDestinations --organization=123456789012

gcloud config set account [email protected]
gcloud org-policies delete resourcemanager.allowedImportSources --organization=987654321098

# 組織間の権限も削除
gcloud organizations remove-iam-policy-binding 987654321098 \
    --member="user:[email protected]" \
    --role="roles/resourcemanager.projectCreator"

Puntos a tener en cuenta tras la migración

  • Las políticas de IAM heredadas se pierden. Es necesario volver a configurar los permisos otorgados a nivel de organización.
  • Las alertas de presupuesto también deben volver a configurarse. La nueva cuenta de facturación no hereda las configuraciones de presupuesto.
  • Es indispensable comprobar el funcionamiento de los servicios. Conviene revisar con especial atención los servicios con integraciones externas.

La moraleja: el script de migración de GCS que quedó inservible

A decir verdad, al iniciar los trabajos de migración, llegué a programar un script para migrar los buckets de GCS a través de local.

Implementé descargas en paralelo, barra de progreso y manejo de errores, entusiasmado pensando: “¡Con esto podré migrar una gran cantidad de buckets fácilmente!”.

Todo eso quedó completamente inutilizado en el momento en que supe que se podía mover el proyecto entero.

Aun así, me digo a mí mismo que no fue una pérdida de tiempo total: sirvió para aprender sobre el procesamiento en paralelo de gsutil y la manipulación de GCS con Python, y además servirá cuando no sea posible migrar entre organizaciones.

Conclusión

La migración de proyectos en Google Cloud fue sorprendentemente sencilla siempre que se cuente con los permisos y la configuración adecuados. No obstante, no olvides limpiar la configuración de seguridad.

Si alguien tiene que hacer una migración similar, recomiendo investigar desde el principio la existencia de gcloud beta projects move. Reinventar la rueda es divertido, pero el tiempo es limitado.

Aun así, ojalá me devolvieran los tres días que pasé creando aquel script de migración de GCS.


Gracias por leer.

Si has pasado por una experiencia similar o tienes planeado realizar una migración pronto, cuéntamelo en los comentarios. Lloremos juntos, jaja.

¿Quiere aplicar esto en su empresa?

Nuestra recepción con IA «Cloudia» atiende solicitudes de desarrollo de IA por encargo.

Más información: Plataforma de IA y desarrollo por contrato

Support this article

If this article was helpful, please support us with a tip. You can choose any amount.

Secure payment via Stripe
Última actualización: 23 de octubre de 2026

Artículos Relacionados

Leer artículo
Ingeniería

Qué se ve y qué no se ve en el historial de Git: comprobamos cuatro OSS con Grift

Separamos qué se puede contar en un historial de git con reglas explícitas y qué no. Comprobamos cuatro OSS reales por repositorio. No garantiza la capacidad de una persona ni que el registro esté completo.

#Grift #OSS +3
Leer artículo
Ingeniería

Cómo mantener en la implementación el principio de «no asignar puntuaciones ni clasificaciones»: las 5 condiciones que Grift CLI ha establecido para la próxima versión

Grift CLI promete no emitir puntuaciones ni clasificaciones. En la verificación cruzada de octubre de 2026, se descubrió que, si bien una nota indicaba que no se trataba de una clasificación, la tabla estaba ordenada de forma descendente por número de commits. Explicamos de forma sencilla las 5 condiciones de aceptación impuestas para la versión 0.8, dirigidas a clientes, comerciales de SES e ingenieros.

#Grift #OSS +3
Leer artículo
Ingeniería

Por qué las estimaciones en desarrollo de IA y por encargo dependen de cada persona: cómo convertir los fundamentos en activos de la empresa

Explicamos por qué las estimaciones en el desarrollo por encargo varían según la persona y cómo crear fundamentos explicables utilizando el historial de GitHub, los precios de mercado y el desglose de horas de trabajo. También presentamos el enfoque para utilizar Grift.

#見積もり #受託開発 +2