Cloud SQL

Por lo general, las apps de App Maker almacenan datos en Cloud SQL, un servicio de Google Cloud Platform (GCP) que entrega bases de datos en la nube de SQL completamente administradas. Obtén más información sobre los beneficios de Cloud SQL.

Como desarrollador de apps, puedes elegir entre dos tipos de instancias de Cloud SQL:

  • Predeterminada: Un administrador de G Suite puede establecer una instancia de Cloud SQL compartida entre apps de App Maker en una organización. Cuando la instancia predeterminada se configura, se crea una nueva base de datos para tu app de forma automática cuando agregas al menos un modelo de datos de Cloud SQL. Elige esta opción si tu app necesita una base de datos que sea fácil de usar y no requiera configuración. Por lo general, las organizaciones usan una instancia predeterminada mientras los desarrolladores generan prototipos y prueban una app, luego cambian la app a una instancia personalizada una vez que está lista para implementarse como app de producción.

  • Personalizada: Una vez que tu administrador configura una instancia de Cloud SQL predeterminada, también puedes establecer tu propia instancia de Cloud SQL. Elige esta opción en las siguientes circunstancias:

    • Tu aplicación se entrega a una gran cantidad de usuarios o almacena una gran cantidad de datos.
    • La base de datos se debe compartir con otras aplicaciones.
    • Debes administrar la base de datos o retener el control de la instancia de Cloud SQL.

Seguridad de Cloud SQL

Ya sea que tu app use la instancia de Cloud SQL predeterminada o una personalizada, las credenciales siempre se encriptan en tránsito y en reposo:

  • Cloud SQL predeterminada: Las credenciales se almacenan en el servidor de App Maker. Nunca son accesibles para los desarrolladores de apps o los usuarios finales.

  • Cloud SQL personalizada: Una vez que un desarrollador envía credenciales de Cloud SQL a App Maker, nunca vuelven a ser visibles para los desarrolladores de la app. App Maker almacena las credenciales en el navegador mientras un desarrollador trabaja en una aplicación en el editor. Las credenciales se quitan cuando el desarrollador vuelve a cargar o cierra la pestaña del navegador.

    Cuando un desarrollador implementa una app con un modelo de Cloud SQL personalizado, las credenciales se almacenan en servidores de Google con la app implementada. Nunca son accesibles para los usuarios finales.

Antes de comenzar

Antes de usar Cloud SQL con App Maker, revisa las siguientes consideraciones de seguridad y costo:

  • Los datos almacenados en GCP residen fuera de tu organización de G Suite: Algunas organizaciones, sobre todo las agencias gubernamentales, tienen requisitos estrictos para el almacenamiento de datos sensibles. Tanto GCP como G Suite cumplen con estándares estrictos de privacidad y seguridad, pero el uso de cada uno de esos servicios puede estar sujeto a diferentes términos. Obtén más información sobre cómo cumplimos los estándares de privacidad y seguridad:

  • Cloud SQL es parte de GCP: Puedes empezar una prueba gratuita si quieres probar una instancia personalizada. Sin embargo, el uso continuado incurre en gastos para tu organización. Obtén más información sobre los precios. El precio mensual típico para la mayoría de las apps de App Maker es negligible.

Usa una instancia de Cloud SQL personalizada nueva para tu app

Si no quieres usar la instancia de Cloud SQL predeterminada, puedes usar una instancia de Cloud SQL personalizada. Para usar una instancia de Cloud SQL personalizada, un administrador de G Suite debe configurar una instancia predeterminada primero. Tu app puede usar una base de datos personalizada existente o puedes crear una nueva. Si creas una instancia personalizada nueva, su configuración y posterior integración con App Maker toma un tiempo.

Nota: No puedes conectar tu app a una base de datos en una instancia de Cloud SQL personalizada si tu administrador de G Suite configura una instancia de Cloud SQL predeterminada.

Te recomendamos que uses una instancia de Cloud SQL de segunda generación si configuras una nueva. App Maker también es compatible con instancias de primera generación. Los precios y las características de rendimiento varían en función del tipo de instancia, por lo que debes revisar las funciones antes de crear una instancia.

Esto es lo que necesitas para las siguientes instrucciones:

  • Acceso a GCP Console
  • Permisos para crear instancias de Cloud SQL y usuarios

Segunda generación

  1. Si aún no lo hiciste, crea una instancia de Cloud SQL para MySQL de segunda generación en la región us-central.
  2. En GCP Console, crea una cuenta de usuario de MySQL para que tu app acceda a la base de datos.

    Registra el nombre de usuario y la contraseña para que puedas ingresarlos cuando conectas tu app a la base de datos. A fin de evitar el acceso no autorizado a través de cuentas de usuario, te recomendamos que establezcas contraseñas seguras para todas las cuentas en la instancia.

  3. En GCP Console, crea una base de datos nueva.
  4. App Maker se ejecuta en App Engine. Agrega una cuenta de servicio a tu proyecto de Cloud para establecer una conexión con App Engine:
    1. Dirígete a la página Proyectos de IAM y Administrador (en GCP Console, haz clic en Menú menuchevron_rightIAM y Administrador).
    2. Selecciona el proyecto que contiene la instancia de Cloud SQL.
    3. Haz clic en person_add Agregar.
    4. En el cuadro de diálogo Miembros nuevos, ingresa lo que se indica a continuación:
      appmaker-maestro@appspot.gserviceaccount.com
      Elige Cloud SQLchevron_rightCliente de Cloud SQL como la función.
    5. Haz clic en Guardar.
    6. Si otros desarrolladores editarán o implementarán esta app, agrega sus Cuentas de Google como miembros nuevos y asígnales la función Cliente de Cloud SQL.
  5. Copia los detalles de tu instancia:
    1. Abre la página de instancias de Cloud SQL (en GCP Console, haz clic en Menú menuchevron_rightSQL).
    2. Haz clic en tu instancia y busca el campo Nombre de la conexión con la instancia.
    3. En el cuadro Nombre de la conexión con la instancia, haz clic en Copiar content_copy.
  6. Configura tu app para usar la base de datos de Cloud SQL personalizada:
    1. En App Maker, abre tu app y haz clic en Configuración settingschevron_rightBase de datos (Database).
    2. Haz clic en Cambiar a una base de datos de Cloud SQL personalizada (Switch to a custom Cloud SQL database).
    3. Pega los detalles de la instancia y, luego, agrega el nombre de la base de datos creada en el paso 3. Usa el siguiente formato:
      projectName:regionName:instanceName/databaseName
    4. Ingresa el nombre de usuario y contraseña para la cuenta de usuario de la base de datos y, luego, haz clic en Continuar (Continue).

Primera generación

App Maker es compatible con instancias de primera generación. Sin embargo, si creas una instancia nueva, te recomendamos que crees una de segunda generación en su lugar.

  1. Si aún no lo hiciste, crea una instancia de primera generación.
  2. Configura las cuentas de usuario para esta instancia:
    • Cambia la contraseña para la cuenta raíz. A fin de evitar el acceso no autorizado a través de la conexión de App Engine (creada en los siguientes pasos), te recomendamos que establezcas una contraseña segura para la cuenta.
    • Crea una cuenta de usuario que tu app pueda usar para acceder a la base de datos. Haz lo siguiente cuando creas el usuario de la base de datos:
      • Especifica localhost como el Nombre de host.
      • Establece una contraseña segura para la cuenta a fin de evitar el acceso no autorizado.

      Registra el nombre de usuario y la contraseña para que puedas ingresarlos cuando conectas tu app a la base de datos.

  3. En GCP Console, crea una base de datos nueva.
  4. App Maker se ejecuta en App Engine. Agrega el ID de aplicación de App Maker a tu instancia de Cloud SQL para establecer una conexión con App Engine:
    1. Dirígete a la página de instancias de Cloud SQL (en GCP Console, haz clic en Menú menuchevron_rightSQL).
    2. Haz clic en el nombre de la instancia para abrir su página Descripción general y, luego, haz clic en la pestaña Autorización.
    3. Haz clic en Agregar ID del proyecto y, luego, ingresa lo siguiente:
      appmaker-maestro
    4. Haz clic en Listo para salir del modo de edición.
    5. Haz clic en Guardar para actualizar la instancia.
  5. Agrega la instancia de Cloud SQL personalizada a tu app.
    1. Abre tu app y haz clic en Configuración settings chevron_rightBase de datos (Database).
    2. Haz clic en Cambiar a una base de datos de Cloud SQL personalizada (Switch to a custom Cloud SQL database).
    3. Ingresa la dirección con el siguiente formato:
      projectName:instanceName/databaseName
    4. Ingresa el nombre de usuario y contraseña para la cuenta de usuario de la base de datos y, luego, haz clic en Continuar (Continue).

Usa una base de datos de Cloud SQL existente para tu app

Si ya tienes datos en Cloud SQL, puedes crear un modelo en tu app que los usa:

  1. Agrega los detalles de la instancia a tu app:
    1. Abre la página de instancias de Cloud SQL (en GCP Console, haz clic en Menú menuchevron_rightSQL).
    2. Haz clic en tu instancia y busca el campo Nombre de la conexión con la instancia.
    3. En el cuadro Nombre de la conexión con la instancia, haz clic en Copiar content_copy.
    4. En App Maker, abre tu app y haz clic en Configuración settingschevron_rightBase de datos (Database).
    5. Haz clic en Cambiar a una base de datos de Cloud SQL personalizada (Switch to a custom Cloud SQL database).
    6. Pega los detalles de la instancia y, luego, agrega el nombre de la base de datos existente. Usa el siguiente formato: projectName:regionName:instanceName/databaseName
    7. Ingresa el nombre de usuario y contraseña para la cuenta de usuario de la base de datos y, luego, haz clic en Continuar (Continuar).
  2. En la IU de App Maker, junto a Datos (Data) haz clic en Agregaradd.
  3. Selecciona Google Cloud SQL (existente) (Google Cloud SQL (existing)).
  4. Ingresa la dirección con el siguiente formato:

    • Primera generación: projectName:instanceName/databaseName
    • Segunda generación: projectName:regionName:instanceName/databaseName
  5. Ingresa el nombre de usuario y la contraseña para la cuenta de usuario de la base de datos.

  6. Selecciona una tabla de la lista y haz clic en Importar (Import). Puedes importar cualquier tabla que no sea una tabla de unión

App Maker crea relaciones de manera automática una vez que importas ambas tablas involucradas en una relación. App Maker reconoce relaciones una base de datos de Cloud SQL con tablas de unión o restricciones de clave externa en tablas importadas. Por ejemplo, si la tabla A tiene una clave externa a la tabla B, App Maker crea de forma automática una relación de muchos para uno de A a B.

Si el esquema en la base de datos de Cloud SQL cambia, puedes actualizar tus modelos:

  1. Haz clic en Configuración settings chevron_right Base de datos (Database).
  2. En Compatibilidad de modelos y relaciones (Model and relation compatibility) haz clic en el botón Verificar (Check). Puedes actualizar todos los modelos de Cloud SQL para que coincidan con la base de datos o actualizar la base de datos a fin de que coincida con los modelos.

Si actualizas los modelos, App Maker conserva los cambios al modelo como nombres de campo, propiedades de validación y eventos modificados. Sin embargo, si se borra un campo de Cloud SQL, el campo correspondiente también se borra del modelo.

Actualiza las opciones de configuración de Cloud SQL para tu app

Puedes ir a Configuración settings chevron_right Base de datos (Database) para realizar las siguientes acciones:

  • Cambiar a la instancia de SQL predeterminada
  • Actualizar la dirección de la instancia
  • Verificar la compatibilidad del modelo y la relación

Cambia entre bases de datos de Cloud SQL predeterminadas y personalizadas

Para las organizaciones que tienen configuradas una instancia de Cloud SQL predeterminada, los modelos nuevos usan esta instancia. La base de datos de Cloud SQL predeterminada es ideal si tu app necesita una base de datos que no requiera configuración y sea fácil de usar.

Si crees que la base de datos no satisface tus necesidades, puedes convertirla en una base de datos personalizada:

  1. Si aún no lo hiciste, establece una instancia de Cloud SQL personalizada. Elige us-central como la región para tu instancia nueva.
  2. Abre tu app y haz clic en Configuración settings chevron_right Base de datos (Database).
  3. Haz clic en el botón de Verificar (Check) para verificar la compatibilidad del modelo y la relación. Si App Maker informa incompatibilidades, quizás no puedas proceder sin borrar datos de tu base de datos.
  4. Cuando estés listo para proceder, haz clic en el botón Cambiar a una base de datos de Cloud SQL personalizada (Switch to a custom Cloud SQL database).
  5. Ingresa la dirección con el siguiente formato:

    • Primera generación: projectName:instanceName/databaseName
    • Segunda generación: projectName:regionName:instanceName/databaseName
  6. Ingresa el nombre de usuario y contraseña para la cuenta de usuario de la base de datos y, luego, haz clic en Continuar (Continuar).

Luego de cambiar a una base de datos personalizada, tienes la opción de volver a una base de datos predeterminada.

Trabaja con registros de Cloud SQL

Cada registro en un modelo de Cloud SQL representa una fila en una tabla. Si creas un registro de App Maker, tu instancia de Cloud SQL agrega una fila a la tabla correspondiente.

Por lo general, App Maker usa la columna de clave primaria de la tabla como la clave para sus registros y no puede cambiar los valores de clave primaria luego de la creación del registro. Hay algunos casos en los que las claves no coinciden:

  • Los registros creados en el servidor con newRecord() tienen una clave nula hasta que se guardan, incluso si se asigna la columna de clave primaria.

  • Los registros en borrador en el cliente tienen claves sintéticas que no coinciden con la columna de clave primaria hasta que se guardan.

  • Los registros creados en el cliente en una fuente de datos de modo de guardado manual tienen claves sintéticas que no coinciden con la columna de clave primaria incluso luego de que se guardan.

Hay muchas opciones para la administración de las claves primarias en App Maker:

Claves primarias de Cloud SQL
Claves primarias naturales Cuando una tabla de Cloud SQL usa claves primarias naturales, el campo en el modelo de la app que corresponde a esa clave es obligatorio y se debe especificar un valor antes de guardar un registro. Para obtener más información sobre cómo administrar campos obligatorios, consulta
Claves primarias subrogadas Si una tabla de Cloud SQL usa una clave subrogada, puedes establecer la clave primaria antes de la clave de registro. De manera alternativa, si la base de datos puede proporcionar la clave primaria, puedes dejar la clave de registro nula y dejar que App Maker la actualice automáticamente. Este método no funciona para los registros creados en el cliente con fuentes de datos de modo de guardado manual.
Claves primarias de incremento automático

Para las claves primarias de número entero, Cloud SQL puede asignar automáticamente una secuencia de números como el valor de clave primaria cuando se crea el registro. En este caso, el usuario o la app no tienen que proporcionar el valor del campo de la clave primaria.

Para establecer esta opción en App Maker, haz lo siguiente:

  1. En la sección Datos (Data) del panel de navegación, haz clic en el modelo de datos.
  2. En la pestaña Campos (Fields), haz clic en el campo numérico que quieres que se incremente de forma automática.
  3. Haz clic en keyboard_arrow_downAvanzado (Advanced) y selecciona Incremento automático (Auto Increment).
Claves primarias de ID único

App Maker puede establecer un ID único para un campo de clave primaria cuando se crea un registro. El ID único está compuesto por 12 caracteres y se genera de manera aleatoria; no lo proporcionan ni el usuario ni la aplicación.

Usa claves primarias de ID único cuando no quieres que la clave de información sobre el orden o la cantidad total de registros en una tabla, como cuando los usuarios solo tienen acceso a algunos registros.

Para crear una clave primaria de ID único en un modelo de App Maker que ya tiene una clave primaria numérica, haz lo siguiente:

  1. En la sección Datos (Data) del panel de navegación, haz clic en el modelo de datos o crea un modelo nuevo.
  2. En la pestaña Campos (Fields), haz clic en el campo ID.
  3. Haz clic en keyboard_arrow_downAvanzado (Advanced) y desmarca la casilla Incremento automático (Auto increment).
  4. Haz clic en Agregar campo (Add field) chevron_rightString.
  5. Haz clic en Establecer clave primaria (Set as a primary key).
  6. Ingresa un nombre para el campo, como “uniqueID”.
  7. Haz clic en keyboard_arrow_downAvanzado (Advanced) y selecciona Identificador único automático (Auto unique identifier).
  8. (Opcional) Borra el campo ID.

Relaciones

Los campos que corresponden a campos de clave externa pueden leerse directamente con secuencias de comandos del servidor. En el cliente, los valores de los campos de clave externa y sus asociaciones correspondientes pueden modificarse como relaciones. Obtén más información sobre cómo modificar las relaciones.

Vistas

Puedes importar vistas de Cloud SQL como modelos de datos de solo lectura. Los modelos basados en vistas pueden aprovechar las consultas de SQL que incluyen uniones, agregados y subselectores. Por ejemplo, el siguiente esquema usa una vista para agregar datos de una tabla a fin de que se muestren con facilidad en App Maker.

CREATE TABLE Orders (FruitName varchar(128), int Amount);
CREATE VIEW FruitOrders AS SELECT FruitName, sum(Amount) AS Amount FROM
    Orders GROUP BY FruitName ORDER BY FruitName;

Modelos de SQL calculados

Un modelo calculado de SQL usa una consulta de Cloud SQL para recuperar datos. Como otras fuentes de datos calculadas, una fuente de datos de SQL no puede crear, borrar o actualizar registros.

Para crear un modelo calculado de SQL, haz lo siguiente:

  1. En App Maker, junto a Datos (Data) haz clic en Agregar add.
  2. Selecciona SQL calculado (Calculated SQL) y, luego, haz clic en Siguiente (Next).
  3. Ingresa un nombre para el modelo y haz clic en Crear (Create).
  4. Dirígete a la pestaña Fuentes de datos (Datasources). Agrega la fuente de datos de SQL (o usa una predeterminada) y, luego, ingresa una sola consulta en el campo Consulta de SQL (SQL Query).

    La consulta de SQL debe tener las siguientes propiedades:

    • La consulta no debe tener una cláusula de límite o desplazamiento. En cambio, App Maker agrega cláusulas de límite y desplazamiento en función del pageSize y pageIndex de la fuente de datos.
    • Los nombres y tipos de columnas de resultados de consulta de SQL deben coincidir con los nombres y tipos del modelo calculado.
    • La consulta de SQL solo puede contener parámetros precedidos por dos puntos, como :Param. Esos parámetros deben coincidir con el nombre y el tipo de una propiedad personalizada de la fuente de datos.

Por ejemplo, una app de recursos humanos debe mostrar la cantidad de empleados de más de una determinada edad en cada departamento. Tiene un Employee modelo de Cloud SQL con los campos Age y Dept.

Para mostrar los datos filtrados, la app usa un EmployeeCount modelo calculado con dos campos: DeptName y Count. El modelo calculado tiene una fuente de datos de SQL con una propiedad personalizada de number llamada MinAge y usa la siguiente consulta:

SELECT Dept AS DeptName, COUNT(*) AS Count FROM Employee WHERE Age > :MinAge GROUP BY Dept

Los parámetros de lista se traducen en una lista de parámetros entre paréntesis en SQL. Por ejemplo, para seleccionar los ID de departamentos con nombres que coinciden con un elemento en una lista de parámetros, puedes escribir una consulta como esta:

SELECT id from Departments WHERE Name in :PossibleNames

El parámetro PossibleNames se traduce en (?, ?, ?, ...) y los elementos del valor del parámetro se usan para los marcadores de posición de SQL.

Para los parámetros basados en tiempo, debes establecer la zona horaria.

Filtrado de relaciones

Cloud SQL es el único tipo de modelo que puede filtrarse por un campo en un modelo relacionado en Vinculación de datos y Secuencia de comandos del servidor.

Obtén más información sobre el filtrado de relaciones.

Zonas horarias

En algunas situaciones, una instancia de Cloud SQL y App Maker se encuentran en diferentes zonas horarias. Esto puede hacer que se escriban fechas y horas indeseadas a la base de datos. Revisa la siguiente tabla y asegúrate de establecer tus tipos de campo de fecha de forma correcta.

Administración de zonas horarias para tipos de campos de fecha
Modelos de Cloud SQL

Selecciona el tipo de campo de fecha como se requiere:

  1. Abre la pestaña Campos (Fields) de un modelo.
  2. Haz clic en un campo de fecha, luego haz clic en keyboard_arrow_downAvanzado para establecer el tipo de fecha:
    • FECHA o FECHA Y HORA: úsalos para campos que no tienen una zona horaria. App Maker convierte el horario a la zona horaria del servidor de App Maker (como se establece en la configuración de la aplicación) antes de escribirlo a la base de datos.
    • MARCA DE TIEMPO: úsala para campos que tienen una zona horaria. App Maker guarda la zona horaria del usuario y la fecha se escribe en Cloud SQL en relación con el tiempo Unix.

Para ambos tipos de fecha, App Maker convierte la fecha en la zona horaria del navegador cuando muestra los datos.

Modelos de SQL calculados Cuando agregas un campo de tipo de fecha a un modelo de SQL calculado, se agrega como un tipo de FECHA Y HORA.
Parámetros de búsqueda de la fuente de datos de SQL calculada

Selecciona el tipo de campo de fecha como se requiere:

  1. Abre la pestaña Fuentes de datos (Datasources) para el modelo de SQL calculado.
  2. Haz clic en la fuente de datos y luego en addAgregar parámetro (Add Parameter).
  3. Para los parámetros de fecha, haz clic en la lista desplegable de Tipos de datos de SQL (Data SQL Type) y selecciona un tipo:
    • FECHA (DATE) o FECHA Y HORA (DATETIME): úsalos para parámetros que no tienen una zona horaria. Cuando la consulta usa un campo de FECHA o FECHA Y HORA, el servidor de App Maker convierte el valor a la zona horaria del servidor desde la zona horaria del usuario de la app antes de usarla en la consulta.

      Por ejemplo, si un usuario en PST (UTC–8) solicita registros que se crearon antes del 1 de enero de 2018 a las 9:00 a.m. y el servidor de App Maker se encuentran en CT (UTC–6), entonces la consulta busca registros que se crearon antes del 1 de enero de 2018 a las 11:00 a.m.

    • MARCA DE TIEMPO (TIMESTAMP): úsala para parámetros que tienen una zona horaria. App Maker convierte el tiempo a UTC antes de usarlo en la consulta. Te recomendamos no usar parámetros de búsqueda del tipo MARCA DE TIEMPO, ya que la fecha se administra de forma correcta solo si la app y la base de datos se encuentran en la misma zona horaria.

Restricciones y limitaciones

  • Si tus tablas de Cloud SQL tienen múltiples o ninguna columna de clave primaria, App Maker no puede modificarlas o crear relaciones.

  • App Maker representa valores BIGINT como strings, ya que el rango de números representados por BIGINT es muy grande para representarse con números de JavaScript.

  • App Maker no puede importar algunos tipos de columna de Cloud SQL como BLOB, CLOB y otros tipos binarios. Aun así, puedes importar modelos con esos tipos de columnas, pero estas no podrán leerse o escribirse. Si estas columnas se marcan como no nulas, todas las otras en el modelo de datos serán de solo lectura.

  • App Maker no puede expresar consultas a modelos de Cloud SQL que incluyen uniones, agregados o subselectores. En su lugar, importa una vista de SQL como modelo o usa una fuente de datos de SQL en un modelo calculado.

  • La app no es compatible con búsquedas por palabra clave. Como solución alternativa, crea una consulta personalizada que simula una búsqueda de texto completo con operadores contains. Por ejemplo, para un Employee modelo con los campos Name y Department, usa la consulta: (Name contains? :Keywords) OR (Department contains? :Keywords) y vincula el parámetro Keywords a la propiedad value de un campo de texto.