Ubicaciones de App Engine
App Engine es regional, lo que significa que la infraestructura que ejecuta las apps se encuentra en una región específica, y Google la administra para que esté disponible de forma redundante en todas las zonas dentro de esa región.
El cumplimiento de tus requisitos de latencia, disponibilidad o durabilidad debe ser un factor principal para seleccionar la región en la que se ejecutan las apps. Por lo general, puedes seleccionar la región más cercana a la de los usuarios de la app, pero debes considerar las ubicaciones en las que App Engine está disponible y las ubicaciones de los otros productos y servicios de Google Cloud que usa la app. Usar servicios en varias ubicaciones puede afectar la latencia de la app y sus precios.
No puedes cambiar la región de una app una vez configurada.
Si ya creaste una aplicación de App Engine, puedes ver su región mediante una de las siguientes opciones:
Ejecuta el comando
gcloud app describe
.Abre el Panel de App Engine en la consola de Google Cloud. La región aparece cerca de la parte superior de la página.
Cloud NDB es una biblioteca cliente para Python que reemplaza a App Engine NDB. App Engine NDB permite que las apps de Python 2 almacenen y consulten datos en bases de datos de Datastore. Cloud NDB permite que las apps de Python 2 y Python 3 almacenen y consulten datos en las mismas bases de datos. Sin embargo, el producto que administra esas bases de datos cambió de Datastore a Firestore en modo Datastore. Aunque la biblioteca de Cloud NDB puede acceder a cualquier dato creado con App Engine NDB, no se puede acceder con App Engine NDB a algunos tipos de datos estructurados almacenados mediante Cloud NDB. Por esta razón, la migración a Cloud NDB debe considerarse irreversible.
Te recomendamos que migres a Cloud NDB antes de actualizar la aplicación a Python 3. Este enfoque incremental para la migración te permite mantener el funcionamiento y la posibilidad de probar la app durante todo el proceso de migración.
Cloud NDB tiene como objetivo reemplazar las funciones de App Engine NDB, por lo que no será compatible con las nuevas funciones de Firestore en modo Datastore. Recomendamos que las apps nuevas de Python 3 usen la biblioteca cliente en modo Datastore en lugar de Cloud NDB.
Para obtener más información sobre Cloud NDB, consulta las siguientes páginas en GitHub:
Comparación entre App Engine NDB y Cloud NDB
Similitudes:
- Cloud NDB admite casi todas las funciones compatibles con App Engine NDB, solo con pequeñas diferencias en la sintaxis del método.
Diferencias:
Las API de App Engine NDB que se basan en los servicios específicos del entorno de ejecución de Python 2.7 de App Engine se actualizaron o quitaron de Cloud NDB.
Las nuevas funciones de Python 3 y Django borraron la necesidad de
google.appengine.ext.ndb.django_middleware
. En cambio, puedes escribir de manera sencilla tu propio middleware con solo unas líneas de código.App Engine NDB requería que las apps y la base de datos de Datastore estuvieran en el mismo proyecto de Google Cloud, y App Engine proporcionaba las credenciales de manera automática. Cloud NDB puede acceder a las bases de datos en modo Datastore en cualquier proyecto, siempre que autentiques tu cliente de manera correcta. Esto es coherente con otras bibliotecas cliente y API de Google Cloud.
Cloud NDB no usa el servicio Memcache de App Engine para almacenar datos en caché.
En su lugar, Cloud NDB puede almacenar datos en caché en un almacén de datos en memoria de Redis administrado por Memorystore, Redis Labs y otros sistemas. Si bien por el momento solo se admiten almacenes de datos de Redis, Cloud NDB generalizó y definió el almacenamiento en caché en la interfaz abstracta
GlobalCache
, que puede admitir implementaciones concretas adicionales.Para acceder a Memorystore para Redis, la app debe usar el Acceso a VPC sin servidores.
Ni Memorystore para Redis ni el Acceso a VPC sin servidores proporcionan un nivel gratuito y es posible que estos productos no estén disponibles en la región de la app. Consulta Antes de comenzar a migrar para obtener más información.
La lista completa de diferencias está disponible en las notas de migración del proyecto de Cloud NDB de GitHub.
Muestras de código:
Operaciones básicas de bases de datos mediante App Engine NDB
Operaciones básicas de bases de datos mediante Cloud NDB
Antes de comenzar la migración
Antes de comenzar la migración, haz lo siguiente:
Si aún no lo has hecho, configura tu entorno de desarrollo de Python para usar una versión de Python que sea compatible con Google Cloud y, luego, instala herramientas de prueba para crear entornos de Python aislado.
Si necesitas almacenar en caché los datos, asegúrate de que la región de la app sea compatible con el Acceso a VPC sin servidores y Memorystore para Redis.
Determina si necesitas almacenar datos en caché
Si tu app necesita almacenar datos en caché, comprende que Memorystore para Redis y el Acceso a VPC sin servidores no tienen un nivel gratuito ni son compatibles con todas las regiones de Google Cloud.
En general, debes hacer lo siguiente:
Si la app lee los mismos datos con frecuencia, el almacenamiento en caché podría disminuir la latencia.
Cuantas más solicitudes entregue tu app, mayor será el impacto del almacenamiento en caché.
Si deseas ver cuánto dependes de los datos almacenados en caché, consulta el panel de Memcache para ver la proporción de aciertos de caché frente a errores. Si la proporción es alta, es probable que el uso de una caché de datos tenga un gran efecto en la reducción de la latencia de la app.
Para obtener información sobre los precios, consulta Precios de Memorystore y Precios de Acceso a VPC sin servidores.
Confirma la región de la app
Si necesitas almacenar datos en caché, asegúrate de que la región de la app sea compatible con Memorystore para Redis y el Acceso a VPC sin servidores:
Visualiza la región de la app, que aparece cerca de la parte superior del panel de App Engine en la consola de Google Cloud.
La región aparece cerca de la parte superior de la página, justo debajo de la URL de la app.
Confirma que la app está en una de las regiones compatibles con el Acceso a VPC sin servidores.
Confirma que la app se encuentra en una de las regiones compatibles con Memorystore para Redis. Para ello, visita la página Crear conector y visualiza las regiones en la lista Regiones.
Si la app no se encuentra en una región compatible con Memorystore para Redis y el Acceso a VPC sin servidores, haz lo siguiente:
Crea un proyecto de Google Cloud.
Crea una app de App Engine nueva en el proyecto y selecciona una región compatible.
Crea los servicios de Google Cloud que la app usa en el proyecto nuevo.
Como alternativa, puedes actualizar la app para usar los servicios existentes en tu proyecto anterior, pero el precio y el uso de recursos pueden ser distintos cuando usas servicios en un proyecto y una región diferentes. Consulta la documentación de cada servicio a fin de obtener más información.
Implementa la app en el proyecto nuevo.
Comprende los permisos del modo Datastore
Cada interacción con un servicio de Google Cloud debe estar autorizada. Por ejemplo, a fin de almacenar o consultar datos en una base de datos en modo Datastore, la app debe proporcionar las credenciales de una cuenta autorizada para acceder a la base de datos.
De forma predeterminada, la app proporciona las credenciales de la cuenta de servicio predeterminada de App Engine, que está autorizada para acceder a las bases de datos en el mismo proyecto que la app.
Deberás usar una técnica de autenticación alternativa que proporcione credenciales de forma explícita si se cumple alguna de las siguientes condiciones:
La app y la base de datos en modo Datastore están en diferentes proyectos de Google Cloud.
Cambiaste las funciones asignadas a la cuenta de servicio predeterminada de App Engine.
Si deseas obtener información sobre técnicas de autenticación alternativas, consulta Configura la autenticación para aplicaciones de producción de servidor a servidor.
Descripción general del proceso de migración
Para migrar a Cloud NDB, sigue estos pasos:
-
Instala la biblioteca cliente de Cloud NDB.
Actualiza las declaraciones de importación para importar módulos desde Cloud NDB.
Agrega el código que crea un cliente de Cloud NDB. El cliente puede leer las variables de entorno de la app y usar los datos para autenticarse con el modo Datastore.
Agrega un código que use el contexto de entorno de ejecución del cliente para mantener el almacenamiento en caché y las transacciones separados entre subprocesos.
Quita o actualiza el código que usa métodos y propiedades que ya no son compatibles.
Implementa la app en App Engine.
Al igual que con cualquier cambio que realices en la app, considera usar la división del tráfico para aumentar el tráfico con lentitud. Supervisa la app de cerca para detectar cualquier problema de la base de datos antes de enrutar más tráfico a la app actualizada.
Actualiza la app de Python
Instala la biblioteca de Cloud NDB para apps de Python
Si deseas instalar la biblioteca cliente de Cloud NDB en tu aplicación de Python para App Engine, haz lo siguiente:
Actualiza el archivo
app.yaml
. Sigue las instrucciones para tu versión de Python:Python 2
Para las apps de Python 2, agrega las versiones más recientes de las bibliotecas
grpcio
ysetuptools
.El siguiente es un archivo
app.yaml
de ejemplo:runtime: python27 threadsafe: yes api_version: 1 libraries: - name: grpcio version: latest - name: setuptools version: latest
Python 3
Para las apps de Python 3, especifica el elemento
runtime
con una versión de Python 3 compatible y borra las líneas innecesarias. Por ejemplo, tu archivoapp.yaml
podría verse de la siguiente manera:runtime: python310 # or another support version
El entorno de ejecución de Python 3 instala bibliotecas de forma automática, por lo que no es necesario especificar bibliotecas integradas del entorno de ejecución de Python 2 anterior. Si tu app de Python 3 usa otros servicios agrupados en paquetes heredados durante la migración, deja el archivo
app.yaml
tal como está.Actualiza el archivo
requirements.txt
: Sigue las instrucciones para tu versión de Python:Python 2
Agrega las bibliotecas cliente de Cloud para Cloud NDB a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-ndb
Luego, ejecuta
pip install -t lib -r requirements.txt
a fin de actualizar la lista de bibliotecas disponibles para la app.Python 3
Agrega las bibliotecas cliente de Cloud para Cloud NDB a tu lista de dependencias en el archivo
requirements.txt
.google-cloud-ndb
App Engine instala de forma automática estas dependencias durante la implementación de la app en el entorno de ejecución de Python 3, así que borra la carpeta
lib
, si existe una.En el caso de las apps de Python 2, si tu app usa bibliotecas integradas o copiadas especificadas en el directorio
lib
, debes especificar esas rutas en el archivoappengine_config.py
:import pkg_resources from google.appengine.ext import vendor # Set PATH to your libraries folder. PATH = 'lib' # Add libraries installed in the PATH folder. vendor.add(PATH) # Add libraries to pkg_resources working set to find the distribution. pkg_resources.working_set.add_entry(PATH)
Asegúrate de usar el módulo
pkg_resources
, que garantiza que la app use la distribución correcta de las bibliotecas cliente.En el archivo
appengine_config.py
del ejemplo anterior, se supone que la carpetalib
se encuentra en el directorio de trabajo actual. Si no puedes garantizar quelib
esté siempre en el directorio de trabajo actual, especifica la ruta completa a la carpetalib
. Por ejemplo:import os path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
Cuando implementas la app, App Engine sube todas las bibliotecas del directorio que especificaste en el archivo
appengine_config.py
.
Actualiza las declaraciones de importación
La ubicación del módulo NDB se cambió a google.cloud.ndb
. Actualiza las declaraciones de importación de la app como se muestra en la siguiente tabla:
Quitar | Reemplazar por |
---|---|
from google.appengine.ext import ndb |
from google.cloud import ndb |
Crea un cliente de Cloud NDB
Al igual que con otras bibliotecas cliente que se basan en las API de Google Cloud, el primer paso para usar Cloud NDB es crear un objeto Client
. El cliente contiene credenciales y otros datos necesarios para conectarse al modo Datastore. Por ejemplo:
from google.cloud import ndb
client = ndb.Client()
En la situación de autorización predeterminada que se describió antes, en el cliente de Cloud NDB hay credenciales de la cuenta de servicio predeterminada de App Engine, que está autorizada para interactuar con el modo Datastore. Si no trabajas en esta situación predeterminada, consulta credenciales predeterminadas de la aplicación (ADC) para obtener información sobre cómo proporcionarlas.
Usa el contexto de entorno de ejecución del cliente
Además de proporcionar las credenciales necesarias para interactuar con el modo Datastore, en el cliente de Cloud NDB está el método context()
, que muestra un contexto de entorno de ejecución.
El contexto de entorno de ejecución aísla las solicitudes de transacción y almacenamiento en caché de otras interacciones simultáneas del modo Datastore.
Todas las interacciones con el modo Datastore deben ocurrir dentro de un contexto de entorno de ejecución de NDB. Dado que la creación de una definición de modelo no interactúa con el modo Datastore, puedes definir tu clase de modelo antes de crear un cliente de Cloud NDB, recuperar un contexto de entorno de ejecución y, luego, usarlo en el controlador de solicitudes para obtener datos de la base de datos.
Por ejemplo:
Apps con varios subprocesos
El contexto del entorno de ejecución que muestra el cliente de Cloud NDB solo se aplica a un subproceso. Si la app usa varios subprocesos para una sola solicitud, debes recuperar un contexto de entorno de ejecución independiente para cada subproceso que usará la biblioteca de Cloud NDB.
Usa un contexto de entorno de ejecución con frameworks WSGI
Si tu app web usa un framework WSGI, puedes crear de forma automática un nuevo contexto de entorno de ejecución para cada solicitud mediante la creación de un objeto middleware que recupera el contexto de entorno de ejecución y, luego, une la app al objeto middleware.
El siguiente es un ejemplo del uso de middleware con Flask:
El método
middleware
crea un objeto middleware WSGI intermedio dentro del contexto de entorno de ejecución del cliente de NDB.La app de Flask está unida al objeto middleware.
Flask pasará cada solicitud a través del objeto middleware, que recupera un nuevo contexto de entorno de ejecución de NDB para cada solicitud.
Usa un contexto de entorno de ejecución con Django
El middleware de Django que proporciona la biblioteca de App Engine NDB no es compatible con la biblioteca de Cloud NDB. Si usaste este middleware (google.appengine.ext.ndb.django_middleware
) en la app, sigue estos pasos para actualizarla:
Usa el sistema de middleware de Django con el fin de crear un nuevo contexto de entorno de ejecución para cada solicitud.
En el ejemplo que se incluye a continuación, se ilustra lo siguiente:
El método
ndb_django_middleware
crea un cliente de Cloud NDB.El método
middleware
crea un objeto middleware dentro del contexto del entorno de ejecución del cliente de NDB.
En el archivo settings.py de Django, actualiza la configuración de
MIDDLEWARE
para que enumere el nuevo middleware que creaste en lugar degoogle.appengine.ext.ndb.NdbDjangoMiddleware
.
Django ahora pasará cada solicitud a través del objeto de middleware que enumeraste en la configuración de MIDDLEWARE
, y este objeto recuperará un nuevo contexto de entorno de ejecución NDB para cada solicitud.
Actualiza el código de las API de NDB que se quitaron o modificaron
Las API de NDB que dependen de los servicios y las API específicas de App Engine se actualizaron o quitaron de la biblioteca de Cloud NDB.
Deberás actualizar tu código si se usa cualquiera de las siguientes API de NDB:
google.appengine.ext.ndb.Model
y propiedades de modelosgoogle.appengine.ext.ndb.Key
google.appengine.ext.ndb.query.QueryOptions
yPropertyOrder
google.appengine.ext.ndb.utils
google.appengine.api.namespacemanager
google.appengine.api.ext.ndb.tasklets
google.appengine.api.datastore_errors
Modelos y propiedades de modelos
Los siguientes métodos de google.appengine.ext.ndb.Model
no están disponibles en la biblioteca de Cloud NDB porque usan las API específicas de App Engine que ya no están disponibles.
API que se quitaron | Reemplazo |
---|---|
Model.get_indexes y Model.get_indexes_async
|
Ninguno |
Model._deserialize y Model._serialize
|
Ninguno |
Model.make_connection
|
Ninguno |
En la siguiente tabla, se describen las propiedades específicas de google.appengine.ext.ndb.Model
que cambiaron en la biblioteca de Cloud NDB:
Propiedad | Cambiar |
---|---|
TextProperty
|
No se puede indexar google.cloud.ndb.TextProperty . Si intentas configurar google.cloud.ndb.TextProperty.indexed , se generará un NotImplementedError .
|
StringProperty
|
StringProperty siempre está indexada. Si intentas configurar google.cloud.ndb.StringProperty.indexed , se generará un NotImplementedError .
|
Todas las propiedades con argumentos name o kind en el constructor.
|
name o kind deben ser tipos de datos str , ya que unicode se reemplazó por str en Python 3.
|
Las clases y los métodos de la siguiente tabla ya no están disponibles porque usan recursos específicos de App Engine que ya no están disponibles.
API que se quitaron | Reemplazo |
---|---|
google.appengine.ext.ndb.msgprop.MessageProperty y google.appengine.ext.ndb.msgprop.EnumProperty
|
Ninguno
Si intentas crear estos objetos, se generará un |
De
google.appengine.ext.ndb.model.Property :_db_get_value _db_set_value _db_set_compressed_meaning _db_set_uncompressed_meaning __creation_counter_global
|
Ninguno
Estos métodos dependen de los búferes de protocolo del modo Datastore que cambiaron. |
Model.make_connection
|
Ninguno |
Claves
Los siguientes métodos de google.appengine.ext.ndb.Key
no están disponibles en la biblioteca de Cloud NDB. Estos métodos se usaban para pasar claves desde y hacia la API de DB de Datastore, que ya no es compatible (DB era el predecesor de App Engine NDB).
API que se quitaron | Reemplazo |
---|---|
Key.from_old_key y Key.to_old_key
|
Ninguno |
Además, ten en cuenta los siguientes cambios:
App Engine NDB | Cloud NDB |
---|---|
Los similares y los ID de strings deben tener menos de 500 bytes. | Los similares y los ID de strings deben tener menos de 1,500 bytes. |
Key.app() muestra el ID del proyecto que especificaste cuando creaste la clave.
|
El valor que muestra google.cloud.ndb.Key.app() puede diferir del ID original que se pasó al constructor. Esto se debe a que los ID de apps con prefijos como s~example son identificadores heredados de App Engine.
Se reemplazaron por ID del proyecto equivalentes, como example.
|
Consultas
Al igual que App Engine NDB, Cloud NDB proporciona una clase
QueryOptions
(google.cloud.ndb.query.QueryOptions
) que te permite volver a usar un conjunto específico de
opciones de consulta en lugar de volver a definirlas. Sin embargo, QueryOptions
en Cloud NDB no hereda de google.appengine.datastore.datastore_rpc.Configuration
y, por lo tanto, no es compatible con métodos ...datastore_rpc.Configuration
.
Además, google.appengine.datastore.datastore_query.Order
se reemplazó por google.cloud.ndb.query.PropertyOrder
. Al igual que Order
, la clase PropertyOrder
te permite especificar el orden de clasificación en varias consultas. El constructor de PropertyOrder
es el mismo que el constructor de Order
. Solo cambió el nombre de la clase.
API que se quitaron | Reemplazo |
---|---|
De google.appengine.datastore.datastore_rpc.Configuration :deadline(value) on_completion(value) read_policy(value) force_writes(value) max_entity_groups_per_rpc(value) max_allocate_ids_keys(value) max_rpc_bytes(value) max_get_keys(value) max_put_entities(value) max_delete_keys(value)
Consulta el código fuente para obtener una descripción de estos métodos. |
Ninguno |
google.appengine.ext.ndb.Order Por ejemplo: order=Order(-Account.birthday, Account.name)
|
google.cloud.ndb.PropertyOrder Por ejemplo: google.cloud.ndb.PropertyOrder(-Account.birthday, Account.name)
|
Utils
El módulo ndb.utils
(google.appengine.ext.ndb.utils
) ya no está disponible. La mayoría de los métodos en ese módulo eran internos de App Engine NDB. Algunos métodos se descartaron debido a diferencias de implementación en la nueva ndb, mientras que otros métodos quedaron obsoletos por las nuevas funciones de Python 3.
Por ejemplo, el decorador posicional en el módulo utils
anterior declaraba que solo los primeros argumentos n de una función o un método pueden ser posicionales. Sin embargo, Python 3 puede hacerlo mediante el uso de argumentos solo de palabras clave. Lo que solía escribirse de la siguiente manera:
@utils.positional(2)
def function1(arg1, arg2, arg3=None, arg4=None)
pass
Se puede escribir así en Python 3:
def function1(arg1, arg2, *, arg3=None, arg4=None)
pass
Espacios de nombres
Los espacios de nombres habilitan una aplicación multiusuario a fin de usar sistemas aislados de datos independientes para cada usuario mientras se usa la misma base de datos en modo Datastore. Es decir, cada usuario almacena los datos en su propio espacio de nombres.
En lugar de usar el google.appengine.api.namespacemanager
específico de App Engine, debes especificar un espacio de nombres predeterminado cuando creas un cliente de Cloud NDB. Luego, usa el espacio de nombres predeterminado mediante una llamada a los métodos de Cloud NDB en el contexto del entorno de ejecución del cliente. Esto sigue el mismo patrón que otras API de Google Cloud que admiten espacios de nombres.
API que se quitaron | Reemplazo |
---|---|
google.appengine.api.namespace_manager.namespace_manager.set_namespace(str) y google.appengine.api.namespacemanager.getnamespace()
|
client=google.cloud.ndb.Client(namespace="my namespace") with client.context() as context: key = ndb.Key("SomeKind", "SomeId")o key-non-default-namespace=ndb.Key("SomeKind," "AnotherId", namespace="non-default-nspace") |
Todos los demás métodos google.appengine.api.namespacemanager |
Ninguno |
Tasklets
Ahora Tasklets puede usar una declaración return
estándar para mostrar un resultado en lugar de generar una excepción Return
. Por ejemplo:
Biblioteca de App Engine NDB | Biblioteca de Cloud NDB |
---|---|
@ndb.tasklet def get_cart(): cart = yield CartItem.query().fetch_async() raise Return(cart) |
@ndb.tasklet def get_cart(): cart = yield CartItem.query().fetch_async() return cart |
Ten en cuenta que aún puedes mostrar resultados en Cloud NDB si generas una excepción Return
, pero no es recomendable.
Además, los siguientes métodos y subclases de Tasklets
ya no están disponibles debido, en gran medida, a los cambios en la creación y el uso de un contexto de NDB en la biblioteca de Cloud NDB.
API que se quitaron | Reemplazo |
---|---|
De
google.appengine.api.ext.ndb.tasklets :add_flow_exception make_context make_default_context set_context
|
Ninguno |
De
google.appengine.api.ext.ndb.tasklets :QueueFuture ReducedFuture SerialQueueFuture
|
Ninguno |
Excepciones
Si bien en el módulo google.cloud.ndb.exceptions
de la biblioteca de Cloud NDB hay muchas de las excepciones de la biblioteca de App Engine NDB, no todas las excepciones anteriores están disponibles en la biblioteca nueva. En la siguiente tabla, se enumeran las excepciones que ya no están disponibles:
API que se quitaron | Reemplazo |
---|---|
De
google.appengine.api.datastore_errors :BadKeyError BadPropertyError CommittedButStillApplying EntityNotFoundError InternalError NeedIndexError QueryNotFoundError ReferencePropertyResolveError Timeout TransactionFailedError TransactionNotFoundError
|
google.cloud.ndb.exceptions |
Habilita el almacenamiento en caché de datos
Cloud NDB puede almacenar datos en caché en un almacén de datos en memoria de Redis administrado por Memorystore, Redis Labs y otros sistemas. En esta guía, se describe cómo usar Memorystore para Redis a fin de almacenar datos en caché.
Configura el Acceso a VPC sin servidores
La app solo puede comunicarse con Memorystore a través de un conector de Acceso a VPC sin servidores. Para configurar un conector de Acceso a VPC sin servidores, haz lo siguiente:
Configura Memorystore para Redis
Si deseas configurar Memorystore para Redis, debes hacer lo siguiente:
Crea una instancia de Redis en Memorystore. Cuando crees la instancia, ten en cuenta lo siguiente:
En Región, selecciona la misma región en la que se encuentra la app de App Engine.
En Red autorizada, selecciona la misma red que usa tu conector de Acceso a VPC sin servidores.
Anota la dirección IP y el número de puerto de la instancia de Redis que crees. Usarás esta información cuando habilites el almacenamiento en caché de datos para Cloud NDB.
Asegúrate de usar el comando de
gcloud beta
para implementar las actualizaciones de la app. Solo el comando beta puede actualizar la app para que use un conector de VPC.
Agrega la URL de conexión de Redis
Puedes conectarte a la caché de Redis si agregas la variable de entorno REDIS_CACHE_URL
al archivo app.yaml
de la app. El valor de REDIS_CACHE_URL
tiene el siguiente formato:
redis://IP address for your instance:port
Por ejemplo, puedes agregar las siguientes líneas al archivo app.yaml
de la app:
env_variables:
REDIS_CACHE_URL: redis://10.0.0.3:6379
Crea y usa un objeto almacenado en caché de Redis
Si configuraste REDIS_CACHE_URL
como una variable de entorno, puedes crear un objeto RedisCache con una sola línea de código y pasar la caché a Client.context()
cuando configures el contexto del entorno de ejecución:
client = ndb.Client()
global_cache = ndb.RedisCache.from_environment()
with client.context(global_cache=global_cache):
books = Book.query()
for book in books:
print(book.to_dict())
Si no configuras REDIS_CACHE_URL
como una variable de entorno, deberás construir un cliente de Redis y pasar el cliente al constructor ndb.RedisCache()
. Por ejemplo:
global_cache = ndb.RedisCache(redis.StrictRedis(host=IP-address, port=redis_port))
Ten en cuenta que no es necesario declarar una dependencia en la biblioteca cliente de Redis, ya que la biblioteca de Cloud NDB ya depende de la biblioteca cliente de Redis.
Consulta la aplicación de muestra de Memorystore para ver un ejemplo de cómo construir un cliente de Redis.
Prueba las actualizaciones
Para configurar una base de datos de prueba y ejecutar la app de manera local antes de implementarla en App Engine, sigue estos pasos:
Ejecuta el emulador local del modo Datastore para almacenar y recuperar datos.
Asegúrate de seguir las instrucciones para configurar las variables de entorno a fin de que la app se conecte al emulador en lugar de al entorno de producción del modo Datastore.
También puedes importar datos al emulador si deseas comenzar tu prueba con datos precargados en la base de datos.
Usa el servidor de desarrollo local para ejecutar la app.
Para asegurarte de que la variable de entorno
GOOGLE_CLOUD_PROJECT
se configure de forma correcta durante el desarrollo local, inicializadev_appserver
mediante el siguiente parámetro:--application=PROJECT_ID
Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud. Para encontrar el ID del proyecto, ejecuta el comando
gcloud config list project
o consulta la página del proyecto en la consola de Google Cloud.
Implementa tu aplicación
Una vez que la app se ejecute en el servidor de desarrollo local sin errores, haz lo siguiente:
Si la app se ejecuta sin errores, usa la división de tráfico para aumentar el tráfico de la app actualizada. Supervísala de cerca a fin de detectar cualquier problema en la base de datos antes de enrutar más tráfico a la app actualizada.
¿Qué sigue?
- Para obtener un instructivo práctico, consulta el codelab Migra de App Engine ndb a Cloud NDB.
- Consulta la documentación de Cloud NDB para obtener más detalles.