- Архитектурный центр
- Практические материалы
- Использование Apache Spark в облаке Advanced
- Создание корпоративного хранилища данных на платформе Advanced с помощью Data Warehouse Service
- Создание корпоративного хранилища данных на платформе Advanced с помощью ClickHouse в составе кластера MapReduce
- Управление пользовательским доступом и правами в консоли облака Advanced через провайдера OAuth
- Федерация консоли облака Advanced с доменом Active Directory
- Обучающие курсы и сертификация
- Термины и сокращения
- Обратиться в поддержку
Создание и загрузка функций в FunctionGraph
На этом этапе будут созданы бессерверные функции в сервисе FunctionGraph, которые выступят в роли API для веб-сайта:
Таких функций будет три:
Создание записи в БД — метод POST.
Получение записей из БД — метод GET.
Удаление записи из БД — метод DELETE.
Добавить эти функции в FunctionGraph можно двумя способами:
Создание функций вручную:
Выберите любой из способов. Первый быстрее и проще, но во втором вы самостоятельно создадите функцию, а затем загрузите и настроите ее в FunctionGraph.
Импорт готовых функций
Готовые функции достаточно загрузить в FunctionGraph, а затем настроить.
Скачайте готовые функции на свой компьютер:
Затем загрузите и настройте каждую функцию в FunctionGraph.
Загрузка функции в FunctionGraph
В списке сервисов выберите FunctionGraph.
Нажмите Create Function в правом верхнем углу.
В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».
В списке Runtime выберите Node.js 12.13.
Нажмите Create Function.
В блоке Code Source нажмите Upload → Local ZIP → Select File.
Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.
Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.
Нажмите Add.
Добавьте четыре переменные для подключения к БД:
Пароль пользователя БД: Key — DB_PASSWORD, Value — пароль.
Зашифруйте значение для этой переменной, включив опцию Encrypted.
Адрес инстанса БД: Key — DB_HOST, Value — приватный IP-адрес БД-сервера.
Имя пользователя БД: Key — DB_USER, Value — имя пользователя.
Название БД: Key — DB_NAME, Value — название.
Нажмите OK.
Когда все функции загружены и настроены, перейдите к настройке доступа к базе данных.
Функция создания записи
Эта функция реализовывает метод POST. Она принимает на вход JSON-файл с параметрами (имя, цвет и возраст питомца) и отправляет запрос к базе данных на создание записи.
Создание функции
Создайте каталог для хранения кода функции:
mkdir catalog-nameПерейдите в созданный каталог:
cd catalog-nameИнициализируйте проект:
npm init -yУстановите зависимости:
npm install mysql2Создайте файл index.js:
touch index.jsДобавьте в файл index.js код:
exports.handler = async (event, context) => {const mysql = require("mysql2/promise");const db_connection = await mysql.createConnection({host: process.env.DB_HOST,user: process.env.DB_USER,database: process.env.DB_NAME,password: context.getUserData("DB_PASSWORD")});let buff = new Buffer(event.body, 'base64');let data = JSON.parse(buff.toString('utf8'));var insert_sql = "INSERT INTO pets (Name, Color, Age) VALUES (?, ?, ?)";var get_inserted_sql = "select * FROM pets where id =?"const [insertMetadata] = await db_connection.query(insert_sql, [data.name, data.color, data.age]);const [rows, fields] = await db_connection.query(get_inserted_sql, insertMetadata.insertId);const output ={'statusCode': 200,'headers':{'Content-Type': 'application/json'},'isBase64Encoded': false,'body': JSON.stringify(rows[0]),}db_connection.end();return output;}Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.
Функция создания записи о питомцах готова. Архив нужно загрузить в FunctionGraph.
Загрузка функции в FunctionGraph
В списке сервисов выберите FunctionGraph.
Нажмите Create Function в правом верхнем углу.
В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».
В списке Runtime выберите Node.js 12.13.
Нажмите Create Function.
В блоке Code Source нажмите Upload → Local ZIP → Select File.
Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.
Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.
Нажмите Add.
Добавьте четыре переменные для подключения к БД:
Пароль пользователя БД: Key — DB_PASSWORD, Value — пароль.
Зашифруйте значение для этой переменной, включив опцию Encrypted.
Адрес инстанса БД: Key — DB_HOST, Value — приватный IP-адрес БД-сервера.
Имя пользователя БД: Key — DB_USER, Value — имя пользователя.
Название БД: Key — DB_NAME, Value — название.
Нажмите OK.
Функция добавления записей создана.
Функция получения записей
Эта функция реализовывает метод GET. Она не принимает никакие параметры на вход, а возвращает все записи из базы данных.
Создание функции
Создайте каталог для хранения кода функции:
mkdir catalog-nameПерейдите в созданный каталог:
cd catalog-nameИнициализируйте проект:
npm init -yУстановите зависимости:
npm install mysql2Создайте файл index.js:
touch index.jsДобавьте в файл index.js код:
exports.handler = async (event, context) => {const mysql = require("mysql2/promise");const db_connection = await mysql.createConnection({host: process.env.DB_HOST,user: process.env.DB_USER,database: process.env.DB_NAME,password: context.getUserData("DB_PASSWORD")});var sql = "select * FROM pets";const [rows, fields] = await db_connection.query(sql);const output ={'statusCode': 200,'headers':{'Content-Type': 'application/json'},'isBase64Encoded': false,'body': JSON.stringify(rows)}db_connection.end();return output;}Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.
Функция получения записей о питомцах готова. Архив нужно загрузить в FunctionGraph.
Загрузка функции в FunctionGraph
В списке сервисов выберите FunctionGraph.
Нажмите Create Function в правом верхнем углу.
В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».
В списке Runtime выберите Node.js 12.13.
Нажмите Create Function.
В блоке Code Source нажмите Upload → Local ZIP → Select File.
Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.
Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.
Нажмите Add.
Добавьте четыре переменные для подключения к БД:
Пароль пользователя БД: Key — DB_PASSWORD, Value — пароль.
Зашифруйте значение для этой переменной, включив опцию Encrypted.
Адрес инстанса БД: Key — DB_HOST, Value — приватный IP-адрес БД-сервера.
Имя пользователя БД: Key — DB_USER, Value — имя пользователя.
Название БД: Key — DB_NAME, Value — название.
Нажмите OK.
Функция получения записей создана.
Функция удаления записи
Эта функция реализовывает метод DELETE. Она принимает на вход идентификатор записи в базе данных и удаляет ее.
Создание функции
Создайте каталог для хранения кода функции:
mkdir catalog-nameПерейдите в созданный каталог:
cd catalog-nameИнициализируйте проект:
npm init -yУстановите зависимости:
npm install mysql2Создайте файл index.js:
touch index.jsДобавьте в файл index.js код:
exports.handler = async (event, context) => {const mysql = require("mysql2/promise");const db_connection = await mysql.createConnection({host: process.env.DB_HOST,user: process.env.DB_USER,database: process.env.DB_NAME,password: context.getUserData("DB_PASSWORD")});const id = event.pathParameters.id;const delete_sql = "DELETE FROM pets WHERE id = ?";const [deleteMetadata] = await db_connection.query(delete_sql, [id]);db_connection.end();const output ={'statusCode': 204}return output;}Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.
Функция удаления записи о питомцах готова. Архив нужно загрузить в FunctionGraph.
Загрузка функции в FunctionGraph
В списке сервисов выберите FunctionGraph.
Нажмите Create Function в правом верхнем углу.
В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».
В списке Runtime выберите Node.js 12.13.
Нажмите Create Function.
В блоке Code Source нажмите Upload → Local ZIP → Select File.
Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.
Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.
Нажмите Add.
Добавьте четыре переменные для подключения к БД:
Пароль пользователя БД: Key — DB_PASSWORD, Value — пароль.
Зашифруйте значение для этой переменной, включив опцию Encrypted.
Адрес инстанса БД: Key — DB_HOST, Value — приватный IP-адрес БД-сервера.
Имя пользователя БД: Key — DB_USER, Value — имя пользователя.
Название БД: Key — DB_NAME, Value — название.
Нажмите OK.
Функция удаления записей создана.
Настройка доступа к БД без внешнего IP-адреса
В рамках практической работы для доступа к базе данных данных не будет использоваться публичный IP-адрес. Чтобы получить доступ к базе данных по приватному IP, функции в FunctionGraph можно интегрировать с виртуальными сетями. Для этого:
В разделе Functions сервиса FunctionGraph нажмите на название функции.
Перейдите во вкладку Configuration.
В поле Agency нажмите Create Agency.
На странице Agencies нажмите Create Agency.
В поле Agency Name укажите название создаваемого агентства.
В поле Agency Type выберите Cloud service.
В списке Cloud Service выберите FunctionGraph.
В списке Validity Period выберите Unlimited.
Нажмите Assign Permission.
С помощью поиска найдите и выберите роль VPC Administrator.
Нажмите OK.
Откройте страницу функции и в Confuguration → Agency обновите список агентств.
В списке выберите созданное агентство.
Активируйте параметр VPC Access.
Выберите VPC и подсеть, доступ к которым будет иметь функция. Используйте ту подсеть виртуальной сети, в которой находится ранее созданная база данных.
Нажмите Save.
Функция готова к работе с сервером баз данных, у которого нет доступа в интернет. Для двух других функций также назначьте созданное агентство и добавьте их в ту же подсеть.
Следующий шаг — публикация функций через API Gateway.
- Импорт готовых функций
- Функция создания записи
- Функция получения записей
- Функция удаления записи
- Настройка доступа к БД без внешнего IP-адреса