Создание первого контейнеризованного Функции Azure
В этой статье вы создадите приложение-функцию, работающее в контейнере Linux, и развернете его в Функции Azure.
При развертывании кода функции для Функции Azure в контейнере требуется план Premium или выделенный (Служба приложений) план размещения. Выполнение этой статьи приводит к затратам на несколько долларов США в вашей учетной записи Azure, которые можно свести к минимуму путем очистки ресурсов при завершении.
Другие варианты развертывания контейнера приложения-функции в Azure:
Приложения контейнеров Azure. Дополнительные сведения см. в статье "Развертывание контейнера в приложениях контейнеров Azure".
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
Создание вспомогательных ресурсов Azure для функции
Прежде чем развернуть контейнер в Azure, необходимо создать три ресурса:
- группу ресурсов — логический контейнер связанных ресурсов;
- учетную запись хранения, которая используется для сохранения состояния и других сведений о функциях;
- Приложение-функция, которое предоставляет окружение для выполнения кода вашей функции. Оно сопоставляется с локальным проектом функций и позволяет группировать функции в логические единицы, чтобы упростить развертывание, масштабирование и совместное использование ресурсов, а также управление ими.
Чтобы создать эти элементы, выполните следующие команды: Поддерживается Azure CLI и PowerShell. Чтобы создать ресурсы Azure с помощью Azure PowerShell, вам также потребуется модуль Az PowerShell версии 5.9.0 или более поздней.
Войдите в Azure, если вы еще этого не сделали.
az login
Команда
az login
входит в учетную запись Azure.Создайте группу ресурсов с именем
AzureFunctionsContainers-rg
в нужном регионе.az group create --name AzureFunctionsContainers-rg --location <REGION>
Команда
az group create
создает группу ресурсов. В приведенной выше команде замените<REGION>
на ближайший к вам регион. Укажите его код, полученный с помощью команды az account list-locations.В группе ресурсов и регионе создайте учетную запись хранения общего назначения.
az storage account create --name <STORAGE_NAME> --location <REGION> --resource-group AzureFunctionsContainers-rg --sku Standard_LRS
Команда
az storage account create
создает учетную запись хранения.В предыдущем примере замените
<STORAGE_NAME>
соответствующим именем, которое является уникальным в службе хранилища Azure. Имена хранилищ должны содержать от 3 до 24 символов и только в нижнем регистре.Standard_LRS
указывает учетную запись общего назначения, которая поддерживается Функциями.Используйте команду, чтобы создать план "Премиум" для Функций Azure с именем
myPremiumPlan
в ценовой категории эластичный Premium 1 (--sku EP1
) в<REGION>
и в контейнере Linux (--is-linux
).az functionapp plan create --resource-group AzureFunctionsContainers-rg --name myPremiumPlan --location <REGION> --number-of-workers 1 --sku EP1 --is-linux
Здесь мы используем план ценовой категории "Премиум", который можно масштабировать по мере необходимости. Дополнительные сведения о размещении см. в статье Варианты размещения Функций Azure. Дополнительные сведения о расчете затрат см. на странице цен на Функции.
Команда также создает связанный экземпляр приложение Azure Insights в той же группе ресурсов, с помощью которой можно отслеживать приложение-функцию и просматривать журналы. Дополнительные сведения см. в разделе Мониторинг функций Azure. Этот экземпляр не создает затраты, пока вы не активируете его.
Создание и настройка приложения-функции в Azure с помощью образа
Приложение-функция в Azure управляет выполнением функций в плане размещения Функции Azure. В этом разделе вы используете ресурсы Azure из предыдущего раздела, чтобы создать приложение-функцию из образа в реестре контейнеров и настроить его с помощью строка подключения для служба хранилища Azure.
Создайте приложение-функцию с помощью следующей команды в зависимости от реестра контейнеров:
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --resource-group AzureFunctionsContainers-rg --plan myPremiumPlan --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD>
В следующем примере замените
<STORAGE_NAME>
именем, использованным в предыдущем разделе для учетной записи хранения. Кроме того, замените<APP_NAME>
глобально уникальным именем, соответствующим вам, или<DOCKER_ID>
<LOGIN_SERVER>
идентификатором учетной записи Docker Hub или сервером реестра контейнеров соответственно. При развертывании из пользовательского реестра контейнеров имя образа указывает URL-адрес реестра.При первом создании приложения-функции оно извлекает исходный образ из Docker Hub. Вы также можете включить непрерывное развертывание в Azure из реестра контейнеров.
Совет
Можно использовать параметр
DisableColor
в файле host.json, чтобы предотвратить запись управляющих символов ANSI в журналы контейнера.Чтобы получить строку подключения для созданной учетной записи хранения, используйте следующую команду.
az storage account show-connection-string --resource-group AzureFunctionsContainers-rg --name <STORAGE_NAME> --query connectionString --output tsv
Возвращается строка подключения для учетной записи хранения с помощью
az storage account show-connection-string
команды.Замените
<STORAGE_NAME>
именем учетной записи хранения, созданной ранее.Чтобы добавить параметр в приложение-функцию, используйте следующую команду:
az functionapp config appsettings set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --settings AzureWebJobsStorage=<CONNECTION_STRING>
Команда
az functionapp config appsettings set
создает параметр.В этой команде замените
<APP_NAME>
на имя приложения-функции, а<CONNECTION_STRING>
на строку подключения из предыдущего шага. Соединение должно представлять собой длинную кодированную строку, начинающуюся сDefaultEndpointProtocol=
.Теперь функция может использовать эту строку подключения для доступа к учетной записи хранения.
Проверка функций в Azure
С помощью образа, развернутого в приложении-функции в Azure, теперь можно вызвать функцию через HTTP-запросы.
Выполните следующую
az functionapp function show
команду, чтобы получить URL-адрес новой функции:az functionapp function show --resource-group AzureFunctionsContainers-rg --name <APP_NAME> --function-name HttpExample --query invokeUrlTemplate
Замените
<APP_NAME>
на имя приложения-функции.
- Используйте URL-адрес, который вы только что получили для вызова конечной
HttpExample
точки функции, добавив строку?name=Functions
запроса.
- Используйте URL-адрес, который вы только что получили для вызова конечной
HttpExample
точки функции.
При переходе к этому URL-адресу в браузере должны отображаться выходные данные, аналогичные данным при локальном запуске функции.
Очистка ресурсов
Если вы хотите продолжить работу с функцией Azure с помощью ресурсов, созданных в этой статье, можно оставить все эти ресурсы. Поскольку для Функций Azure создан план цен. категории "Премиум", с вас будет взиматься плата в один два доллара США в день.
Чтобы избежать текущих затрат, удалите группу ресурсов AzureFunctionsContainers-rg
, чтобы очистить все ресурсы в этой группе:
az group delete --name AzureFunctionsContainers-rg