「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Azure Container Apps への Java Azure 関数のデプロイ

Azure Container Apps への Java Azure 関数のデプロイ

2024 年 11 月 1 日に公開
ブラウズ:813

Deploying a Java Azure Function on Azure Container Apps

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

Java Azure 関数プロジェクトの作成とテスト

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 関数のサンプル コードが含まれます。 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 Container Registry にプッシュする

1. Azure CLIにログインします。

まず、Azure CLI を使用して Azure にログインします。以下のコマンドを実行してログインします。

az login

2. リソースグループの作成

Azure でリソース グループを作成します。このリソース グループは、Azure Container Registry と Azure Container Apps に関連するリソースをグループ化するために使用されます。

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

3. Azure Container Registry を作成してログインする

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

4. Azure Container Registry サーバー名の取得

作成された Azure Container Registry のサーバー名を取得します。サーバー名の形式は $CONTAINER_REGISTRY_NAME.azurecr.io.
になります。

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

5. イメージを Azure Container Registry にプッシュします

ローカルで作成されたコンテナー イメージを 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 コンテナー アプリの作成と Java Azure 関数のデプロイ

1. Azure CLI で拡張機能とリソース プロバイダーを登録する

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

2. Azureコンテナアプリ環境の作成

Azure Container Apps の環境を作成します。このコマンドは、Azure Container Apps をホストするために必要な構成をセットアップします。

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

3. Azure Functions のストレージ アカウントを作成する

Azure Functions では、Function App インスタンスを作成するときにストレージ アカウントが必要です。したがって、Azure Functions 用の汎用ストレージ アカウントを作成します。

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

4. Azure Container Apps で Java Azure Function のインスタンスを作成する

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

5. Azure Container Registry にアクセスするための Azure 関数のロールの割り当て

最後に、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

6. Azure 関数の URL を取得する

最後に、デプロイされた 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 関数が期待どおりに機能していることを確認します。

まとめ

このガイドでは、次の方法を学びました:

  1. Azure リソースの環境変数を設定します。
  2. Maven を使用して Java Azure Function プロジェクトを作成します。
  3. テストのために Azure 関数をローカルで実行します。
  4. Azure Function の Docker イメージを構築します。
  5. Docker イメージを Azure Container Registry にプッシュします。
  6. Azure Container Apps 環境を作成し、Java Azure 関数をデプロイします。
  7. Azure Container Registry への安全なアクセスに必要なロールを割り当てます。
  8. デプロイされた Azure 関数の URL を取得してテストします。

これらの手順に従うことで、コンテナー化と Azure の統合管理機能の利点を活用して、Java Azure Function を Azure Container Apps に正常にデプロイできます。さらに質問がある場合、または特定の手順についてサポートが必要な場合は、お気軽にお問い合わせください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/azure/deploying-a-java-azure-function-on-azure-container-apps-1oj?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3