Создание и загрузка функций в FunctionGraph
На этом этапе будут созданы бессерверные функции, которые выступят в роли API для веб-сайта.
Вы можете воспользоваться готовыми функциями или создать каждую из них самостоятельно:
Импорт готовых функций
Готовые функции достаточно загрузить в FunctionGraph, а затем настроить.
Скачайте готовые функции на свой компьютер:
Затем загрузите и настройте каждую функцию в FunctionGraph.
Загрузка функции в FunctionGraph
В списке сервисов выберите FunctionGraph.
Нажмите Create Function в правом верхнем углу.
В поле Function name укажите название функции — «AddPet», «GetPets» или «DelPet».
В списке Runtime выберите Node.js 12.13.
В поле Handler укажите название файла и название функции. Если используете код из примера, оставьте значение по умолчанию.
В поле Code Entry Mode выберите Upload ZIP и загрузите архив с функцией.
Нажмите Create Function.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
В разделе Functions сервиса FunctionGraph нажмите на название загруженной ранее функции.
Перейдите во вкладку Configuration.
В разделе Encryption Settings нажмите Add Now и введите данные для подключения к базе данных:
Key —
DB_PASSWORD
;Value — пароль пользователя базы данных.
В разделе Environment Variables нажмите Add Now. Всего нужно добавить три параметра.
Адрес экземпляра базы данных:
Key —
DB_HOST
;Value — приватный IP-адрес сервера баз данных.
Имя пользователя базы данных:
Key —
DB_USER
;Value — имя пользователя.
Название базы данных:
Key —
DB_NAME
;Value — название базы данных.
Нажмите Save напротив каждого параметра.
В правом верхнем углу нажмите Save.
Когда все функции загружены и настроены, перейдите к настройке доступа к базе данных.
Функция создания записи
Эта функция реализовывает метод 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.
В поле Handler укажите название файла и название функции. Если используете код из примера, оставьте значение по умолчанию.
В поле Code Entry Mode выберите Upload ZIP и загрузите архив с функцией.
Нажмите Create Function.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
В разделе Functions сервиса FunctionGraph нажмите на название загруженной ранее функции.
Перейдите во вкладку Configuration.
В разделе Encryption Settings нажмите Add Now и введите данные для подключения к базе данных:
Key —
DB_PASSWORD
;Value — пароль пользователя базы данных.
В разделе Environment Variables нажмите Add Now. Всего нужно добавить три параметра.
Адрес экземпляра базы данных:
Key —
DB_HOST
;Value — приватный IP-адрес сервера баз данных.
Имя пользователя базы данных:
Key —
DB_USER
;Value — имя пользователя.
Название базы данных:
Key —
DB_NAME
;Value — название базы данных.
Нажмите Save напротив каждого параметра.
В правом верхнем углу нажмите Save.
Функция добавления записей создана.
Функция получения записей
Эта функция реализовывает метод 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.
В поле Handler укажите название файла и название функции. Если используете код из примера, оставьте значение по умолчанию.
В поле Code Entry Mode выберите Upload ZIP и загрузите архив с функцией.
Нажмите Create Function.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
В разделе Functions сервиса FunctionGraph нажмите на название загруженной ранее функции.
Перейдите во вкладку Configuration.
В разделе Encryption Settings нажмите Add Now и введите данные для подключения к базе данных:
Key —
DB_PASSWORD
;Value — пароль пользователя базы данных.
В разделе Environment Variables нажмите Add Now. Всего нужно добавить три параметра.
Адрес экземпляра базы данных:
Key —
DB_HOST
;Value — приватный IP-адрес сервера баз данных.
Имя пользователя базы данных:
Key —
DB_USER
;Value — имя пользователя.
Название базы данных:
Key —
DB_NAME
;Value — название базы данных.
Нажмите Save напротив каждого параметра.
В правом верхнем углу нажмите Save.
Функция получения записей создана.
Функция удаления записи
Эта функция реализовывает метод 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.
В поле Handler укажите название файла и название функции. Если используете код из примера, оставьте значение по умолчанию.
В поле Code Entry Mode выберите Upload ZIP и загрузите архив с функцией.
Нажмите Create Function.
Функция загружена в FunctionGraph.
Настройка функции в FunctionGraph
Для работы функции нужно указать переменные окружения. Для этого:
В разделе Functions сервиса FunctionGraph нажмите на название загруженной ранее функции.
Перейдите во вкладку Configuration.
В разделе Encryption Settings нажмите Add Now и введите данные для подключения к базе данных:
Key —
DB_PASSWORD
;Value — пароль пользователя базы данных.
В разделе Environment Variables нажмите Add Now. Всего нужно добавить три параметра.
Адрес экземпляра базы данных:
Key —
DB_HOST
;Value — приватный IP-адрес сервера баз данных.
Имя пользователя базы данных:
Key —
DB_USER
;Value — имя пользователя.
Название базы данных:
Key —
DB_NAME
;Value — название базы данных.
Нажмите Save напротив каждого параметра.
В правом верхнем углу нажмите Save.
Функция удаления записей создана.
Настройка доступа к БД без внешнего 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.