Создание первых контейнерных функций в приложениях контейнеров Azure

В этой статье вы создадите приложение-функцию, работающее в контейнере Linux, и развернете его в среде приложений контейнеров Azure из реестра контейнеров. Развернув приложения-контейнеры, вы можете интегрировать приложения-функции в облачные микрослужбы. Дополнительные сведения см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.

В этой статье показано, как создавать функции, выполняемые в контейнере Linux, и развертывать контейнер в среде приложений контейнеров.

Завершение работы с этим кратким руководством приводит к небольшой стоимости нескольких центов USD или меньше в вашей учетной записи Azure, которую можно свести к минимуму, выполнив очистку ресурсов после завершения работы.

Внимание

Поддержка размещения приложений-функций в приложениях контейнеров Azure в настоящее время доступна в предварительной версии.

Выберите язык разработки

Во-первых, вы используете средства Функции Azure для создания кода проекта в качестве приложения-функции в контейнере Docker с помощью базового образа Linux для конкретного языка. Выберите язык в верхней части статьи.

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

Необходимые компоненты

Перед началом работы с этой статьей необходимо подготовить следующее:

  • Azure CLI версии 2.4 или более поздней версии.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Чтобы опубликовать образ приложения-функции, создаваемого в реестре контейнеров, вам потребуется идентификатор Docker и Docker , запущенный на локальном компьютере. Если у вас нет идентификатора Docker, можно создать учетную запись Docker.

Чтобы создать экземпляр реестра контейнеров, необходимо также выполнить инструкции по созданию экземпляра реестра контейнеров. Запишите полное имя сервера входа.

Создание и активация виртуальной среды

В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv. Обязательно используйте одну из версий Python, поддерживаемых Функции Azure.

python -m venv .venv
source .venv/bin/activate

Если пакет venv не установлен Python для вашего дистрибутива Linux, выполните следующую команду:

sudo apt-get install python3-venv

Все последующие команды будут выполняться в этой активированной виртуальной среде.

Создание и тестирование локального проекта службы "Функции"

Чтобы создать проект приложения-функции в текущей папке, в терминале или в командной строке выполните следующую команду для текущей папки:

func init --worker-runtime dotnet-isolated --docker
func init --worker-runtime node --language javascript --docker
func init --worker-runtime powershell --docker
func init --worker-runtime python --docker
func init --worker-runtime node --language typescript --docker

В пустой папке выполните следующую команду, чтобы создать проект Функций из архетипа Maven:

mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8 -Ddocker

Параметр -DjavaVersion указывает среде выполнения Функций Azure, какую версию Java следует использовать. Используйте -DjavaVersion=11, чтобы функции выполнялись на Java 11. Если не указать параметр -DjavaVersion, Maven будет по умолчанию использовать Java 8. Дополнительные сведения см. в разделе Версии Java.

Внимание

Чтобы выполнить задания из этой статьи, переменной среды JAVA_HOME необходимо присвоить расположение установки правильной версии JDK.

Maven запрашивает значения, которые позволят завершить создание проекта развертывания. Следуйте инструкциям и укажите следующее:

Prompt значение Описание
groupId com.fabrikam Это значение уникально идентифицирует проект среди всех остальных. Оно должно соответствовать правилам именования пакетов для Java.
artifactId fabrikam-functions Это значение содержит имя JAR-файла, без номера версии.
version 1.0-SNAPSHOT Выберите значение по умолчанию.
package com.fabrikam.functions Это значение определяет пакет Java для создаваемого кода функции. Используйте значение по умолчанию.

Введите Y или нажмите клавишу ВВОД для подтверждения.

Maven создаст файлы проекта в новой папке с именем artifactId, то есть fabrikam-functions в нашем примере.

Параметр --docker создает Файл Dockerfile для проекта, который определяет подходящий контейнер для использования с Функции Azure и выбранной средой выполнения.

Перейдите в папку проекта:

cd fabrikam-functions

Добавьте функцию в проект с помощью следующей команды, где аргумент --name — это уникальное имя функции, а аргумент --template указывает триггер функции. func new создает файл кода C# в проекте.

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

Добавьте функцию в проект с помощью следующей команды, где аргумент --name — это уникальное имя функции, а аргумент --template указывает триггер функции. Командаfunc new создает вложенную папку с именем функции. Эта папка содержит файл конфигурации с именем function.json.

func new --name HttpExample --template "HTTP trigger" --authlevel anonymous

Чтобы протестировать функцию локально, запустите локальный узел среды выполнения Функций Azure в корневой папке проекта.

func start  
func start  
npm install
npm start
mvn clean package  
mvn azure-functions:run

После отображения конечной точки, записанной HttpExample в выходные данные, перейдите к этой конечной точке. В выходных данных ответа должно появиться приветственное сообщение.

После просмотра конечной точки, записанной HttpExample в выходные данные, перейдите в раздел http://localhost:7071/api/HttpExample?name=Functions. Браузер должен отобразить приветственное сообщение, которое возвращает Functions, передаваемое параметру запроса name значение.

Нажмите клавиши CTRL+C (Command+C в macOS), чтобы остановить узел.

Создание образа контейнера и проверка локально

(Необязательно.) Изучите файл Dockerfile в корневой папке проекта. В Dockerfile описана среда, необходимая для запуска приложения-функции на платформе Linux. Полный список поддерживаемых базовых образов для Функций Azure можно найти на странице базового образа Функций Azure.

В корневой папке проекта выполните команду docker build, указав имя azurefunctionsimage и тег v1.0.0. Замените <DOCKER_ID> идентификатором вашей учетной записи Docker Hub. Эта команда отвечает за создание образа Docker для контейнера.

docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .

После выполнения команды можно запустить новый контейнер локально.

Чтобы проверить сборку, запустите образ в локальном контейнере с помощью команды запуска Docker, замените <DOCKER_ID> еще раз идентификатором учетной записи Docker Hub и добавьте аргумент портов следующим образом -p 8080:80:

docker run -p 8080:80 -it <DOCKER_ID>/azurefunctionsimage:v1.0.0

После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. Дополнительные сведения см. в разделе Ключи авторизации.

После того как образ будет запущен в локальном контейнере, перейдите по адресу http://localhost:8080/api/HttpExample?name=Functions, где должно появиться такое же приветственное сообщение, как описано выше. Так как созданная вами функция, активируемая HTTP, использует анонимную авторизацию, можно вызвать функцию, выполняемую в контейнере, без получения ключа доступа. Дополнительные сведения см. в разделе Ключи авторизации.

После проверки приложения-функции в контейнере нажмите клавиши CTRL+C (Command+C в macOS), чтобы остановить выполнение.

Публикация образа контейнера в реестре

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

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

  1. Используйте следующую команду, чтобы войти в экземпляр реестра:

    az acr login --name <REGISTRY_NAME>
    

    В предыдущей команде замените <REGISTRY_NAME> имя экземпляра реестра контейнеров.

  2. Используйте следующую команду, чтобы пометить образ с полным именем сервера входа в реестр:

    docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 
    

    Замените <LOGIN_SERVER> полное имя сервера входа реестра и <DOCKER_ID> идентификатором Docker.

  3. Используйте следующую команду, чтобы отправить контейнер в экземпляр реестра:

    docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
    
  4. Используйте следующую команду, чтобы включить встроенную учетную запись администратора, чтобы Функции могли подключаться к реестру с именем пользователя и паролем:

    az acr update -n <REGISTRY_NAME> --admin-enabled true
    
  1. Используйте следующую команду, чтобы получить имя администратора и пароль, которые функции должны подключиться к реестру:

    az acr credential show -n <REGISTRY_NAME> --query "[username, passwords[0].value]" -o tsv
    

    Внимание

    Имя пользователя и пароль учетной записи администратора являются важными учетными данными. Не забудьте безопасно хранить их и никогда не в доступном расположении, например общедоступный репозиторий.

Создание вспомогательных ресурсов Azure для функции

Прежде чем развернуть контейнер в Azure, необходимо создать три ресурса:

  • группу ресурсов — логический контейнер связанных ресурсов;
  • учетную запись хранения, которая используется для сохранения состояния и других сведений о функциях;
  • Среда "Приложения контейнеров Azure" с рабочей областью Log Analytics.

Чтобы создать эти элементы, выполните следующие команды:

  1. Войдите в Azure, если вы еще этого не сделали.

    Команда az login входит в учетную запись Azure. Используется az account set при наличии нескольких подписок, связанных с вашей учетной записью.

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

    az upgrade
    

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

  3. Выполните следующие команды, которые обновляют расширение "Приложения контейнеров Azure" и регистрируют пространства имен, необходимые для приложений контейнеров:

    az extension add --name containerapp --upgrade -y
    az provider register --namespace Microsoft.Web 
    az provider register --namespace Microsoft.App 
    az provider register --namespace Microsoft.OperationalInsights 
    
  4. Создайте группу ресурсов с именем AzureFunctionsContainers-rg.

    az group create --name AzureFunctionsContainers-rg --location eastus
    

    Эта az group create команда создает группу ресурсов в регионе "Восточная часть США". Если вы хотите использовать регион рядом с вами, используя доступный код региона, возвращенный командой az account list-locations . Для использования настраиваемого eastusрегиона необходимо изменить последующие команды. В настоящее время в предварительной версии можно использовать только регионы , поддерживаемые в предварительной версии.

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

    az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles --resource-group AzureFunctionsContainers-rg --location eastus
    

    Эта команда может занять до 10 минут.

  6. В группе ресурсов и регионе создайте учетную запись хранения общего назначения.

    az storage account create --name <STORAGE_NAME> --location eastus --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
    

    Команда az storage account create создает учетную запись хранения.

    В предыдущем примере замените <STORAGE_NAME> соответствующим именем, которое является уникальным в службе хранилища Azure. Имена хранилищ должны содержать от 3 до 24 символов и только в нижнем регистре. Standard_LRS указывает учетную запись общего назначения, которая поддерживается Функциями.

  7. Прежде чем продолжить, используйте эту команду, чтобы убедиться, что ваша среда готова.

    az containerapp env show -n MyContainerappEnvironment -g AzureFunctionsContainers-rg
    

Создание и настройка приложения-функции в Azure с помощью образа

Приложение-функция в Azure управляет выполнением функций в среде azure Container Apps. В этом разделе вы используете ресурсы Azure из предыдущего раздела, чтобы создать приложение-функцию из образа в реестре контейнеров в среде контейнеров. Вы также настраиваете новую среду с помощью строка подключения необходимой учетной записи служба хранилища Azure.

az functionapp create Используйте команду для создания приложения-функции в новой управляемой среде, поддерживаемой приложениями контейнеров Azure:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime dotnet-isolated --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime java --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime powershell --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime python --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --workload-profile-name "Consumption" --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD> 

В команде az functionapp create параметр указывает среду "Приложения контейнеров", --environment а --image параметр указывает образ, используемый для приложения-функции. В следующем примере замените <STORAGE_NAME> именем, использованным в предыдущем разделе для учетной записи хранения. Кроме того, замените <APP_NAME> глобально уникальным именем, соответствующим вам, <LOGIN_SERVER> на полный сервер реестра контейнеров, <REGISTRY_NAME> именем реестра для учетной записи и <ADMIN_PASSWORD> паролем учетной записи администратора.

Внимание

Имя пользователя и пароль учетной записи администратора являются важными учетными данными. Не забудьте безопасно хранить их и никогда не в доступном расположении, например общедоступный репозиторий.

Указание --workload-profile-name "Consumption" создания приложения в среде с помощью профиля рабочей нагрузки по умолчанию Consumption , который стоит так же, как и в плане потребления контейнерных приложений. При первом создании приложения-функции он извлекает исходный образ из реестра.

На этом этапе функции выполняются в среде "Приложения контейнеров", при этом уже добавлены необходимые параметры приложения. При необходимости вы можете добавить другие параметры в приложение функций стандартным способом для функций. Дополнительные сведения см. в разделе "Использование параметров приложения".

Совет

При внесении последующих изменений в код функции необходимо перестроить контейнер, повторно опубликовать образ в реестре и обновить приложение-функцию с новой версией образа. Дополнительные сведения см. в разделе "Обновление образа в реестре"

Проверка функций в Azure

С помощью образа, развернутого в приложении-функции в Azure, теперь можно вызвать функцию через HTTP-запросы.

  1. Выполните следующую az functionapp function show команду, чтобы получить URL-адрес новой функции:

    az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate 
    

    Замените <APP_NAME> на имя приложения-функции.

  1. Используйте URL-адрес, который вы только что получили для вызова конечной HttpExample точки функции, добавив строку ?name=Functionsзапроса.
  1. Используйте URL-адрес, который вы только что получили для вызова конечной HttpExample точки функции.

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

URL-адрес запроса должен выглядеть примерно так:

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample?name=functions

https://myacafunctionapp.kindtree-796af82b.eastus.azurecontainerapps.io/api/httpexample

Очистка ресурсов

Если вы хотите продолжить работу с функцией Azure с помощью ресурсов, созданных в этой статье, можно оставить все эти ресурсы.

После завершения работы с развертыванием приложения-функции удалите AzureFunctionsContainers-rg группу ресурсов, чтобы очистить все ресурсы в этой группе:

az group delete --name AzureFunctionsContainers-rg

Следующие шаги