Создание первого контейнерного Функции 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 для проекта, который использует самую актуальную версию правильного базового образа для языка функций. Следует регулярно обновлять контейнер из последнего базового образа и повторно развертывать его из обновленной версии контейнера. Дополнительные сведения см. в разделе "Создание контейнерных приложений-функций".
Необходимые компоненты
Перед началом работы с этой статьей необходимо подготовить следующее:
Установите пакет SDK для .NET 8.0.
Установите Функции Azure Core Tools версии 4.0.5198 или более поздней версии.
- Установите Функции Azure Core Tools версии 4.x.
- Установите версию Node.js, поддерживаемую Функции Azure.
- Установите версию Python, поддерживаемую Функции Azure.
- Установите пакет SDK для .NET 6.
Установите версию пакета разработчиков Java, который поддерживается Функции Azure.
Установите Apache Maven версии 3.0 или более поздней.
- 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"
Добавьте функцию в проект с помощью следующей команды, где аргумент --name
— это уникальное имя функции, а аргумент --template
указывает триггер функции. Командаfunc new
создает вложенную папку с именем функции. Эта папка содержит файл конфигурации с именем function.json.
func new --name HttpExample --template "HTTP trigger"
Чтобы протестировать функцию локально, запустите локальный узел среды выполнения Функций 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 следует использовать службу частного реестра.
Используйте эту команду для входа в экземпляр реестра с помощью текущих учетных данных Azure:
az acr login --name <REGISTRY_NAME>
В предыдущей команде замените
<REGISTRY_NAME>
имя экземпляра реестра контейнеров.Используйте эту команду, чтобы пометить образ с полным именем сервера входа в реестр:
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Замените
<LOGIN_SERVER>
полное имя сервера входа реестра и<DOCKER_ID>
идентификатором Docker.Используйте эту команду, чтобы отправить контейнер в экземпляр реестра:
docker push <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Создание среды 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
. В браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.
Очистка ресурсов
Если вы хотите продолжить работу с функцией Azure с помощью ресурсов, созданных в этой статье, можно оставить все эти ресурсы.
После завершения работы с развертыванием приложения-функции удалите AzureFunctionsContainers-rg
группу ресурсов, чтобы очистить все ресурсы в этой группе:
az group delete --name AzureFunctionsContainers-rg
Это удаляет только ресурсы, созданные в этой статье. Базовая среда Azure Arc остается на месте.