Comienza a usar App Engine (Python 3)

1. Descripción general

befa7a877ccdd35d.png

Las aplicaciones de Google App Engine son fáciles de crear, mantener y escalar a medida que cambian tus necesidades de almacenamiento de datos y tráfico. Con App Engine, no tendrás que mantener servidores. Solo debes subir tu aplicación y estará lista para usar.

En este codelab, aprenderás a implementar una app web simple de Python escrita con el framework web Flask. Aunque en esta muestra se usa Flask, puedes usar otros frameworks web, como Django, Pyramid, Bottle y web.py.

Este instructivo se adaptó de https://cloud.google.com/appengine/docs/standard/python3/quickstart.

Qué aprenderás

  • Cómo crear un servidor simple de Python en Google App Engine
  • Cómo actualizar el código sin inhabilitar el servidor

Requisitos

  • Conocimientos de Python
  • Conocimientos de editores de texto estándares de Linux, como Vim, Emacs o nano

Encuesta

¿Cómo usarás este instructivo?

Leer Leer y completar los ejercicios

¿Cómo calificarías tu experiencia en Python?

Principiante Intermedio Avanzado

¿Cómo calificarías tu experiencia con los servicios de Google Cloud?

Principiante Intermedio Avanzado

2. Configuración y requisitos

Configuración del entorno de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Inicia Cloud Shell

Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shell853e55310c205094.png.

3c1dabeca90e44e5.png

Si es la primera vez que inicias Cloud Shell, aparecerá una pantalla intermedia en la que se describirá qué es. Si apareció una pantalla intermedia, haz clic en Continuar.

9c92662c6a846a5c.png

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

9f0e51b578fecce5.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo necesarias. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer con un navegador.

Una vez que te conectes a Cloud Shell, deberías ver que te autenticaste y que el proyecto se configuró con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
gcloud auth list

Resultado del comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que el comando gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Escribe la app web

Después de que se inicie Cloud Shell, puedes usar la línea de comandos para invocar el comando gcloud del SDK de Cloud o cualquier otra herramienta disponible en la instancia de la máquina virtual. Puedes usar tu directorio $HOME en el almacenamiento en disco persistente para almacenar archivos en los proyectos y hacer que persistan de una sesión de Cloud Shell a otra. Tu directorio $HOME es privado, por lo que otros usuarios no pueden acceder a él.

Comencemos por crear una carpeta nueva en tu directorio $HOME para la aplicación:

mkdir ~/helloworld
cd ~/helloworld

Crea un archivo llamado main.py:

touch main.py

Edita el archivo con tu editor de línea de comandos preferido (nano, vim o emacs) o haz clic en el botón Editor de Cloud Shell:

10af7b1a6240e9f4.gif

Para editar el archivo directamente con el editor de Cloud Shell, usa este comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Define las dependencias

Para especificar las dependencias de tu app web, vuelve a la terminal y crea un archivo requirements.txt en el directorio raíz de tu proyecto, con la versión exacta de Flask que se usará:

touch requirements.txt

Para editar el archivo con el editor de Cloud Shell, usa este comando:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. Configura la implementación

Para implementar tu app web en App Engine, necesitas un archivo app.yaml. Este archivo de configuración define la configuración de tu app web para App Engine.

Desde la terminal, crea y edita el archivo app.yaml en el directorio raíz de tu proyecto:

touch app.yaml

Para editar el archivo con el editor de Cloud Shell, usa este comando:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Implementa la app web

Desde la terminal, verifica el contenido de tu directorio:

ls

Deberías tener los siguientes 3 archivos:

app.yaml  main.py  requirements.txt

Implementa tu app web con el siguiente comando:

gcloud app deploy

La primera vez, debes elegir una región de implementación:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Confirma el lanzamiento de la implementación:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Se implementa tu app:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Tu aplicación web ya está lista para responder a solicitudes HTTP en https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Prueba la app web

Tu app web está lista para responder a solicitudes HTTP en https://PROJECT_ID.REGION_ID.r.appspot.com.

Primero, recupera el nombre de host de tu app web con el comando gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Prueba tu app web con esta simple solicitud HTTP GET:

curl https://$APPENGINE_HOSTNAME

Deberías obtener la siguiente respuesta:

Hello World!

Resumen

En los pasos anteriores, configuraste una aplicación web de Python simple, la ejecutaste y la implementaste en App Engine.

8. Actualiza la app web

Modifica tu app web cambiando el cuerpo de la función hello() en tu archivo main.py.

Para editar el archivo con el editor de Cloud Shell, usa este comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

Desde la terminal, vuelve a implementar la aplicación web para actualizarla:

gcloud app deploy --quiet

Se implementará la nueva versión de tu app:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Prueba la nueva versión de tu app web, exactamente como lo hiciste antes:

curl https://$APPENGINE_HOSTNAME

Deberías obtener la misma respuesta:

Hello World!

Pruébalo con el parámetro opcional:

curl https://$APPENGINE_HOSTNAME?who=Universe

Deberías obtener la siguiente respuesta:

Hello Universe!

Resumen

En este paso, actualizaste y volviste a implementar tu app web sin interrupciones en el servicio.

9. ¡Felicitaciones!

Aprendiste a escribir tu primera aplicación web de App Engine en Python.

Más información

Licencia

Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.