チュートリアル: マネージド ID を使用して Azure Spring Apps アプリから Azure Functions を呼び出す
Note
Basic、Standard、Enterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise
この記事では、Azure Spring Apps でホストされたアプリ用のマネージド ID を作成し、それを使用して HTTP によってトリガーされる関数を呼び出す方法を説明します。
Azure Functions と App Services には、どちらも Microsoft Entra 認証の機能が組み込まれています。 この組み込みの認証機能と併せて、Azure Spring Apps のマネージド ID を使用することで、最新の OAuth のセマンティクスを使用して RESTful サービスを呼び出すことができます。 この方法では、シークレットをコード中に保存する必要がなく、外部リソースへのアクセスに対し、より粒度の細かい制御が可能となります。
前提条件
- Azure サブスクリプション。 サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Azure CLI バージョン 2.45.0 以上。
- Git.
- Apache Maven バージョン 3.0 以降。
- Azure Functions Core Tools バージョン 4.x をインストールする。
リソース グループを作成する
リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。 次のコマンドを使用して、関数アプリを格納するリソース グループを作成します。
az group create --name <resource-group-name> --location <location>
詳細については、az group create コマンドに関するページを参照してください。
関数アプリを作成する
関数アプリを作成するには、最初にバッキング ストレージ アカウントを作成する必要があります。 az storage account create コマンドを使用できます。
重要
関数アプリとストレージ アカウントには、それぞれ一意の名前が必要です。
次のコマンドを使用して、ストレージ アカウントを作成します。 <function-app-name> は実際の関数アプリの名前に置き換え、<storage-account-name> は実際のストレージ アカウントの名前に置き換えてください。
az storage account create \
--resource-group <resource-group-name> \
--name <storage-account-name> \
--location <location> \
--sku Standard_LRS
ストレージ アカウントが作成されたら、次のコマンドを使用して関数アプリを作成します。
az functionapp create \
--resource-group <resource-group-name> \
--name <function-app-name> \
--consumption-plan-location <location> \
--os-type windows \
--runtime node \
--storage-account <storage-account-name> \
--functions-version 4
https://<your-functionapp-name>.azurewebsites.net
の形式で返される hostNames
の値を書き留めます。 関数アプリをテストするために、関数アプリのルート URL でこの値を使用します。
Microsoft Entra 認証を有効にする
次の手順を使用して、関数アプリにアクセスするための Microsoft Entra 認証を有効にします。
- Azure portal で、リソース グループに移動し、作成した関数アプリを開きます。
- ナビゲーション ウィンドウで [認証] を選択し、メイン ウィンドウで [ID プロバイダーの追加] を選択します。
- [ID プロバイダーの追加] ページで、[ID プロバイダー] ドロップダウン メニューから [Microsoft] を選択します。
- [追加] を選択します。
- [ID プロバイダーの追加] ページの [基本] 設定で、[サポートされているアカウントの種類] を [Any Microsoft Entra directory - Multi-tenant] (任意の Microsoft Entra ディレクトリ - マルチテナント) に設定します。
- [認証されていない要求] を [HTTP 401 非認可: API に推奨] に設定します。 この設定により、認証されていない要求が確実にすべて拒否されます (401 応答)。
- [追加] を選択します。
設定を追加すると、関数アプリが再起動し、以降のすべての要求で、Microsoft Entra ID を介してサインインするように求められます。 (az functionapp create
コマンドの hostNames
出力で返される) 関数アプリのルート URL を使用して、認証されていない要求が現在拒否されることをテストできます。 その後、組織の Microsoft Entra サインイン画面にリダイレクトされます。
後で使用するために、アプリケーション ID とアプリケーション ID URI が必要です。 Azure portal 内で、作成した関数アプリに移動します。
アプリケーション ID を取得するには、ナビゲーション ウィンドウで [認証] を選択し、関数アプリの名前を含む ID プロバイダーの [アプリ (クライアント) ID] の値をコピーします。
アプリケーション ID URI を取得するには、ナビゲーション ウィンドウで [API の公開] を選択し、[アプリケーション ID URI] の値をコピーします。
HTTP によってトリガーされる関数の作成
空のローカル ディレクトリで、次のコマンドを使用して新しい関数アプリを作成し、HTTP によってトリガーされる関数を追加します。
func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger
HTTP エンドポイントをセキュリティで保護するために、関数では、既定でキーベースの認証が使用されます。 関数へのアクセスをセキュリティで保護するために Microsoft Entra 認証を有効にするには、次の例に示すように、function.json ファイル内で authLevel
キーを anonymous
に設定します。
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
...
}
]
}
詳細については、「Azure Functions のセキュリティ保護」の「セキュリティで保護された HTTP エンドポイント」セクションを参照してください。
次のコマンドを使用して、前の手順で作成したインスタンスにアプリを発行します。
func azure functionapp publish <function-app-name>
次の出力に示されているように、publish コマンドの出力には、新しく作成した関数の URL がリストされます。
Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
HttpTrigger - [httpTrigger]
Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger
Azure Spring Apps サービス インスタンスとアプリケーションを作成する
次のコマンドを使用して、Spring 拡張機能を追加し、Azure Spring Apps の新しいインスタンスを作成します。
az extension add --upgrade --name spring
az spring create \
--resource-group <resource-group-name> \
--name <Azure-Spring-Apps-instance-name> \
--location <location>
次のコマンドを使用して、システム割り当てマネージド ID を持つ msiapp
という名前のアプリケーションを作成します。この ID は、--assign-identity
パラメーターで要求します。
az spring app create \
--resource-group <resource-group-name> \
--service <Azure-Spring-Apps-instance-name> \
--name "msiapp" \
--assign-endpoint true \
--assign-identity
関数を呼び出すサンプル Spring Boot アプリを作成する
このサンプルは、HTTP によってトリガーされる関数を呼び出します。まず、MSI エンドポイントにアクセス トークンを要求し、そのトークンを使用して関数の HTTP 要求を認証します。 詳細については、「Azure VM 上で Azure リソースのマネージド ID を使用してアクセス トークンを取得する方法」の「HTTP を使用してトークンを取得する」セクションを参照してください。
次のコマンドを使用して、サンプル プロジェクトを複製します。
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
次のコマンドを使用して、アプリのプロパティで関数の URI とトリガー名を指定します。
cd azure-spring-apps-samples/managed-identity-function vim src/main/resources/application.properties
Azure Spring Apps アプリのマネージド ID を使用するには、次のプロパティとこれらの値を src/main/resources/application.properties に追加します。
azure.function.uri=https://<function-app-name>.azurewebsites.net azure.function.triggerPath=httptrigger azure.function.application-id.uri=<function-app-application-ID-uri>
次のコマンドを使用して、サンプル アプリをパッケージ化します。
mvn clean package
次のコマンドを使用して、Azure Spring Apps にアプリをデプロイします。
az spring app deploy \ --resource-group <resource-group-name> \ --service <Azure-Spring-Apps-instance-name> \ --name "msiapp" \ --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
次のコマンドを使用して、パブリック エンドポイントまたはテスト エンドポイントにアクセスしてアプリをテストします。
curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
応答本文で次のメッセージが返されます。
Function Response: Hello, springcloud. This HTTP triggered function executed successfully.