Облачная платформаEvolution

Создание и загрузка функций в FunctionGraph


На этом этапе будут созданы бессерверные функции в сервисе FunctionGraph, которые выступят в роли API для веб-сайта:

Таких функций будет три:

  • Создание записи в БД — метод POST.

  • Получение записей из БД — метод GET.

  • Удаление записи из БД — метод DELETE.

Добавить эти функции в FunctionGraph можно двумя способами:

  1. Импорт готовых функций.

  2. Создание функций вручную:

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

Импорт готовых функций

Готовые функции достаточно загрузить в FunctionGraph, а затем настроить.

Скачайте готовые функции на свой компьютер:

Затем загрузите и настройте каждую функцию в FunctionGraph.

Загрузка функции в FunctionGraph

  1. В списке сервисов выберите FunctionGraph.

  2. Нажмите Create Function в правом верхнем углу.

  3. В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».

  4. В списке Runtime выберите Node.js 12.13.

  5. Нажмите Create Function.

  6. В блоке Code Source нажмите Upload → Local ZIP → Select File.

  7. Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.

Функция загружена в FunctionGraph.

Настройка функции в FunctionGraph

Для работы функции нужно указать переменные окружения. Для этого:

  1. Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.

  2. Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.

  3. Нажмите Add.

  4. Добавьте четыре переменные для подключения к БД:

    • Пароль пользователя БД: KeyDB_PASSWORD, Value — пароль.

      Зашифруйте значение для этой переменной, включив опцию Encrypted.

    • Адрес инстанса БД: KeyDB_HOST, Value — приватный IP-адрес БД-сервера.

    • Имя пользователя БД: KeyDB_USER, Value — имя пользователя.

    • Название БД: KeyDB_NAME, Value — название.

  5. Нажмите OK.

Когда все функции загружены и настроены, перейдите к настройке доступа к базе данных.

Функция создания записи

Эта функция реализовывает метод POST. Она принимает на вход JSON-файл с параметрами (имя, цвет и возраст питомца) и отправляет запрос к базе данных на создание записи.

Создание функции

  1. Создайте каталог для хранения кода функции:

    mkdir catalog-name
  2. Перейдите в созданный каталог:

    cd catalog-name
  3. Инициализируйте проект:

    npm init -y
  4. Установите зависимости:

    npm install mysql2
  5. Создайте файл index.js:

    touch index.js
  6. Добавьте в файл 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;
    }
  7. Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.

Функция создания записи о питомцах готова. Архив нужно загрузить в FunctionGraph.

Загрузка функции в FunctionGraph

  1. В списке сервисов выберите FunctionGraph.

  2. Нажмите Create Function в правом верхнем углу.

  3. В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».

  4. В списке Runtime выберите Node.js 12.13.

  5. Нажмите Create Function.

  6. В блоке Code Source нажмите Upload → Local ZIP → Select File.

  7. Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.

Функция загружена в FunctionGraph.

Настройка функции в FunctionGraph

Для работы функции нужно указать переменные окружения. Для этого:

  1. Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.

  2. Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.

  3. Нажмите Add.

  4. Добавьте четыре переменные для подключения к БД:

    • Пароль пользователя БД: KeyDB_PASSWORD, Value — пароль.

      Зашифруйте значение для этой переменной, включив опцию Encrypted.

    • Адрес инстанса БД: KeyDB_HOST, Value — приватный IP-адрес БД-сервера.

    • Имя пользователя БД: KeyDB_USER, Value — имя пользователя.

    • Название БД: KeyDB_NAME, Value — название.

  5. Нажмите OK.

Функция добавления записей создана.

Функция получения записей

Эта функция реализовывает метод GET. Она не принимает никакие параметры на вход, а возвращает все записи из базы данных.

Создание функции

  1. Создайте каталог для хранения кода функции:

    mkdir catalog-name
  2. Перейдите в созданный каталог:

    cd catalog-name
  3. Инициализируйте проект:

    npm init -y
  4. Установите зависимости:

    npm install mysql2
  5. Создайте файл index.js:

    touch index.js
  6. Добавьте в файл 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;
    }
  7. Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.

Функция получения записей о питомцах готова. Архив нужно загрузить в FunctionGraph.

Загрузка функции в FunctionGraph

  1. В списке сервисов выберите FunctionGraph.

  2. Нажмите Create Function в правом верхнем углу.

  3. В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».

  4. В списке Runtime выберите Node.js 12.13.

  5. Нажмите Create Function.

  6. В блоке Code Source нажмите Upload → Local ZIP → Select File.

  7. Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.

Функция загружена в FunctionGraph.

Настройка функции в FunctionGraph

Для работы функции нужно указать переменные окружения. Для этого:

  1. Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.

  2. Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.

  3. Нажмите Add.

  4. Добавьте четыре переменные для подключения к БД:

    • Пароль пользователя БД: KeyDB_PASSWORD, Value — пароль.

      Зашифруйте значение для этой переменной, включив опцию Encrypted.

    • Адрес инстанса БД: KeyDB_HOST, Value — приватный IP-адрес БД-сервера.

    • Имя пользователя БД: KeyDB_USER, Value — имя пользователя.

    • Название БД: KeyDB_NAME, Value — название.

  5. Нажмите OK.

Функция получения записей создана.

Функция удаления записи

Эта функция реализовывает метод DELETE. Она принимает на вход идентификатор записи в базе данных и удаляет ее.

Создание функции

  1. Создайте каталог для хранения кода функции:

    mkdir catalog-name
  2. Перейдите в созданный каталог:

    cd catalog-name
  3. Инициализируйте проект:

    npm init -y
  4. Установите зависимости:

    npm install mysql2
  5. Создайте файл index.js:

    touch index.js
  6. Добавьте в файл 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;
    }
  7. Создайте ZIP-архив с содержимым каталога catalog-name. Архив должен включать в себя: index.js, package.json, package-lock.json и каталог node_modules.

Функция удаления записи о питомцах готова. Архив нужно загрузить в FunctionGraph.

Загрузка функции в FunctionGraph

  1. В списке сервисов выберите FunctionGraph.

  2. Нажмите Create Function в правом верхнем углу.

  3. В поле Function name введите название функции — «AddPet», «GetPets» или «DelPet».

  4. В списке Runtime выберите Node.js 12.13.

  5. Нажмите Create Function.

  6. В блоке Code Source нажмите Upload → Local ZIP → Select File.

  7. Выберите архив с соответствующей функцией и загрузите его в FunctionGraph.

Функция загружена в FunctionGraph.

Настройка функции в FunctionGraph

Для работы функции нужно указать переменные окружения. Для этого:

  1. Нажмите на название функции, к которой нужно добавить переменные среды, и перейдите на вкладку Configuration.

  2. Перейдите в раздел Environment Variables и нажмите Edit Environment Variable.

  3. Нажмите Add.

  4. Добавьте четыре переменные для подключения к БД:

    • Пароль пользователя БД: KeyDB_PASSWORD, Value — пароль.

      Зашифруйте значение для этой переменной, включив опцию Encrypted.

    • Адрес инстанса БД: KeyDB_HOST, Value — приватный IP-адрес БД-сервера.

    • Имя пользователя БД: KeyDB_USER, Value — имя пользователя.

    • Название БД: KeyDB_NAME, Value — название.

  5. Нажмите OK.

Функция удаления записей создана.

Настройка доступа к БД без внешнего IP-адреса

В рамках практической работы для доступа к базе данных данных не будет использоваться публичный IP-адрес. Чтобы получить доступ к базе данных по приватному IP, функции в FunctionGraph можно интегрировать с виртуальными сетями. Для этого:

  1. В разделе Functions сервиса FunctionGraph нажмите на название функции.

  2. Перейдите во вкладку Configuration.

  3. В поле Agency нажмите Create Agency.

  4. На странице Agencies нажмите Create Agency.

  5. В поле Agency Name укажите название создаваемого агентства.

  6. В поле Agency Type выберите Cloud service.

  7. В списке Cloud Service выберите FunctionGraph.

  8. В списке Validity Period выберите Unlimited.

  9. Нажмите Assign Permission.

  10. С помощью поиска найдите и выберите роль VPC Administrator.

  11. Нажмите OK.

  12. Откройте страницу функции и в Confuguration → Agency обновите список агентств.

  13. В списке выберите созданное агентство.

  14. Активируйте параметр VPC Access.

  15. Выберите VPC и подсеть, доступ к которым будет иметь функция. Используйте ту подсеть виртуальной сети, в которой находится ранее созданная база данных.

  16. Нажмите Save.

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

Следующий шаг — публикация функций через API Gateway.