Создание первого контейнерного Функции Azure в Azure Arc (предварительная версия)

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

Примечание.

Поддержка развертывания пользовательского контейнера в кластере Kubernetes с поддержкой Azure Arc в настоящее время находится в предварительной версии.

Вы также можете опубликовать свои функции в кластере Kubernetes с поддержкой Azure Arc, не создавая контейнер. Дополнительные сведения см. в статье "Создание первой функции в Azure Arc (предварительная версия)

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

Во-первых, вы используете средства Функции 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
    

    Внимание

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

Создание среды Kubernetes для Службы приложений

Прежде чем начать, необходимо создать среду Kubernetes Службы приложений для кластера Kubernetes с поддержкой Azure Arc.

Примечание.

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

Если вы не создали среду, обратитесь к администратору кластера.

Добавление расширений Azure CLI

Откройте среду Bash в Azure Cloud Shell.

Так как эти команды интерфейса командной строки пока не входят в основной набор CLI, добавьте их с помощью следующих команд:

az extension add --upgrade --yes --name customlocation
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

Создание ресурсов Azure

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

  • Учетная запись хранения. В этой статье описано создание учетной записи хранения, но в некоторых случаях она не требуется. Подробнее см. раздел Кластеры с поддержкой Azure Arc в статье рекомендаций по хранению.
  • Приложение-функция, которое предоставляет контекст для запуска контейнера. Приложение-функция выполняется в среде Kubernetes Службы приложений и сопоставляется с вашим локальным проектом функции. Приложение-функция позволяет группировать функции в логические единицы и упростить развертывание и совместное использование ресурсов, а также управление ими.

Примечание.

Приложения-функции выполняются в среде Kubernetes Службы приложений с планом "Выделенный" (Служба приложений). При создании приложения-функции без существующего плана план создается.

Создание учетной записи хранения

Воспользуйтесь командой az storage account create, чтобы создать учетную запись хранения общего назначения в группе ресурсов и регионе.

az storage account create --name <STORAGE_NAME> --location westeurope --resource-group myResourceGroup --sku Standard_LRS

Примечание.

В некоторых случаях учетная запись хранения не требуется. Подробнее см. раздел Кластеры с поддержкой Azure Arc в статье рекомендаций по хранению.

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

Создание приложения-функции

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

az functionapp create --name <APP_NAME> --custom-location <CUSTOM_LOCATION_ID> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> 

В этом примере замените <CUSTOM_LOCATION_ID> идентификатором пользовательского расположения, которое было определено для среды Kubernetes службы приложений. Кроме того, замените <STORAGE_NAME> имя учетной записи, используемой на предыдущем шаге, <APP_NAME> глобально уникальным именем и <DOCKER_ID><LOGIN_SERVER> идентификатором учетной записи Docker Hub или сервером реестра контейнеров соответственно. При развертывании из пользовательского реестра контейнеров имя образа указывает URL-адрес реестра.

При первом создании приложения-функции оно извлекает исходный образ из Docker Hub.

Настройка обязательных параметров приложения

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

storageConnectionString=$(az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv)
az functionapp config appsettings set --name <app_name> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=$storageConnectionString

Этот код необходимо запускать либо в Cloud Shell, либо в Bash на локальном компьютере. Замените <STORAGE_NAME> именем учетной записи хранения и <APP_NAME> именем приложения функции.

Вызов функции в Azure

Функция использует триггер HTTP, поэтому ее необходимо вызывать через HTTP-запрос по URL-адресу в браузере или с помощью такого средства, как curl.

Скопируйте полный URL-адрес вызова Invoke URL, показанный в выходных данных команды publish, в адресную строку браузера, добавив параметр запроса ?name=Functions. В браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.

The output of the function run on Azure in a browser

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

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

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

az group delete --name AzureFunctionsContainers-rg

Это удаляет только ресурсы, созданные в этой статье. Базовая среда Azure Arc остается на месте.

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