チュートリアル: Azure Container Apps のコード インタープリター セッションで JavaScript コードを実行する (プレビュー)
このチュートリアルでは、HTTP API を使用して Azure Container Apps の動的セッションで JavaScript コードを実行する方法について説明します。
このチュートリアルでは、次のことを行います。
- 新しいコード インタープリターのセッションを作成する
- セッション プールに適切なセキュリティ コンテキストを設定する
- コンテナー アプリを実行するための JavaScript コードを渡す
Note
Azure Container Apps の動的セッションにおける JavaScript コード インタープリター機能は現在プレビュー段階です。 詳細については、「プレビューの制限事項」を参照してください。
前提条件
このチュートリアルを開始する前に、次のリソースが必要です。
リソース | 説明 |
---|---|
Azure アカウント | アクティブなサブスクリプションを含む Azure アカウントが必要です。 アカウントがない場合は、ここで無料で作成できます。 |
Azure CLI | Azure CLI をインストールします。 |
セットアップ
まず、最新の更新プログラムを使用して Azure CLI を準備し、Azure にサインインします。
Azure CLI を最新バージョンに更新します。
az upgrade
Microsoft.App
リソースプロバイダーを登録します。az provider register --namespace Microsoft.App
最新バージョンの Azure Container Apps CLI 拡張機能をインストールします。
az extension add \ --name containerapp \ --allow-preview true --upgrade
Azure にサインインします。
az login
Azure サブスクリプション ID に対してクエリを実行し、値を変数に設定します。
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
このプロシージャで使用する変数を設定します。
次のコマンドを実行する前に、
<>
で囲まれたプレースホルダーを実際の値に置き換えてください。RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION="northcentralus"
これらの変数を使用して、次の手順でリソースを作成します。
リソース グループの作成に使用するサブスクリプションを設定する
az account set -s $SUBSCRIPTION_ID
リソース グループを作成する。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION
コード インタープリターのセッション プールを作成する
az containerapp sessionpool create
コマンドを使用して、任意の JavaScript コードを実行する Node.js セッション プールを作成します。
az containerapp sessionpool create \
--name $SESSION_POOL_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--max-sessions 5 \
--network-status EgressEnabled \
--container-type NodeLTS \
--cooldown-period 300
コード実行 API のロールの割り当てを設定する
セッション プールの API とやり取りするには、Azure ContainerApps Session Executor
ロールの割り当てを持つ ID を使用する必要があります。 このチュートリアルでは、Microsoft Entra ID ユーザー ID を使用して API を呼び出します。
ユーザー オブジェクト ID に対してクエリを実行します。
USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
ID にロールを割り当てます。
az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee-object-id $USER_OBJECT_ID \ --assignee-principal-type User \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME"
ベアラー トークンを取得する
セッション プールの API に直接アクセスするには、要求の Authorization
ヘッダーに含めるアクセス トークンを生成します。 トークンに、値 https://dynamicsessions.io
の対象ユーザー (aud
) のクレームが含まれていることを確認します。 詳細については、認証と承認の規則に関する記事を参照してください。
アクセス トークンを取得します。
JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
要求ヘッダーを保持する変数を作成します。
AUTH_HEADER="Authorization: Bearer $JWT_ACCESS_TOKEN"
このヘッダーは、アプリケーションのエンドポイントへの要求に付随します。
セッション プール管理エンドポイントを取得する
次のコマンドを実行して、アプリケーションのエンドポイントを返します。
SESSION_POOL_MANAGEMENT_ENDPOINT=$(az containerapp sessionpool show -n $SESSION_POOL_NAME -g $RESOURCE_GROUP --query "properties.poolManagementEndpoint" -o tsv)
このエンドポイントは、コード インタープリター セッションでコード ペイロードを実行するために API 呼び出しを行う場所です。
セッションでコードを実行する
これで、セキュリティ コンテキストを確立するためのベアラー トークンと、セッション プールのエンドポイントが用意できたので、コード ブロックを実行する要求をアプリケーションに送信できます。
次のコマンドを実行し、アプリケーションで「hello world」をログに記録する JavaScript コードを実行します。
curl -v -X 'POST' -H "$AUTH_HEADER" "$SESSION_POOL_MANAGEMENT_ENDPOINT/code/execute?api-version=2024-02-02-preview&identifier=test" -H 'Content-Type: application/json' -d '
{
"properties": {
"codeInputType": "inline",
"executionType": "synchronous",
"code": "console.log(\"hello-world\")"
}
}'
次の例のような出力が表示されます。
{
"properties": {
"status": "Success",
"stdout": "hello-world\n",
"stderr": "",
"executionResult": "",
"executionTimeInMilliseconds": 5
}
}
コード インタープリターの API サンプルは GitHub に多数あります。
リソースをクリーンアップする
このチュートリアルで作成したリソースは、Azure の請求書に影響します。 これらのサービスを長期間使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのものを削除してください。
az group delete \
--resource-group $RESOURCE_GROUP