Упражнение. Создание функции в локальной среде с помощью Core Tools

Завершено

Набор Azure Functions Core Tools позволяет разрабатывать функции на локальном компьютере, используя следующее:

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

Вы решили локально начать работу с Функции Azure путем разработки функции, которая вычисляет простой интерес. В конечном итоге можно создать более сложные функции, которые работают вместе и вызывать другие службы и базы данных. Использование основных инструментов для создания функции, которая выполняет базовое вычисление кредита, является хорошим началом. Вы также хотите попробовать выполнить функцию на своем компьютере перед ее публикацией в Azure. Все это можно сделать в Azure Cloud Shell с помощью Core Tools.

Azure Cloud Shell поставляется с основными инструментами, Azure CLI и редактором, который можно использовать для написания кода. Прежде чем продолжить, выберите " Активировать песочницу " выше.

Создание локального проекта Функций Azure

В этом упражнении используйте Cloud Shell для разработки первой функции JavaScript с помощью основных инструментов. Cloud Shell уже имеет правильные версии основных средств и Node.js установлены.

  1. В корневой папке выполните команду func init , чтобы создать проект функций в новой loan-wizard папке.

    func init loan-wizard
    
  2. При появлении запроса на выбор рабочей среды выполнения введите 3 для узла.

  3. При появлении запроса на выбор языка введите 1 для javascript.

    В выходных данных перечислены файлы, записываемые на диск, включая следующие файлы:

    • host.json поддерживает конфигурацию на уровне приложения как для экземпляра среды выполнения, так и для определенных типов триггеров и привязки.
    • local.settings.json задает поведение только для локальной среды и параметры приложения (переменные локальной среды).
    • package.json — это предназначенный для среды JavaScript файл, который отслеживает все пакеты, устанавливаемые и используемые в коде.
    • .gitignore и extensions.json — это файлы конфигурации, используемые средством управления версиями Git и Visual Studio Code соответственно. Вы можете игнорировать их сейчас.

Создание функции, активируемой по HTTP

Пришло время создать функцию!

  1. В Cloud Shell перейдите к новому loan-wizard каталогу.

    cd ~/loan-wizard
    
  2. Запустите func new , чтобы запустить мастер создания функции.

    func new
    
  3. При появлении запроса на выбор шаблона введите 7 для триггера HTTP.

  4. При появлении запроса на указание имени функции для триггера HTTP введите simple-interest.

  5. Выполните следующую команду, чтобы открыть редактор Cloud Shell.

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    Мастер создает новый файл в проекте функций под src/functions именем simple-interest.js, который содержит содержимое шаблона по умолчанию. Этот код поддерживает модель программирования Node.js версии 4 для Функции Azure. Уделите немного времени изучению файлов проекта в редакторе. На снимке экрана показана развернутая папка с simple-interest.js открыть в редакторе.

Реализация функции simple-interest

Реализация функции по умолчанию, созданная для нас в simple-interest.js ищет входные данные, вызываемые name в строке запроса или тексте входящего HTTP-запроса, и возвращает строкуHello, [name]. Это хорошая иллюстрация использования триггера HTTP, но вы хотите заменить этот код кодом, который вычисляет простой интерес из трех входных параметров.

  1. В области ФАЙЛОВ редактора разверните папку функций src>и выберите simple-interest.js, чтобы открыть файл в редакторе.

  2. Замените полное содержимое simple-interest.js следующим кодом:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    Этот скрипт ищет параметры с именем principal, rateа term также в строке запроса HTTP-запроса. Затем он возвращает результат простого вычисления процентов (principal * rate * term).

  3. Сохраните файл, нажав клавиши CTRL+S и закройте редактор, нажав клавиши CTRL+Q.

Запуск функции в Cloud Shell

Чтобы запустить новую функцию локально, чтобы попробовать ее, используйте func start для запуска среды выполнения функций (func.exe) в фоновом процессе, чтобы использовать командную строку во время ее выполнения. Затем используйте средство командной строки для curlвзаимодействия с функцией.

Если вы используете Core Tools с собственного компьютера, вы можете просто использовать curl из второго окна терминала или веб-браузера. Выходные данные, созданные core Tools, отображаются в режиме реального времени в первом окне терминала. В Cloud Shell вы ограничены одним терминалом, поэтому в фоновом процессе необходимо запустить основные инструменты (func.exe).

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

    func start &> ~/output.txt &
    

    Как и в случае с func new, в Cloud Shell должен быть открыт каталог loan-wizard.

    Теперь узел функций записывает выходные данные в файл ~/output.txt. Вы можете продолжать использовать командную строку во время его выполнения.

    Используйте команду ps, чтобы проверить выполнение процесса func.

  2. Введите следующую команду, чтобы просмотреть журнал вывода.

    code ~/output.txt
    

    В выходных данных отображается сообщение, которое списки Functions: simple-interest: доступны как GET, так и HTTP-запрос http://localhost:7071/api/simple-interestPOST.

    Примечание.

    Если появится сообщение об ошибке, нажмите клавиши CTRL+C, чтобы остановить узел. Убедитесь, что содержимое файла кода совпадает с примером.

    Этот URL-адрес localhost не опубликован в Интернете. Он доступен только для средств, работающих в сеансе Cloud Shell.

  3. Закройте редактор, нажав клавиши CTRL+Q.

  4. Выполните следующую команду, чтобы отправить HTTP-запрос GET в локальную функцию.

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    Выходные данные Please supply principal, rate and term in the query stringуказывают на то, что наша функция была успешно вызвана и может возвращать ответ, но вы не вызываете ее должным образом. Необходимо указать параметры в рамках HTTP-запроса.

  5. Снова вызовите функцию. На этот раз укажите значение для каждого из параметров строки запроса.

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    На этот раз выходные данные имеют значение 6300. Ваша функция работает должным образом!

  6. Введите следующую команду, чтобы снова просмотреть журнал вывода.

    code ~/output.txt
    

    После записей журнала запуска вы увидите добавленный набор записей журнала с меткой времени при каждом вызове функции:curl

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. Закройте редактор, нажав клавиши CTRL+Q.