«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Развертывание функции Java Azure в приложениях-контейнерах Azure

Развертывание функции Java Azure в приложениях-контейнерах Azure

Опубликовано 1 ноября 2024 г.
Просматривать:733

Deploying a Java Azure Function on Azure Container Apps

Функции 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

Создание и тестирование проекта функции Java Azure

1. Создайте проект Azure Functions для Java Maven.

Сначала создайте проект 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

2. Запустите функцию Azure локально.

Создайте проект 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

Создание и тестирование образа контейнера функций Azure

1. Создайте и протестируйте образ Docker.

Используйте автоматически созданный файл 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

1. Войдите в Azure CLI.

Сначала войдите в Azure с помощью Azure CLI. Для входа выполните следующую команду.

az login

2. Создайте группу ресурсов.

Создайте группу ресурсов в Azure. Эта группа ресурсов будет использоваться для группировки ресурсов, связанных с реестром контейнеров Azure и приложениями-контейнерами Azure.

az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

3. Создайте реестр контейнеров Azure и войдите в него.

Создайте реестр контейнеров Azure и войдите в систему. Реестр контейнеров Azure — это частный реестр контейнеров для отправки образов контейнеров.

az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic
az acr login --name $CONTAINER_REGISTRY_NAME

4. Получите имя сервера реестра контейнеров Azure.

Получите имя сервера созданного реестра контейнеров Azure. Имя сервера будет иметь формат $CONTAINER_REGISTRY_NAME.azurecr.io.

CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)

5. Отправьте образ в реестр контейнеров Azure.

Чтобы отправить локально созданный образ контейнера в реестр контейнеров 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 и развертывание функции Java Azure

1. Зарегистрируйте расширения и поставщиков ресурсов в Azure CLI.

Чтобы создавать приложения-контейнеры 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

2. Создайте среду контейнерных приложений Azure.

Создайте среду для приложений-контейнеров Azure. Эта команда устанавливает конфигурацию, необходимую для размещения приложений-контейнеров Azure.

az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION

3. Создайте учетную запись хранения для функций Azure.

Функции Azure требуют учетную запись хранения при создании экземпляра приложения-функции. Поэтому создайте учетную запись хранения общего назначения для Функций Azure.

az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS

4. Создайте экземпляр функции Java Azure в приложениях-контейнерах Azure.

Создайте экземпляр функции 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

5. Назначьте роль функции Azure для доступа к реестру контейнеров Azure.

Наконец, настройте безопасный доступ для функций 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

6. Получите URL-адрес функции Azure.

Наконец, получите 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 работает должным образом.

Краткое содержание

Из этого руководства вы узнали, как:

  1. Настройте переменные среды для ваших ресурсов Azure.
  2. Создайте проект функции Java Azure с помощью Maven.
  3. Запустите функцию Azure локально для тестирования.
  4. Создайте образ Docker для функции Azure.
  5. Отправьте образ Docker в реестр контейнеров Azure.
  6. Создайте среду приложений-контейнеров Azure и разверните функцию Java Azure.
  7. Назначьте необходимые роли для безопасного доступа к реестру контейнеров Azure.
  8. Получите и протестируйте URL-адрес развернутой функции Azure.

Следуя этим шагам, вы сможете успешно развернуть функцию Java Azure в приложениях-контейнерах Azure, используя преимущества контейнеризации и возможности интегрированного управления Azure. Если у вас есть дополнительные вопросы или вам нужна помощь с конкретными действиями, не стесняйтесь спрашивать!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/azure/deploying-a-java-azure-function-on-azure-container-apps-1oj?1 В случае нарушения прав свяжитесь с [email protected]. удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3