Usa Cloud SQL para PostgreSQL

En esta página, se muestra cómo conectarse desde una aplicación de App Engine a una instancia de Cloud SQL para PostgreSQL, además de cómo realizar operaciones de escritura y lectura en Cloud SQL. Cloud SQL es una base de datos SQL que forma parte de la nube de Google.

Para obtener más información sobre Cloud SQL, consulta la documentación de Cloud SQL. Para obtener más información sobre los precios y límites de Cloud SQL, consulta la página de precios de Cloud SQL. Las aplicaciones de App Engine también están sujetas a las cuotas de App Engine.

Antes de comenzar

  1. Crea o selecciona un proyecto de GCP en GCP Console y, luego, asegúrate de que incluya una aplicación de App Engine y de que la facturación está habilitada:
    Ir a App Engine

    El panel se abre si ya existe una aplicación de App Engine en tu proyecto y la facturación está habilitada. De lo contrario, sigue las instrucciones para seleccionar una región y habilitar la facturación.

  2. Habilita las Cloud SQL API necesarias.

    Habilita las API

  3. Para implementar tu app con la herramienta gcloud, debes descargar, instalar y, luego, inicializar el SDK de Cloud:
    Descargar el SDK

Configura la instancia de Cloud SQL

Para crear y configurar una instancia de Cloud SQL, sigue estos pasos:

  1. Crea una instancia de Cloud SQL para PostgreSQL.
  2. Si aún no lo hiciste, establece la contraseña para el usuario predeterminado en tu instancia de Cloud SQL:
    gcloud sql users set-password postgres no-host --instance [INSTANCE_NAME] --password [PASSWORD]
    
  3. Si no deseas utilizar el usuario predeterminado para conectarte, crea un usuario.
  4. Registra el nombre de la conexión para la instancia con el siguiente comando:
    gcloud sql instances describe [INSTANCE_NAME]
    

    Por ejemplo:

    connectionName: project1:us-central1:instance1
    

    También puedes encontrar este valor en la página Detalles de la instancia de Google Cloud Platform Console.

  5. Crea una base de datos en tu instancia de Cloud SQL.
    gcloud sql databases create [DATABASE_NAME] --instance=[INSTANCE_NAME]
    
    Para obtener más información sobre cómo crear y administrar bases de datos, consulta la documentación de Cloud SQL.

Configura tu entorno local

Una vez implementada, la aplicación usa el proxy de Cloud SQL integrado en el entorno de ejecución de App Engine para comunicarse con la instancia de Cloud SQL. Sin embargo, para probar tu aplicación de manera local, debes instalar y usar una copia local del proxy de Cloud SQL en tu entorno de desarrollo.

Para realizar tareas administrativas básicas en tu instancia de Cloud SQL, puedes usar el cliente de administración de tu base de datos o GCP Console.

  1. Debes autenticar la herramienta de gcloud a fin de usar el proxy para conectarte desde tu máquina local:

    gcloud auth application-default login
    
  2. Instala el proxy de Cloud SQL:

    Linux de 64 bits

    1. Descarga el proxy:
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
      
    2. Haz que el proxy sea ejecutable:
      chmod +x cloud_sql_proxy
      

    Linux de 32 bits

    1. Descarga el proxy:
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
      
    2. Haz que el proxy sea ejecutable:
      chmod +x cloud_sql_proxy
      

    macOS de 64 bits

    1. Descarga el proxy:
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
      
    2. Haz que el proxy sea ejecutable:
      chmod +x cloud_sql_proxy
      

    macOS de 32 bits

    1. Descarga el proxy:
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
      
    2. Haz que el proxy sea ejecutable:
      chmod +x cloud_sql_proxy
      

    Windows de 64 bits

    Para descargar el proxy, haz clic derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo a cloud_sql_proxy.exe.

    Windows de 32 bits

    Para descargar el proxy, haz clic derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo a cloud_sql_proxy.exe.
    Si tu sistema operativo no se incluye aquí, también puedes compilar el proxy desde la fuente.
  3. Ejecuta el proxy de la siguiente manera:

    Según el lenguaje y entorno, puedes iniciar el proxy con sockets TCP o con sockets Unix.

    Sockets TCP

    1. Copia el nombre de conexión de tu instancia desde la página Detalles de la instancia.

      Por ejemplo: myproject:us-central1:myinstance.

    2. Si usas una cuenta de servicio para autenticar el proxy, toma nota de la ubicación en la máquina cliente del archivo de claves privadas que se generó cuando creaste la cuenta de servicio.
    3. Inicia el proxy.

      Estas son algunas strings posibles de invocación del proxy:

      • Si usas la autenticación del SDK de Cloud:
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432
        
        El puerto especificado no debe estar en uso, por ejemplo, por un servidor de base de datos local.
      • Si usas una cuenta de servicio y una especificación de instancia explícita (recomendado para entornos de producción):
        ./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 \
                          -credential_file=<PATH_TO_KEY_FILE> &
        

      Si deseas obtener más información sobre las opciones del proxy, consulta las opciones para autenticar el proxy y las opciones de especificación de instancias.

    Sockets Unix

    1. Si usas una especificación de instancia explícita, copia el nombre de la conexión de tu instancia que aparece en la página Detalles de la instancia.
    2. Crea el directorio donde se alojarán los sockets del proxy:
      sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
    3. Si usas una cuenta de servicio para autenticar el proxy, toma nota de la ubicación en la máquina cliente del archivo de claves privadas que se generó cuando creaste la cuenta de servicio.
    4. Abre una ventana de terminal nueva y, luego, inicia el proxy.

      Estas son algunas strings posibles de invocación del proxy:

      • Si usas una cuenta de servicio y una especificación de instancia explícita (recomendado para entornos de producción):
        ./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> \
                          -credential_file=<PATH_TO_KEY_FILE> &
      • Si usas la autenticación del SDK de Cloud y la detección automática de instancia:
        ./cloud_sql_proxy -dir=/cloudsql &

      Se recomienda iniciar el proxy en su propia terminal para que puedas supervisar los resultados sin que se mezclen con los de otros programas.

      Si deseas obtener más información sobre las opciones del proxy, consulta las opciones para autenticar el proxy y las opciones de especificación de instancias.

  4. Para usar el cliente de administración, puedes instalar una copia local y conectarte a través del proxy o de direcciones IP.

    Si deseas obtener más información, consulta conéctate a un cliente psql a través del proxy de Cloud SQL y conéctate a un cliente psql mediante direcciones IP.

Configura strings de conexión y agrega una biblioteca

  1. Configura el entorno local a fin de que sea compatible con conexiones para realizar pruebas locales.

    Por ejemplo, para el código de muestra de más abajo:

    export POSTGRES_USER=[YOUR_USER]
    export POSTGRES_PASSWORD=[YOUR_PASSWORD]
    export POSTGRES_DATABASE=[YOUR_DATABASE]
    export POSTGRES_SOCKET_PATH=/cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]
    
  2. Para permitir que tu app se conecte a tu instancia de Cloud SQL cuando se implemente, agrega las variables de usuario, contraseña, base de datos y nombre de la conexión con la instancia de Cloud SQL a las variables de entorno relacionadas en el archivo app.yaml:

    env_variables:
      POSTGRES_USER: [YOUR_USER]
      POSTGRES_PASSWORD: [YOUR_PASSWORD]
      POSTGRES_DATABASE: [YOUR_DATABASE]
      POSTGRES_SOCKET_PATH: /cloudsql/[YOUR_INSTANCE_CONNECTION_NAME]

  3. Agrega la sección beta_settings a app.yaml con el nombre de la conexión de tu instancia de Cloud SQL.

    beta_settings:
      cloud_sql_instances: [YOUR_INSTANCE_CONNECTION_NAME]
  4. Agrega una biblioteca cliente PostgreSQL de Ruby al archivo Gemfile de tu aplicación. Por ejemplo, el código de muestra proporcionado usa Sequel con Pg como controlador:

    source "https://rubygems.org"
    
    gem "pg"
    gem "sequel"
  5. Instala las dependencias de tu aplicación:

    bundle install
    

    Para obtener más información sobre Bundler, consulta usa bibliotecas de Ruby.

Ejecuta el código de muestra

La muestra de app.rb siguiente usa el marco de trabajo de Sinatra para crear un registro de visitantes en una instancia de Cloud SQL. También usa Sequel, que maneja las consultas y reducciones de conexión.

Antes de ejecutar la muestra, debes crear las tablas necesarias y asegurarte de que la base de datos tenga la configuración adecuada:

bundle exec ruby create_tables.rb
En la muestra siguiente, se escribe la información de visitas en Cloud SQL y, luego, se leen y se muestran las últimas diez visitas:
require "digest/sha2"
require "sinatra"
require "sequel"

DB = Sequel.postgres user:     ENV["POSTGRES_USER"],
                     password: ENV["POSTGRES_PASSWORD"],
                     database: ENV["POSTGRES_DATABASE"],
                     host:     ENV["POSTGRES_SOCKET_PATH"]

get "/" do
  # Store a hash of the visitor's ip address
  visitor_ip = Digest::SHA256.hexdigest request.ip

  # Save visit in database
  DB[:visits].insert user_ip: visitor_ip, timestamp: Time.now

  # Retrieve the latest 10 visit records from the database
  visits = DB[:visits].limit(10).order Sequel.desc(:timestamp)

  response.write "Last 10 visits:\n"

  visits.each do |visit|
    response.write "Time: #{visit[:timestamp]} Addr: #{visit[:user_ip]}\n"
  end

  content_type "text/plain"
  status 200
end

Implementa y prueba

  1. Para realizar pruebas en tu aplicación de manera local, sigue estos pasos:

    bundle exec ruby app.rb
    
  2. Después de la prueba local, implementa tu app en App Engine:

    gcloud app deploy
    

  3. Para iniciar el navegador y ver la app en http://[YOUR_PROJECT_ID].appspot.com, ejecuta el comando siguiente:

    gcloud app browse
    

Ejecuta Cloud SQL y App Engine en proyectos diferentes

Si la aplicación de App Engine y la instancia de Cloud SQL se encuentran en distintos proyectos de Google Cloud Platform, debes usar una cuenta de servicio para permitir el acceso de la aplicación de App Engine a Cloud SQL.

Esta cuenta de servicio representa tu aplicación de App Engine y se crea de forma predeterminada cuando creas un proyecto de Google Cloud Platform.

  1. Si tu aplicación de App Engine está en el mismo proyecto que tu instancia de Cloud SQL, puedes omitir esta sección y dirigirte a la página Configura tu entorno local. De lo contrario, continúa con el paso siguiente.
  2. Identifica la cuenta de servicio asociada a tu aplicación de App Engine. La cuenta de servicio predeterminada de App Engine se llama [PROJECT-ID]@appspot.gserviceaccount.com.

    Puedes verificar la cuenta de servicio de App Engine en la página Permisos de IAM. Asegúrate de seleccionar el proyecto para tu aplicación de App Engine, no tu instancia de Cloud SQL.

    Ir a la página Permisos de IAM

  3. Ve a la página IAM y proyectos del administrador en Google Cloud Platform Console.

    Ir a la página IAM y proyectos del administrador

  4. Selecciona el proyecto que contiene la instancia de Cloud SQL.
  5. Busca el nombre de la cuenta de servicio.
  6. Si la cuenta de servicio ya existe y tiene una función que incluye el permiso de cloudsql.instances.connect, puedes proceder a la página de configuración de tu entorno local.

    Las funciones de Cloud SQL Client, Cloud SQL Editor y Cloud SQL Admin brindan los permisos necesarios, al igual que las funciones de proyecto heredadas Editor y Owner.

  7. De lo contrario, haz clic en Agregar para incluir la cuenta de servicio.
  8. En el cuadro de diálogo Agregar miembros, ingresa el nombre de la cuenta de servicio y selecciona una función que incluya el permiso cloudsql.instances.connect (cualquier función predefinida de Cloud SQL funcionará, excepto Visualizador).

    O bien, puedes seleccionar Proyecto > Editor a fin de usar la función básica de editor, pero esta incluye permisos para todo Google Cloud Platform.

    Si no ves estas funciones, es posible que tu usuario de Google Cloud Platform no tenga el permiso resourcemanager.projects.setIamPolicy. Puedes verificar tus permisos en la página de IAM en Google Cloud Platform Console mediante una búsqueda de tu ID de usuario.

  9. Haz clic en Agregar.

    Ahora deberías ver que la cuenta de servicio aparece con la función especificada.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Entorno flexible de App Engine para documentos de Ruby