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:
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.
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 recursoVersion
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 serviciodefault
de la aplicaciónMY_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" }
Verifica si tu versión se implementó en tu aplicación de App Engine:
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 camponame
, que debes usar con el métodoGET
de la colecciónapps.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.
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ónapps.services.versions
. Debes especificar la versión que implementaste en la solicitudGET
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
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]
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:
- Crea el código y los archivos fuente nuevos para el servicio de
backend
. - Habilita a etapa de pruebas los recursos de la aplicación para tu servicio de
backend
en un bucket de Cloud Storage. - Crea el archivo de configuración
backend/app.json
. Usa solicitudes HTTP para implementar la versión
v1
del servicio debackend
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 dev1
en el serviciobackend
: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 } } } ] }