Implementa versiones de tu app en App Engine

ID de región

REGION_ID es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.

Obtén más información acerca de los ID de región.

Usa la API de App Engine Admin para implementar de manera programática versiones de tus aplicaciones en tu aplicación de App Engine mediante solicitudes POST HTTP.

Antes de comenzar

Antes de que puedas enviar la solicitud de implementación de HTTP, debes poder autorizar la solicitud HTTP, acceder a los archivos de la etapa de pruebas de tu app y tener un archivo de configuración con formato JSON. Consulta los temas siguientes para obtener ayuda con estos requisitos previos:

Implementa tu app en App Engine con la API de Administrador

Para implementar una versión de tu app en tu aplicación en App Engine, sigue estos pasos:

  1. Autoriza tus solicitudes HTTP, por ejemplo, obtén un token de acceso.

    La autorización de acceso a la API de Administrador se puede realizar con diferentes flujos de OAuth según las necesidades de tu app de API. Para obtener más información, consulta Accede a la API.

  2. Envía una solicitud POST HTTP mediante tu token de acceso y la API de Administrador para implementar tu versión en la aplicación de App Engine:

    Para implementar una versión, envía una solicitud POST HTTP que especifique el archivo de configuración JSON y define un recurso Version del servicio de destino y la aplicación de App Engine.

    Por ejemplo, puedes usar la siguiente solicitud POST HTTP para implementar la versión especificada en el archivo de configuración JSON en el servicio default de la aplicación MY_PROJECT_ID:

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json
    

    A continuación, se muestra un ejemplo del comando cURL:

    curl -X POST -T "app.json" -H "Content-Type: application/json" -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions
    

    Aquí:

    • [MY_ACCESS_TOKEN] es el token de acceso que obtuviste para autorizar las solicitudes HTTP.
    • [MY_PROJECT_ID] es el ID del proyecto en el que deseas implementar la versión.

    Respuesta de ejemplo:

    {
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "insertTime": "2015-05-29T17:12:44.679Z",
        "method": "google.appengine.v1.Versions.CreateVersion",
        "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "user": "me@example.com"
      }
      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
    }
    
  3. Verifica si tu versión se implementó en tu aplicación de App Engine:

    1. Observa el estado de la operación de implementación real:

      La solicitud POST HTTP que usaste en el paso anterior mostró el nombre de la operación en el campo name, que debes usar con el método GET de la colección apps.operations para verificar el estado de la operación de implementación.

      Por ejemplo, si el campo name de la respuesta es la siguiente:

      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
      

      Entonces, debes enviar la solicitud GET HTTP siguiente:

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      A continuación, se muestra un ejemplo del comando cURL:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      Donde [MY_ACCESS_TOKEN] es tu token de acceso y [MY_PROJECT_ID] es el ID del proyecto en el que implementaste la versión.

      Respuesta de ejemplo:

      {
        "done": true,
        "metadata": {
          "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
          "endTime": "2015-05-29T17:13:20.424Z",
          "insertTime": "2015-05-29T17:12:44.679Z",
          "method": "google.appengine.v1.Versions.CreateVersion",
          "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "user": "me@example.com"
        },
        "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85",
        "response": {
          "@type": "type.googleapis.com/google.appengine.v1.Version",
          "creationTime": "2015-05-29T17:12:46.000Z",
          "deployer": "me@example.com",
          "id": "v1",
          "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "runtime": "python27",
          "servingStatus": "SERVING",
          "threadsafe": true,
        }
      }
      

      Para obtener más información sobre el sondeo de operaciones de ejecución prolongada, consulta la referencia RPC de google.longrunning.

    2. Verifica si la versión se creó en tu aplicación de App Engine:

      Para obtener detalles sobre la versión, usa el método GET de la colección apps.services.versions. Debes especificar la versión que implementaste en la solicitud GET HTTP, como se muestra a continuación:

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      A continuación, se muestra un ejemplo del comando cURL:

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      Donde [MY_ACCESS_TOKEN] es tu token de acceso y [MY_PROJECT_ID] es el ID del proyecto en el que implementaste la versión.

      Respuesta de ejemplo:

      {
        "creationTime": "2015-05-29T17:12:46.000Z",
        "deployer": "me@example.com",
        "deployment": {
          "files": {
            "my-python-app.py": {
              "sha1Sum": "7cffbdaa9fcfa46e5e58269bfe336dd815de0566",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/logo.jpg",
            },
            "logo.jpg": {
              "sha1Sum": "13f7ea1e24f7cd2de5c66660525f2b509da37c14",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/my-python-app.py"
            }
          }
        },
        "handlers": [
          {
            "authFailAction": "AUTH_FAIL_ACTION_REDIRECT",
            "login": "LOGIN_OPTIONAL",
            "script": {
              "scriptPath": "my-python-app.application",
            },
            "securityLevel": "SECURE_OPTIONAL",
            "urlRegex": "/.*"
          }
        ]
        "id": "v1",
        "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "runtime": "python27",
        "servingStatus": "SERVING",
        "threadsafe": true,
      }
      
      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1?view=FULL
      
  4. Para iniciar tu navegador y ver la app en https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com, ejecuta el siguiente comando (opcional):

    gcloud app browse -v [MY_VERSION_ID]
    
  5. Configura cuánto tráfico debe recibir la versión que acabas de implementar.

    Según la configuración predeterminada, la versión inicial que implementas en tu aplicación de App Engine se configura de forma automática para recibir el 100% del tráfico. Sin embargo, todas las versiones posteriores que implementes en esa misma aplicación de App Engine deben configurarse de manera manual; de lo contrario, no recibirán tráfico.

    A fin de obtener detalles sobre cómo configurar el tráfico para tus versiones, consulta Migración y división de tráfico.

Implementa versiones y servicios adicionales

Los pasos para implementar versiones posteriores de tu app, incluida la creación de servicios adicionales, son casi idénticos a los pasos de implementación cubiertos en esta tarea. Si deseas reemplazar la versión actual ejecutada en tu aplicación de App Engine o si deseas agregar servicios adicionales, puedes implementar versiones nuevas después de realizar algunas modificaciones en tus archivos de configuración.

Consulta los ejemplos siguientes para saber cómo implementar versiones adicionales en tu aplicación de App Engine. Recuerda que, después de implementar las versiones, deberás configurar su tráfico.

Ejemplo: Implementación de versiones adicionales

Si se está ejecutando una versión antigua o defectuosa en App Engine, puedes reemplazar esa versión si implementas otra en tu aplicación de App Engine y, luego, enrutar el tráfico a esa versión. Por ejemplo, después de modificar el código fuente de tu app, puedes cambiar el valor de version en el archivo app.yaml, crear un nuevo archivo app.json y, luego, implementar una versión v2 de tu app con otra solicitud POST HTTP:

Ejemplo de archivo app.yaml actualizado:

  service: default
  version: v2
  runtime: python27
  threadsafe: true
  handlers:
  - url: /.*
    script: my-python-app.application

Ejemplo de la solicitud POST HTTP para la versión v2:

  POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json

Después de seguir los pasos para asegurarte de que la versión se implementó de forma correcta, puedes enviar una solicitud PATCH HTTP a fin de enrutar todo el tráfico a la versión nueva, como se muestra a continuación:

  PATCH https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/?updateMask=split {"split": { "allocations": { "v2": "1" } } }

Para obtener información sobre el enrutamiento de tráfico, consulta Migración y división de tráfico.

Ejemplo: Implementación de múltiples servicios

Si tienes una versión v1 en ejecución en tu aplicación de App Engine y deseas implementar un servicio adicional, por ejemplo, backend, realiza los mismos pasos de implementación.

Por ejemplo, para implementar la versión v1 que crea el servicio backend, ejecuta este comando:

  1. Crea el código y los archivos fuente nuevos para el servicio de backend.
  2. Habilita a etapa de pruebas los recursos de la aplicación para tu servicio de backend en un bucket de Cloud Storage.
  3. Crea el archivo de configuración backend/app.json.
  4. Usa solicitudes HTTP para implementar la versión v1 del servicio de backend en tu aplicación de App Engine:

    A continuación, se muestra un ejemplo de una solicitud POST HTTP:

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/backend/versions backend/app.json
    

    A continuación, se muestra un ejemplo de una solicitud GET HTTP para verificar que se creó la versión de v1 en el servicio backend:

    GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services
    

    Respuesta de ejemplo:

    {
      "services": [
        {
          "name": "apps/[MY_PROJECT_ID]/services/default",
          "id": "default",
          "split": {
            "allocations": {
              "v2": 1
            }
          }
        },
        {
          "name": "apps/[MY_PROJECT_ID]/services/backend",
          "id": "backend",
          "split": {
            "allocations": {
              "v1": 1
            }
          }
        }
      ]
    }
    

Pasos siguientes