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

1. Введение

Последнее обновление: 11 мая 2021 г.

Что такое Cloud SQL?

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

Что такое облачные функции?

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

Что ты построишь

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

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

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

  • Как получить доступ к веб-интерфейсу облачных функций в Google Cloud Console.
  • Как создать облачную функцию.
  • Как протестировать облачную функцию.
  • Как подключиться к экземпляру базы данных 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 Function для подключения к базе данных Cloud SQL находится здесь. Некоторые значения переменных зависят от того, является ли ваша база данных Cloud SQL MySQL или PostgreSQL, а также от информации о вашей собственной базе данных.

Пользовательский интерфейс облачных функций в облачной консоли включает текстовый редактор. Вы можете скопировать/вставить и отредактировать код туда или сначала отредактировать код локально, а затем скопировать/вставить его в пользовательский интерфейс.

требования.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. SelВ окнах редактора исходного кода удалите существующее содержимое требований.txt и main.py и замените их отредактированными версиями приведенного выше кода.
  12. Введите вставку в качестве имени точки входа.
  13. Нажмите «Развернуть» и подождите, пока функция будет создана. Счетчик перестанет вращаться, и на следующей странице появится зеленая галочка, когда функция будет готова к использованию.

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

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

5. Очистка

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

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

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

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

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

6. Поздравления

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

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

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

Посмотрите некоторые из этих кодовых лабораторий...

Дальнейшее чтение

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