」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 在 Azure 容器應用程式上部署 Java Azure Function

在 Azure 容器應用程式上部署 Java Azure Function

發佈於2024-11-01
瀏覽:853

Deploying a Java Azure Function on Azure Container Apps

Azure Functions 为在 Azure 容器应用上开发、部署和管理容器化函数应用提供集成支持。与在 Azure Kubernetes 服务 (AKS) 等容器环境中独立运行 Azure Functions 相比,使用集成的 Azure 管理门户可以更轻松地运行和管理 Azure Functions。此外,通过利用 Azure 容器应用程序提供的功能,您可以轻松利用 Azure Functions 的 KEDA、Dapr、Envoy、缩放、监控、安全性和访问控制等功能。

[参考]

Azure 容器应用托管 Azure Functions

在 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 Function 项目

1. 创建 Azure Functions for Java Maven 项目

首先,为 Azure Functions for Java 创建一个 Maven 项目。此 Maven 项目旨在使用 Java 21 创建 Azure Functions。使用 mvn archetype: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 将包含带有 HTTP 触发器的 Azure Function 的示例代码。还将创建一个 Dockerfile,其中包含在 Docker 容器环境中运行 Azure Functions 的配置。

├── 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 Functions。执行以下命令以使用 HTTP 触发器启动 Azure Functions。

mvn clean package
mvn azure-functions:run

Azure Functions 运行后,打开另一个终端并执行以下命令以向 HTTP 触发器发送请求。您应该收到一条回复“Hello, World”。

curl "http://localhost:7071/api/HttpExample?name=World"
# Output: 
Hello, World

创建和测试 Azure Functions 容器映像

1. 构建并测试 Docker 镜像

使用自动生成的 Dockerfile 构建 Azure Functions 容器映像。执行以下命令构建镜像。

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 Functions 容器映像。 Azure Functions 容器内部使用 HTTP 端口 80,因此您将其映射到端口 8080 以进行本地访问。容器启动后,执行curl命令向Azure Functions HTTP触发器发送请求。如果一切正常,您应该收到“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 CLI 登录 Azure。执行以下命令登录。

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 Function

1. 在 Azure CLI 中注册扩展和资源提供程序

要从 Azure CLI 创建和管理 Azure 容器应用程序,请注册必要的扩展和资源提供程序。

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 Functions创建存储帐户

创建 Function App 实例时,Azure Functions 需要存储帐户。因此,为 Azure Functions 创建一个通用存储帐户。

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

4. 在 Azure 容器应用程序中创建 Java Azure Function 实例

在 Azure 容器应用程序中创建 Java Azure Function 的实例。执行以下命令创建实例。由于 Azure Function 是使用 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 Function 分配角色以访问 Azure 容器注册表

最后,配置 Azure Functions 对 Azure 容器注册表的安全访问。为 Azure Functions 启用系统管理标识并分配 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. 检索 Azure Function 的 URL

最后,检索已部署的 Azure Function 的 HTTP 触发器函数 URL。使用 az functionapp function show 命令获取 Azure Functions 函数的详细信息。

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"

然后,您可以使用curl 命令向检索到的URL 发送请求,以确认Azure Functions 正常工作。

curl "https://yoshiojavafunc.niceocean-********.eastus.azurecontainerapps.io/api/httpexample?name=World"
# Expected Output: 
Hello, World

如果一切设置正确,您应该会收到一条响应“Hello, World”,确认您的 Azure Function 正在按预期运行。

概括

在本指南中,您学习了如何:

  1. 为 Azure 资源设置环境变量。
  2. 使用 Maven 创建 Java Azure Function 项目。
  3. 在本地运行 Azure Function 进行测试。
  4. 为 Azure Function 构建 Docker 映像。
  5. 将 Docker 映像推送到 Azure 容器注册表。
  6. 创建 Azure 容器应用程序环境并部署 Java Azure Function。
  7. 分配必要的角色以安全访问 Azure 容器注册表。
  8. 检索并测试已部署的 Azure Function 的 URL。

通过执行这些步骤,您可以在 Azure 容器应用程序上成功部署 Java Azure Function,利用容器化和 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