Conéctate a Cloud SQL con Cloud Functions

Última actualización: 17 de junio de 2020

¿Qué es Cloud SQL?

Cloud SQL es un servicio de base de datos completamente administrado que facilita la configuración, el mantenimiento, la administración y la gestión de las bases de datos relacionales en Google Cloud Platform.

¿Qué es Cloud Functions?

Cloud Functions es una solución de procesamiento ligera para que los desarrolladores creen funciones individuales y de un solo propósito que respondan a eventos de Cloud sin necesidad de administrar un servidor o un entorno de ejecución.

Qué compilará

En este codelab, escribirás una Cloud Function en Python. La función realiza lo siguiente:

  • Se conecta a una instancia de la base de datos de Cloud SQL.
  • Envía una declaración de inserción a una tabla en la base de datos.

Qué aprenderá

  • Cómo acceder a la IU web de Cloud Functions en Google Cloud Console
  • Cómo crear una Cloud Function.
  • Cómo probar una Cloud Function.
  • Cómo conectarse a una instancia de base de datos de Cloud SQL (MySQL o PostgreSQL) mediante Python
  • Cómo escribir en una base de datos de Cloud SQL con Python
  • Un navegador, como Chrome o Firefox
  • Un proyecto de Google Cloud Platform que contiene tu instancia de Cloud SQL.
  • Si todavía no tienes una, te ofrecemos un instructivo. Sigue todos los pasos, excepto para borrar la instancia.
  • Tu instancia contiene una base de datos MySQL o PostgreSQL con una tabla.
  • El nombre de la conexión de tu instancia, la base de datos y los nombres de tablas, el nombre de usuario de la base de datos y la contraseña del usuario
  • Una cuenta de servicio con la función Cliente de Cloud SQL.

Aquí se encuentra el código de Cloud Function para conectarse a una base de datos de Cloud SQL. Algunos de los valores de las variables dependen de si su base de datos de Cloud SQL es MySQL o PostgreSQL y depende de su propia información de la base de datos.

La IU de Cloud Functions en Cloud Console incluye un editor de texto. Puedes copiar, pegar y editar el código allí, o bien puedes editarlo de forma local y, luego, copiarlo y pegarlo en la IU.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab.
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently.
# In this code we are inserting only one field with one value.
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into table_name (table_field) values (table_field_value)')

    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'
  1. En un navegador, dirígete a la IU de Google Cloud Platform Console.
  2. Selecciona Cloud Functions en el menú de navegación.
  3. Haz clic en CREAR FUNCIÓN en la barra de botones.
  4. Ingresa un nombre para la función.
  5. Selecciona el activador de HTTP. (Toma nota de la URL que se muestra debajo del elemento activador. Tendrá el siguiente formato: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME).
  6. Selecciona Editor directo para la opción de código fuente.
  7. Selecciona Python 3.7 para la opción de entorno de ejecución.
  8. En las ventanas del editor de código fuente, borra el contenido existente de requirements.txt y main.py y reemplázalo por las versiones editadas del código anterior.
  9. Ingresa insert como el nombre de la Función que se ejecutará.
  10. En Opciones avanzadas, selecciona una cuenta de servicio que tenga la función de cliente de Cloud SQL.
  11. Haz clic en Crear y espera a que el ícono giratorio se detenga. Se muestra un ícono de marca de verificación verde cuando la función está lista para usarse.
  1. En un navegador, dirígete a la IU de Google Cloud Platform Console.
  2. Selecciona Cloud Functions en el menú de navegación.
  3. Haz clic en el nombre de la función que creaste con anterioridad.
  4. Selecciona el vínculo PRUEBA que se encuentra en la mitad de la página.
  5. Selecciona PRUEBA LA FUNCIÓN.
  6. Debería aparecer el resultado: Correcto (si la prueba falla, verás un seguimiento de pila para ayudar con la depuración).
  7. En un navegador, dirígete a la URL que guardaste antes, cuando creaste la función.
  8. El resultado correcto también debería aparecer en el navegador.

Felicitaciones, creaste una Cloud Function de forma correcta que funciona con Cloud SQL.

En particular, creaste una función de Cloud Functions que se conecta y escribe en una instancia de base de datos de Cloud SQL.

Mira algunos de estos Codelabs…

Lecturas adicionales

Documentos de referencia