Подключение к Cloud SQL с помощью облачных функций

1. Введение

Последнее обновление: 11.05.2021

Что такое Cloud SQL?

Cloud SQL — это полностью управляемый сервис баз данных, который упрощает настройку, обслуживание, управление и администрирование реляционных баз данных на платформе Google Cloud Platform.

Что такое Cloud Functions?

Cloud Functions — это легковесное вычислительное решение для разработчиков, позволяющее создавать автономные функции, выполняющие одну задачу и реагирующие на события в облаке, без необходимости управления сервером или средой выполнения.

Что вы построите

В этом практическом задании вы напишете облачную функцию на Python. Функция:

  • Подключается к экземпляру базы данных Cloud SQL.
  • Отправляет запрос на вставку данных в таблицу базы данных.

Что вы узнаете

  • Как получить доступ к веб-интерфейсу Cloud Functions в консоли Google Cloud.
  • Как создать облачную функцию.
  • Как протестировать облачную функцию.
  • Как подключиться к экземпляру базы данных Cloud SQL (MySQL или PostgreSQL) с помощью Python.
  • Как записывать данные в базу данных Cloud SQL с помощью Python.

2. Требования

  • Браузер, например Chrome или Firefox .
  • Проект Google Cloud Platform, содержащий ваш экземпляр Cloud SQL.
  • Если у вас его еще нет, вы можете выполнить действия, описанные в руководстве по быстрому запуску MySQL или PostgreSQL . Выполните все шаги, кроме очистки.
  • В вашем экземпляре содержится база данных MySQL или PostgreSQL с таблицей.
  • Имя подключения к экземпляру, имена базы данных и таблиц, имя пользователя базы данных и пароль пользователя.
  • Сервисная учетная запись с ролью Cloud SQL Client .

3. Подготовьте код и создайте функцию.

Подготовьте код

Код облачной функции для подключения к базе данных Cloud SQL находится здесь. Некоторые значения переменных зависят от того, является ли ваша база данных Cloud SQL MySQL или PostgreSQL, а также от информации вашей собственной базы данных.

В пользовательском интерфейсе Cloud Functions в Cloud Console есть текстовый редактор. Вы можете скопировать/вставить и отредактировать код там, или сначала отредактировать код локально, а затем скопировать/вставить его в пользовательский интерфейс.

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 {} ({}) values ({})'.format(table_name, table_field, 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. В браузере перейдите в пользовательский интерфейс консоли Google Cloud Platform .
  2. Выберите «Облачные функции» в меню навигации.
  3. Нажмите кнопку «СОЗДАТЬ ФУНКЦИЮ» на панели инструментов.
  4. Введите название для функции.
  5. Выберите HTTP- триггер. (Запишите URL-адрес, отображаемый под элементом триггера. Он будет иметь следующий формат: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME )
  6. В разделе «Аутентификация» выберите «Разрешить вызовы без аутентификации» , чтобы сделать функцию общедоступной.
  7. Разверните раздел «Параметры среды выполнения, сборки и подключений». В разделе «Учетная запись службы среды выполнения» выберите учетную запись службы, имеющую роль « Клиент Cloud SQL» .
  8. Нажмите кнопку ДАЛЕЕ .
  9. В качестве параметра среды выполнения выберите Python 3.7 .
  10. Для параметра "Встроенный редактор" выберите "Исходный код" .
  11. В окне редактора исходного кода удалите существующее содержимое файлов requirements.txt и main.py и замените его отредактированными версиями приведенного выше кода.
  12. Введите insert в качестве имени точки входа.
  13. Нажмите «Развернуть» и подождите, пока функция будет создана. Индикатор загрузки остановится, и на следующей странице появится зеленая галочка, когда функция будет готова к использованию.

4. Проверьте функцию.

  1. В браузере перейдите в пользовательский интерфейс консоли Google Cloud Platform .
  2. Выберите «Облачные функции» в меню навигации.
  3. Щелкните по названию функции, которую вы создали ранее.
  4. Выберите ссылку «ТЕСТИРОВАНИЕ» в середине страницы.
  5. Выберите «ПРОВЕРИТЬ ФУНКЦИЮ» .
  6. В результате должно отобразиться: ok (Если тест не пройден, вы увидите трассировку стека, которая поможет в отладке.)
  7. В браузере перейдите по URL-адресу, который вы сохранили ранее при создании функции. Если вы забыли сохранить URL-адрес, вы можете получить его по ссылке TRIGGER .
  8. Результат "ОК" также должен отобразиться в браузере.

5. Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этом практическом задании, выполните следующие шаги.

Удалите экземпляр Cloud SQL.

  1. Перейдите на страницу «Экземпляры Cloud SQL» в консоли Google Cloud.
  2. Выберите созданный вами экземпляр, чтобы открыть страницу с подробными сведениями об экземпляре.
  3. В панели значков в верхней части страницы нажмите «Удалить» .
  4. В окне «Удалить экземпляр» введите имя вашего экземпляра, затем нажмите «Удалить» , чтобы удалить экземпляр. Вы не сможете повторно использовать имя экземпляра в течение примерно 7 дней после его удаления.

Удалить облачную функцию

  1. Перейдите на страницу Cloud Functions в консоли Google Cloud.
  2. Выберите три точки в разделе «Действия» для вашей функции и выберите «Удалить» .
  3. Для подтверждения удаления нажмите кнопку «УДАЛИТЬ» .

6. Поздравляем!

Поздравляем, вы успешно создали облачную функцию, работающую с Cloud SQL.

В частности, вы создали облачную функцию, которая подключается к экземпляру базы данных Cloud SQL и записывает в него данные.

7. Что дальше?

Посмотрите некоторые из этих практических занятий по программированию...

Дополнительная информация

Справочная документация