Создание первых контейнерных функций в приложениях контейнеров Azure
Статья
В этой статье вы создадите приложение-функцию, работающее в контейнере Linux, и развернете его в среде приложений контейнеров Azure из реестра контейнеров. Развернув приложения-контейнеры, вы можете интегрировать приложения-функции в облачные микрослужбы. Дополнительные сведения см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.
В этой статье показано, как создавать функции, выполняемые в контейнере Linux, и развертывать контейнер в среде приложений контейнеров.
Завершение работы с этим кратким руководством приводит к небольшой стоимости нескольких центов USD или меньше в вашей учетной записи Azure, которую можно свести к минимуму, выполнив очистку ресурсов после завершения работы.
Выберите язык разработки
Во-первых, вы используете средства Функции Azure для создания кода проекта в качестве приложения-функции в контейнере Docker с помощью базового образа Linux для конкретного языка. Выберите язык в верхней части статьи.
Core Tools автоматически создает Файл Dockerfile для проекта, который использует самую актуальную версию правильного базового образа для языка функций. Следует регулярно обновлять контейнер из последнего базового образа и повторно развертывать его из обновленной версии контейнера. Дополнительные сведения см. в разделе "Создание контейнерных приложений-функций".
Необходимые компоненты
Перед началом работы с этой статьей необходимо подготовить следующее:
Чтобы опубликовать образ приложения-функции, создаваемого в реестре контейнеров, вам потребуется идентификатор Docker и Docker , запущенный на локальном компьютере. Если у вас нет идентификатора Docker, можно создать учетную запись Docker.
Чтобы создать экземпляр реестра контейнеров, необходимо также выполнить инструкции по созданию экземпляра реестра контейнеров. Запишите полное имя сервера входа.
Все должно быть настроено.
Создание и активация виртуальной среды
В подходящей папке выполните следующие команды, чтобы создать и активировать виртуальную среду с именем .venv. Обязательно используйте одну из версий Python, поддерживаемых Функции Azure.
Параметр -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, замените <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 и применять подключения на основе управляемых удостоверений. Центр Docker требует проверки подлинности с помощью общих секретов, что делает развертывание более уязвимыми.
Реестр контейнеров Azure — это служба частного реестра для создания, хранения и обслуживания образов контейнеров и связанных с ними артефактов. Для публикации контейнеров в службах Azure следует использовать службу частного реестра.
Используйте эту команду для входа в экземпляр реестра с помощью текущих учетных данных Azure:
Azure CLI
az acr login --name<REGISTRY_NAME>
В предыдущей команде замените <REGISTRY_NAME> имя экземпляра реестра контейнеров.
Используйте эту команду, чтобы пометить образ с полным именем сервера входа в реестр:
docker
docker tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 <LOGIN_SERVER>/azurefunctionsimage:v1.0.0
Замените <LOGIN_SERVER> полное имя сервера входа реестра и <DOCKER_ID> идентификатором Docker.
Используйте эту команду, чтобы отправить контейнер в экземпляр реестра:
Docker Hub — это реестр контейнеров, который содержит образы и предоставляет службы контейнеров и образов.
Если вы еще не вошли в Docker, сделайте это с docker login помощью команды, заменив <docker_id> идентификатор учетной записи Docker Hub. Эта команда запрашивает имя и пароль для входа. Сообщение "Вход в успешно выполнено" подтверждает, что вы вошли в систему.
Консоль
docker login
После входа отправьте образ в Docker Hub с помощью docker push команды, снова замените <docker_id> идентификатор учетной записи Docker Hub.
учетную запись хранения, которая используется для сохранения состояния и других сведений о функциях;
Среда "Приложения контейнеров Azure" с рабочей областью Log Analytics.
Управляемое удостоверение, назначаемое пользователем, которое позволяет приложению-функции безопасно подключаться к ресурсам Azure без использования общих секретов. Подключения как к учетной записи служба хранилища Azure, так и к экземпляру Реестр контейнеров Azure вместо этого используют проверку подлинности Microsoft Entra с удостоверением, который рекомендуется использовать для этого сценария.
Примечание
Docker Hub не поддерживает управляемые удостоверения.
Используйте следующие команды для создания необходимых ресурсов Azure:
При необходимости войдите в Azure:
Команда az login входит в учетную запись Azure. Используется az account set при наличии нескольких подписок, связанных с вашей учетной записью.
Выполните следующую команду, чтобы обновить Azure CLI до последней версии:
Azure CLI
az upgrade
Если ваша версия Azure CLI не является последней версией, начинается установка. Способ обновления зависит от операционной системы. После завершения обновления можно продолжить.
Выполните следующие команды, которые обновляют расширение "Приложения контейнеров Azure" и регистрируют пространства имен, необходимые для приложений контейнеров:
Azure CLI
az extension add --name containerapp --upgrade-yaz provider register --namespace Microsoft.Web
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Создайте группу ресурсов с именем AzureFunctionsContainers-rg.
Azure CLI
az group create --name AzureFunctionsContainers-rg--location eastus
Эта az group create команда создает группу ресурсов в регионе "Восточная часть США". Если вы хотите использовать регион рядом с вами, используя доступный код региона, возвращенный командой az account list-locations . Для использования настраиваемого eastusрегиона необходимо изменить последующие команды.
Создайте среду приложения контейнера Azure с включенными профилями рабочей нагрузки.
Azure CLI
az containerapp env create --name MyContainerappEnvironment --enable-workload-profiles--resource-group AzureFunctionsContainers-rg--location eastus
Выполнение команды может занять несколько минут.
Создайте учетную запись хранения общего назначения в группе ресурсов и регионе без доступа к общему ключу.
Azure CLI
az storage account create --name<STORAGE_NAME>--location eastus --resource-group AzureFunctionsContainers-rg--sku Standard_LRS --allow-blob-public-accessfalse--allow-shared-key-accessfalse
Команда az storage account create создает учетную запись хранения, доступ к которой можно получить только с помощью удостоверений, прошедших проверку подлинности Microsoft Entra, которые были предоставлены разрешения для определенных ресурсов.
В предыдущем примере замените <STORAGE_NAME> соответствующим именем, которое является уникальным в службе хранилища Azure. Имена хранилищ должны содержать от 3 до 24 символов и только в нижнем регистре.
Standard_LRS указывает учетную запись общего назначения, которая поддерживается Функциями.
Создайте управляемое удостоверение и используйте возвращенное principalId для предоставления ему доступа к учетной записи хранения и разрешениям на извлечение в экземпляре реестра.
Azure CLI
principalId=$(az identity create --name<USER_IDENTITY_NAME>--resource-group AzureFunctionsContainers-rg--location eastus --query principalId -o tsv)
acrId=$(az acr show --name<REGISTRY_NAME>--query id --output tsv)
az role assignment create --assignee-object-id$principalId--assignee-principal-type ServicePrincipal --role acrpull --scope$acrIdstorageId=$(az storage account show --resource-group AzureFunctionsContainers-rg--name glengatestaca2 --query'id'-o tsv)
az role assignment create --assignee-object-id$principalId--assignee-principal-type ServicePrincipal --role"Storage Blob Data Owner"--scope$storageId
Команда az identity create создает управляемое удостоверение, назначаемое пользователем, и az role assignment create команды добавляют удостоверение в необходимые роли. Замените и <USER_IDENTITY_NAME><STORAGE_NAME> назовите <REGISTRY_NAME>существующий реестр контейнеров, имя управляемого удостоверения и имя учетной записи хранения соответственно. Теперь управляемое удостоверение можно использовать приложением для доступа к учетной записи хранения и Реестр контейнеров Azure без использования общих секретов.
Создание и настройка приложения-функции в Azure с помощью образа
Приложение-функция в Azure управляет выполнением функций в среде azure Container Apps. В этом разделе вы используете ресурсы Azure из предыдущего раздела, чтобы создать приложение-функцию из образа в реестре контейнеров в среде контейнеров. Вы также настраиваете новую среду с помощью строка подключения необходимой учетной записи служба хранилища Azure.
az functionapp create Используйте команду для создания приложения-функции в новой управляемой среде, поддерживаемой приложениями контейнеров Azure. В az functionapp createпараметре --environment указывается среда "Приложения контейнеров".
Чтобы убедиться, что ваше приложение-функция использует управляемое подключение на основе удостоверений к экземпляру --image реестра, не устанавливайте параметр в az functionapp create. При установке --image полного имени образа в репозитории общие секретные учетные данные получаются из реестра и хранятся в параметрах приложения.
Сначала необходимо получить полное значение идентификатора управляемого удостоверения, назначаемого пользователем, с доступ на вытягивание в реестр, а затем использовать az functionapp create команду для создания приложения-функции с помощью образа по умолчанию и с этим удостоверением, назначенным ему.
Azure CLI
UAMI_RESOURCE_ID=$(az identity show --name$uami_name--resource-group$group--query id -o tsv)
az functionapp create --name<APP_NAME>--storage-account<STORAGE_NAME>--environment MyContainerappEnvironment --workload-profile-name"Consumption"--resource-group AzureFunctionsContainers-rg--functions-version4--assign-identity$UAMI_RESOURCE_ID
В az functionapp createэтом --assign-identity случае управляемое удостоверение назначается новому приложению. Так как параметр не задан --image , az functionapp createприложение создается с помощью образа заполнителя.
В этом примере замените и <STORAGE_NAME><USER_IDENTITY_NAME> назовите <APP_NAME>новое приложение-функцию, а также имя учетной записи хранения и удостоверение.
Наконец, необходимо обновить linuxFxVersion параметр сайта до полного имени образа в репозитории. Необходимо также обновить acrUseManagedIdentityCreds параметры сайта, acrUserManagedIdentityID чтобы управляемые удостоверения использовались при получении образа из реестра.
Azure CLI
UAMI_RESOURCE_ID=$(az identity show --name<USER_IDENTITY_NAME>--resource-group AzureFunctionsContainers-rg--query id -o tsv)
az resource patch --resource-group AzureFunctionsContainers-rg--name<APP_NAME>--resource-type"Microsoft.Web/sites"--properties"{ \"siteConfig\": { \"linuxFxVersion\": \"DOCKER|<REGISTRY_NAME>.azurecr.io/azurefunctionsimage:v1.0.0\", \"acrUseManagedIdentityCreds\": true, \"acrUserManagedIdentityID\":\"$UAMI_RESOURCE_ID\", \"appSettings\": [{\"name\": \"DOCKER_REGISTRY_SERVER_URL\", \"value\": \"<REGISTRY_NAME>.azurecr.io\"}]}}"
В этом примере замените <APP_NAME>, <REGISTRY_NAME>а также <USER_IDENTITY_NAME> именами приложения-функции, реестра контейнеров и удостоверений соответственно.
Сначала необходимо получить полное значение идентификатора управляемого удостоверения, назначаемого пользователем, а затем с помощью az functionapp create команды создать приложение-функцию с помощью образа по умолчанию и с этим удостоверением, назначенным ему.
Azure CLI
az functionapp create --name<APP_NAME>--storage-account<STORAGE_NAME>--environment MyContainerappEnvironment --workload-profile-name"Consumption"--resource-group AzureFunctionsContainers-rg--functions-version4--assign-identity--image<DOCKER_ID>/azurefunctionsimage:v1.0.0
В команде az functionapp create параметр указывает среду "Приложения контейнеров", --environment а --image параметр указывает образ, используемый для приложения-функции. В следующем примере замените <STORAGE_NAME> именем, использованным в предыдущем разделе для учетной записи хранения. Кроме того, замените <APP_NAME> глобально уникальным именем, соответствующим вам и <DOCKER_ID> общедоступным идентификатором учетной записи Docker Hub.
Если вы используете частный реестр, необходимо включить полное доменное имя реестра вместо идентификатора <DOCKER_ID>Docker, а также --registry-username--registry-password учетные данные, необходимые для доступа к реестру.
Указание --workload-profile-name "Consumption" создания приложения в среде с помощью профиля рабочей нагрузки по умолчанию Consumption , который стоит так же, как и в плане потребления контейнерных приложений. При первом создании приложения-функции он извлекает исходный образ из реестра.
Обновление параметров приложения
Чтобы узел Функций мог подключаться к учетной записи хранения по умолчанию с помощью общих секретов, необходимо заменить AzureWebJobsStorage параметр строка подключения эквивалентным параметром, который использует управляемое удостоверение, назначаемое пользователем, для подключения к учетной записи хранения.
Добавьте эквивалентные параметры с AzureWebJobsStorage__ префиксом, который определяет подключение управляемого удостоверения, назначаемое пользователем, к учетной записи хранения по умолчанию:
Azure CLI
clientId=$(az identity show --name<USER_IDENTITY_NAME>--resource-group AzureFunctionsContainers-rg--query'clientId'-o tsv)
az functionapp config appsettings set --name<APP_NAME>--resource-group AzureFunctionsContainers-rg--settings AzureWebJobsStorage__accountName=<STORAGE_NAME> AzureWebJobsStorage__credential=managedidentity AzureWebJobsStorage__clientId=$clientId
В этом примере замените <APP_NAME><USER_IDENTITY_NAME><STORAGE_NAME> имя приложения-функции, имя удостоверения и имя учетной записи хранения соответственно.
На этом этапе функции выполняются в среде "Приложения контейнеров", при этом уже добавлены необходимые параметры приложения. При необходимости вы можете добавить другие параметры в приложение функций стандартным способом для функций. Дополнительные сведения см. в разделе "Использование параметров приложения".
Совет
При внесении последующих изменений в код функции необходимо перестроить контейнер, повторно опубликовать образ в реестре и обновить приложение-функцию с новой версией образа. Дополнительные сведения см. в разделе "Обновление образа в реестре"
Проверка функций в Azure
С помощью образа, развернутого в приложении-функции в Azure, теперь можно вызвать функцию через HTTP-запросы.
Если вы хотите продолжить работу с функцией Azure с помощью ресурсов, созданных в этой статье, можно оставить все эти ресурсы.
После завершения работы с развертыванием приложения-функции удалите AzureFunctionsContainers-rg группу ресурсов, чтобы очистить все ресурсы в этой группе:
Azure CLI
az group delete --name AzureFunctionsContainers-rg
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Создавайте комплексные решения в Microsoft Azure для создания Функции Azure, реализации веб-приложений и управления ими, разработке решений, использующих службу хранилища Azure, и т. д.
Узнайте, как выполнять функции Azure в Kubernetes в облаке или локальной среде с помощью KEDA — управляемого событиями автоматического масштабирования на основе Kubernetes.