Como se conectar ao Cloud SQL com o Cloud Functions

Última atualização: 2020-06-17

O que é o Cloud SQL?

O Cloud SQL é um serviço de banco de dados totalmente gerenciado que facilita a configuração, a manutenção, o gerenciamento e a administração de bancos de dados relacionais no Google Cloud Platform.

O que é o Cloud Functions?

O Cloud Functions é uma solução de computação leve para desenvolvedores. Ele cria funções autônomas e de finalidade única que respondem a eventos do Cloud sem a necessidade de gerenciar um servidor ou um ambiente de execução.

O que você criará

Neste codelab, você escreverá uma Função do Cloud em Python. A função:

  • Conecta-se a uma instância de banco de dados do Cloud SQL.
  • Envia uma instrução de inserção para uma tabela no banco de dados.

O que você aprenderá

  • Como acessar a IU da Web do Cloud Functions no Console do Google Cloud.
  • Como criar uma Função do Cloud
  • Como testar uma Função do Cloud
  • Como se conectar a uma instância de banco de dados do Cloud SQL (MySQL ou PostgreSQL) usando Python.
  • Como gravar em um banco de dados do Cloud SQL usando o Python.
  • Um navegador, como o Chrome ou o Firefox
  • Um projeto do Google Cloud Platform que contém a instância do Cloud SQL.
  • Se você ainda não tiver um, temos um tutorial para isso. Siga todas as etapas, exceto para excluir a instância.
  • A instância contém um banco de dados MySQL ou PostgreSQL com uma tabela.
  • O nome da conexão da instância, do banco de dados e da tabela, o nome de usuário do banco de dados e a senha do usuário.
  • Uma conta de serviço com o papel de cliente do Cloud SQL.

O código da Função do Cloud para se conectar a um banco de dados do Cloud SQL está aqui. Alguns dos valores de variáveis dependem de seu banco de dados do Cloud SQL ser MySQL ou PostgreSQL e depende das suas próprias informações de banco de dados.

A IU do Cloud Functions no Console do Cloud inclui um editor de texto. É possível copiar/colar e editar o código na IU. Se preferir, edite o código localmente primeiro para depois copiá-lo/colá-lo na 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. Em um navegador, acesse a IU do Console do Google Cloud Platform.
  2. Selecione Cloud Functions no menu de navegação.
  3. Clique em CRIAR FUNÇÃO na barra de botões.
  4. Insira um nome para a função.
  5. Selecione o gatilho HTTP. Anote o URL exibido abaixo do item do acionador. Ele terá este formato: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME.
  6. Selecione Editor in-line para a opção de código-fonte.
  7. Selecione Python 3.7 para a opção de ambiente de execução.
  8. Nas janelas do editor de código-fonte, exclua o conteúdo existente para requirements.txt e main.py e substitua-o pelas versões editadas do código acima.
  9. Digite insert como o nome da Função a ser executada.
  10. Em Opções avançadas, selecione uma conta de serviço que tenha o papel de cliente do Cloud SQL.
  11. Clique em Criar e aguarde até que o ícone de carregamento pare. Uma marca de seleção verde aparecerá quando a função estiver pronta para uso.
  1. Em um navegador, acesse a IU do Console do Google Cloud Platform.
  2. Selecione Cloud Functions no menu de navegação.
  3. Clique no nome da função que você criou anteriormente.
  4. Selecione o link TESTE no meio da página.
  5. Selecione TESTAR A FUNÇÃO.
  6. O resultado deve aparecer: ok. Se o teste falhar, você verá um stack trace para ajudar na depuração.
  7. Em um navegador, acesse o URL que você salvou anteriormente quando criou a função.
  8. O resultado ok também deve aparecer no navegador.

Parabéns, você criou uma Função do Cloud que funciona com o Cloud SQL.

Você criou uma Função do Cloud que se conecta e grava em uma instância de banco de dados do Cloud SQL.

Confira alguns desses codelabs...

Leitura adicional

Documentos de referência