- tocdepth
2
Создание и загрузка функций в 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 нажмите .
Выберите архив с соответствующей функцией и загрузите его в 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 нажмите .
Выберите архив с соответствующей функцией и загрузите его в 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 нажмите .
Выберите архив с соответствующей функцией и загрузите его в 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 нажмите .
Выберите архив с соответствующей функцией и загрузите его в 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.
Откройте страницу функции и в
обновите список агентств.В списке выберите созданное агентство.
Активируйте параметр VPC Access.
Выберите VPC и подсеть, доступ к которым будет иметь функция. Используйте ту подсеть виртуальной сети, в которой находится ранее созданная база данных.
Нажмите Save.
Функция готова к работе с сервером баз данных, у которого нет доступа в интернет. Для двух других функций также назначьте созданное агентство и добавьте их в ту же подсеть.
Следующий шаг — публикация функций через API Gateway.
для Dev & Test