Функции Azure обеспечивают интегрированную поддержку для разработки, развертывания и управления контейнерными приложениями-функциями в приложениях-контейнерах Azure. Это упрощает запуск Функций Azure и управление ими с помощью интегрированного портала управления Azure по сравнению с независимым запуском Функций Azure в контейнерных средах, таких как Служба Azure Kubernetes (AKS). Кроме того, используя функции, предоставляемые контейнерными приложениями Azure, вы можете легко использовать такие функции, как KEDA, Dapr, Envoy, масштабирование, мониторинг, безопасность и контроль доступа для ваших функций Azure.
[Ссылка]
Размещение функций Azure в контейнерных приложениях Azure
Создайте свои первые контейнерные функции в приложениях-контейнерах Azure
Ниже приведены переменные среды, связанные с созданием ресурсов приложений-контейнеров Azure. Здесь вы указываете различные имена и места установки ресурсов, которые вы создадите, а также имя и тег образа контейнера.
# Azure Container Apps resource names export LOCATION=eastus export RESOURCE_GROUP_NAME=yoshio-rg export CONTAINER_REGISTRY_NAME=cajava2411 export CONTAINER_ENVIRONMENT=YoshioContainerEnvironment export STORAGE_NAME=yoshiojavastorage export AZURE_FUNCTION_NAME=yoshiojavafunc # Container image name and tag export C_IMAGE_NAME=tyoshio2002/java-function-on-aca export C_IMAGE_TAG=1.0
Сначала создайте проект Maven для функций Azure для Java. Этот проект Maven предназначен для создания функций Azure с использованием Java 21. Используйте команду mvnarchetype:generate, чтобы создать проект, изменяя параметры по мере необходимости.
mvn archetype:generate \ -DinteractiveMode=false \ -DarchetypeGroupId=com.microsoft.azure \ -DarchetypeArtifactId=azure-functions-archetype \ -DgroupId=com.yoshio3 \ -Dpackage=com.yoshio3 \ -DartifactId=yoshiojavafunc \ -DappName=Java-Azure-Functions \ -DappRegion=$LOCATION \ -DjavaVersion=21 \ -Dversion=1.0-SNAPSHOT \ -Ddocker
Выполнение приведенной выше команды автоматически создаст структуру каталогов, а Function.java будет содержать пример кода для функции Azure с триггером HTTP. Также будет создан файл Dockerfile, содержащий конфигурацию для запуска функций Azure в среде контейнера Docker.
├── Dockerfile ├── host.json ├── local.settings.json ├── pom.xml └── src ├── main │ └── java │ └── com │ └── yoshio3 │ └── Function.java └── test └── java └── com └── yoshio3 ├── FunctionTest.java └── HttpResponseMessageMock.java
Создайте проект Maven и запустите функции Azure локально. Выполните следующие команды, чтобы запустить Функции Azure с помощью триггера HTTP.
mvn clean package mvn azure-functions:run
После запуска функций Azure откройте другой терминал и выполните следующую команду, чтобы отправить запрос триггеру HTTP. Вы должны получить ответ «Hello, World».
curl "http://localhost:7071/api/HttpExample?name=World" # Output: Hello, World
Используйте автоматически созданный файл Dockerfile для создания образа контейнера «Функции Azure». Выполните следующую команду, чтобы создать образ.
docker build -t $C_IMAGE_NAME:$C_IMAGE_TAG -f ./Dockerfile .
После завершения сборки выполните следующую команду, чтобы проверить, создан ли образ.
docker images | grep $C_IMAGE_NAME # Output: tyoshio2002/java-function-on-aca 1.0 bcf471e6f774 9 hours ago 1.46GB
После создания образа выполните следующую команду, чтобы протестировать образ контейнера Функций Azure локально. Контейнер функций Azure внутренне использует HTTP-порт 80, поэтому вы сопоставите его с портом 8080 для локального доступа. После запуска контейнера выполните команду Curl, чтобы отправить запрос HTTP-триггеру Функций Azure. Если все работает правильно, вы должны получить сообщение «Hello, World».
docker run -p 8080:80 -it $C_IMAGE_NAME:$C_IMAGE_TAG curl "http://localhost:8080/api/HttpExample?name=World" # Output: Hello, World
Сначала войдите в Azure с помощью Azure CLI. Для входа выполните следующую команду.
az login
Создайте группу ресурсов в Azure. Эта группа ресурсов будет использоваться для группировки ресурсов, связанных с реестром контейнеров Azure и приложениями-контейнерами Azure.
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Создайте реестр контейнеров Azure и войдите в систему. Реестр контейнеров Azure — это частный реестр контейнеров для отправки образов контейнеров.
az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic az acr login --name $CONTAINER_REGISTRY_NAME
Получите имя сервера созданного реестра контейнеров Azure. Имя сервера будет иметь формат $CONTAINER_REGISTRY_NAME.azurecr.io.
CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)
Чтобы отправить локально созданный образ контейнера в реестр контейнеров Azure, пометьте его с помощью команды tag. После пометки используйте команду push, чтобы отправить изображение.
docker tag $C_IMAGE_NAME:$C_IMAGE_TAG $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG docker push $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG
Чтобы создавать приложения-контейнеры Azure и управлять ими из Azure CLI, зарегистрируйте необходимые расширения и поставщиков ресурсов.
az upgrade 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
Создайте среду для приложений-контейнеров Azure. Эта команда устанавливает конфигурацию, необходимую для размещения приложений-контейнеров Azure.
az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION
Функции Azure требуют учетную запись хранения при создании экземпляра приложения-функции. Поэтому создайте учетную запись хранения общего назначения для Функций Azure.
az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS
Создайте экземпляр функции Java Azure в приложениях-контейнерах Azure. Выполните следующую команду, чтобы создать экземпляр. Поскольку функция Azure создается с использованием Java 21, укажите --runtime java.
az functionapp create --name $AZURE_FUNCTION_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --environment $CONTAINER_ENVIRONMENT \ --storage-account $STORAGE_NAME \ --workload-profile-name "Consumption" \ --max-replicas 15 \ --min-replicas 1 \ --functions-version 4 \ --runtime java \ --image $CONTAINER_REGISTRY_SERVER/$C_IMAGE_NAME:$C_IMAGE_TAG \ --assign-identity
Наконец, настройте безопасный доступ для функций Azure к реестру контейнеров Azure. Включите управляемое системой удостоверение для Функций Azure и назначьте роль ACRPull для доступа.
FUNCTION_APP_ID=$(az functionapp identity assign --name $AZURE_FUNCTION_NAME --resource-group $RESOURCE_GROUP_NAME --query principalId --output tsv) ACR_ID=$(az acr show --name $CONTAINER_REGISTRY_NAME --query id --output tsv) az role assignment create --assignee $FUNCTION_APP_ID --role AcrPull --scope $ACR_ID
Наконец, получите URL-адрес триггерной функции HTTP развернутой функции Azure. Используйте команду az functionapp function show, чтобы получить подробную информацию о функции Azure.
az functionapp function show --resource-group $RESOURCE_GROUP_NAME --name $AZURE_FUNCTION_NAME --function-name HttpExample --query invokeUrlTemplate # Output: "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample"
Затем вы можете отправить запрос на полученный URL-адрес с помощью команды Curl, чтобы убедиться, что функции Azure работают правильно.
curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World" # Expected Output: Hello, World
Если все настроено правильно, вы должны получить ответ «Hello, World», подтверждающий, что ваша функция Azure работает должным образом.
Из этого руководства вы узнали, как:
Следуя этим шагам, вы сможете успешно развернуть функцию Java Azure в приложениях-контейнерах Azure, используя преимущества контейнеризации и возможности интегрированного управления Azure. Если у вас есть дополнительные вопросы или вам нужна помощь с конкретными действиями, не стесняйтесь спрашивать!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3