Azure Functions は、Azure Container Apps でのコンテナー化された関数アプリの開発、デプロイ、管理のための統合サポートを提供します。これにより、Azure Kubernetes Service (AKS) などのコンテナー環境で Azure Functions を個別に実行する場合と比較して、統合された Azure 管理ポータルを使用した Azure Functions の実行と管理が容易になります。さらに、Azure Container Apps が提供する機能を活用することで、KEDA、Dapr、Envoy、スケーリング、監視、セキュリティ、Azure Functions のアクセス制御などの機能を簡単に利用できます。
[参照]
Azure Functions の Azure Container Apps ホスティング
Azure Container Apps で最初のコンテナー化された関数を作成する
以下は、Azure Container Apps リソースの作成に関連する環境変数です。ここでは、作成するリソースのさまざまな名前とインストール場所、コンテナー イメージの名前とタグを指定します。
# 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
まず、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 関数のサンプル コードが含まれます。 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
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
自動的に生成された 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 CLI を使用して Azure にログインします。以下のコマンドを実行してログインします。
az login
Azure でリソース グループを作成します。このリソース グループは、Azure Container Registry と Azure Container Apps に関連するリソースをグループ化するために使用されます。
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Azure Container Registry を作成してログインします。Azure Container Registry は、コンテナー イメージをプッシュするためのプライベート コンテナー レジストリです。
az acr create --resource-group $RESOURCE_GROUP_NAME --name $CONTAINER_REGISTRY_NAME --sku Basic az acr login --name $CONTAINER_REGISTRY_NAME
作成された Azure Container Registry のサーバー名を取得します。サーバー名の形式は $CONTAINER_REGISTRY_NAME.azurecr.io.
になります。
CONTAINER_REGISTRY_SERVER=$(az acr show --name $CONTAINER_REGISTRY_NAME --query loginServer --output tsv)
ローカルで作成されたコンテナー イメージを Azure Container Registry にプッシュするには、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 CLI から Azure Container Apps を作成および管理するには、必要な拡張機能とリソース プロバイダーを登録します。
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 Container Apps の環境を作成します。このコマンドは、Azure Container Apps をホストするために必要な構成をセットアップします。
az containerapp env create --name $CONTAINER_ENVIRONMENT --enable-workload-profiles --resource-group $RESOURCE_GROUP_NAME --location $LOCATION
Azure Functions では、Function App インスタンスを作成するときにストレージ アカウントが必要です。したがって、Azure Functions 用の汎用ストレージ アカウントを作成します。
az storage account create --name $STORAGE_NAME --location $LOCATION --resource-group $RESOURCE_GROUP_NAME --sku Standard_LRS
Azure Container Apps で 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
最後に、Azure Functions から Azure Container Registry への安全なアクセスを構成します。 Azure Functions のシステム マネージド ID を有効にし、アクセス用の 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
最後に、デプロイされた Azure 関数の 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 関数が期待どおりに機能していることを確認します。
このガイドでは、次の方法を学びました:
これらの手順に従うことで、コンテナー化と Azure の統合管理機能の利点を活用して、Java Azure Function を Azure Container Apps に正常にデプロイできます。さらに質問がある場合、または特定の手順についてサポートが必要な場合は、お気軽にお問い合わせください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3