Conectar-se pelo App Engine

Nesta página, fornecemos informações e exemplos sobre como se conectar a uma instância do Cloud SQL a partir de um aplicativo do App Engine.

Configurar o Cloud SQL e o App Engine

Para mais informações sobre como configurar uma instância do Cloud SQL ou um aplicativo do App Engine, consulte as instruções a seguir:

  • Identifique o nome da conexão para a instância do Cloud SQL. Esta é uma string exclusiva para cada instância, no formato <PROJECT_ID>:<REGION>:<INSTANCE_ID>. Ela aparece em Nome da conexão da instância, na página Detalhes da instância, ou em connectionName quando se usa o comando gcloud sql instances describe <INSTANCE_ID>.

  • Verifique se a API Admin do Cloud SQL está ativada para o projeto que contém a instância dele.

    Ativar API

É recomendável que o aplicativo use o pool de conexões para conseguir melhor desempenho e tempos de resposta mais rápidos. Para ver exemplos específicos de pools de conexões, consulte Como gerenciar conexões de banco de dados.

Como conectar o ambiente padrão do App Engine ao Cloud SQL

No ambiente padrão do App Engine há um soquete de domínio Unix para conexão com instâncias do Cloud SQL. Essas conexões são autorizadas automaticamente usando a conta de serviço padrão do App Engine.

O soquete pode ser encontrado em /cloudsql/INSTANCE_CONNECTION_NAME e usado diretamente pelo aplicativo. Veja abaixo alguns exemplos de uso.

Para o PostgreSQL, pode ser preciso adicionar o sufixo .s.PGSQL.5432 ao caminho do soquete. Algumas bibliotecas de conectores aplicam o sufixo automaticamente, mas outras exigem que o caminho do soquete seja especificado da seguinte maneira: /cloudsql/INSTANCE_CONNECTION_NAME/.s.PGSQL.5432.

Python

# The SQLAlchemy engine will help manage interactions, including automatically
# managing a pool of connections to your database
db = sqlalchemy.create_engine(
    # Equivalent URL:
    # mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>
    sqlalchemy.engine.url.URL(
        drivername='mysql+pymysql',
        username=db_user,
        password=db_pass,
        database=db_name,
        query={
            'unix_socket': '/cloudsql/{}'.format(cloud_sql_connection_name)
        }
    ),
    # ... Specify additional properties here.
    # ...
)
Para que você possa ver o snippet acima no contexto de um aplicativo, todo o projeto está disponível aqui.

Java

// The configuration object specifies behaviors for the connection pool.
HikariConfig config = new HikariConfig();

// Configure which instance and what database user to connect with.
config.setJdbcUrl(String.format("jdbc:postgresql:///%s", DB_NAME));
config.setUsername(DB_USER); // e.g. "root", "postgres"
config.setPassword(DB_PASS); // e.g. "my-password"

// For Java users, the Cloud SQL JDBC Socket Factory can provide authenticated connections.
// See https://github.com/GoogleCloudPlatform/cloud-sql-jdbc-socket-factory for details.
config.addDataSourceProperty("socketFactory", "com.google.cloud.sql.postgres.SocketFactory");
config.addDataSourceProperty("cloudSqlInstance", CLOUD_SQL_CONNECTION_NAME);

// ... Specify additional connection properties here.

// ...

// Initialize the connection pool using the configuration object.
DataSource pool = new HikariDataSource(config);
Para que você possa ver o snippet acima no contexto de um aplicativo, todo o projeto está disponível aqui.

Node.js

// Initialize Knex, a Node.js SQL query builder library with built-in connection pooling.
const knex = connect();

function connect() {
  // Configure which instance and what database user to connect with.
  // Remember - storing secrets in plaintext is potentially unsafe. Consider using
  // something like https://cloud.google.com/kms/ to help keep secrets secret.
  const config = {
    user: process.env.DB_USER, // e.g. 'my-user'
    password: process.env.DB_PASS, // e.g. 'my-user-password'
    database: process.env.DB_NAME, // e.g. 'my-database'
  };

  config.host = `/cloudsql/${process.env.CLOUD_SQL_CONNECTION_NAME}`;

  // Establish a connection to the database
  const knex = Knex({
    client: 'pg',
    connection: config,
  });

  // ... Specify additional properties here.
  // ...
  return knex;
Para que você possa ver o snippet acima no contexto de um aplicativo, todo o projeto está disponível aqui.

Como conectar o ambiente flexível do App Engine ao Cloud SQL

No ambiente flexível do App Engine, há opções de conexão segura para instâncias do Cloud SQL usando um soquete de domínio Unix ou uma conexão TCP.

Soquete de domínio Unix

Para habilitar o soquete Unix fornecido, adicione o seguinte ao app.yaml do projeto:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME> 
O aplicativo pode se conectar à instância do Cloud SQL usando o soquete do Unix localizado em /cloudsql/<INSTANCE_CONNECTION_NAME>.
Ao se conectar a várias instâncias do Cloud SQL, use uma lista, separada por vírgulas, de nomes de conexão da instância. Cada instância listada criará um soquete diferente, derivado do nome da conexão da instância.

Conexão TCP

Para ativar a porta TCP fornecida, adicione o seguinte ao app.yaml do seu projeto:
beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<TCP_PORT>
Seu aplicativo pode se conectar à instância do Cloud SQL usando a porta TCP escutando em 127.0.0.1:<TCP_PORT>.
Quando você se conectar a várias instâncias do Cloud SQL, use uma lista, separada por vírgulas, de nomes de conexão de instâncias. Cada instância precisa usar uma porta local diferente.

Mais informações

App Engine e Cloud SQL em projetos diferentes

Para aplicativos do App Engine e instâncias do Cloud SQL em projetos diferentes, conceda à conta de serviço padrão do appengine ([PROJECT-ID]@appspot.gserviceaccount.com) um dos seguintes papéis do IAM:

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

Para receber instruções detalhadas sobre como adicionar funções do IAM a uma conta de serviço, consulte Como conceder funções a contas de serviço.

Práticas recomendadas

Quando você se conectar ao Cloud SQL usando o App Engine, lembre-se das seguintes práticas recomendadas:

  • O App Engine consegue criar automaticamente mais instâncias quando a carga aumenta. Se o número de instâncias do App Engine aumentar além do que a instância do Cloud SQL suporta, a instância do Cloud SQL não conseguirá atender à demanda. É possível evitar esse problema limitando o número máximo de instâncias do App Engine. Para ver mais informações, consulte Elementos de escalonamento.

  • Conexões de banco de dados consomem recursos. O aplicativo deve usar as práticas recomendadas do gerenciamento de conexão para reduzir o número de conexões necessárias. Para o ambiente padrão do App Engine, há um limite rígido no número de conexões que uma instância do App Engine pode abrir com o Cloud SQL.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Cloud SQL para PostgreSQL