次の方法で共有


チュートリアル: 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 にサインインします。

  1. Azure CLI を最新バージョンに更新します。

    az upgrade
    
  2. Microsoft.App リソースプロバイダーを登録します。

    az provider register --namespace Microsoft.App
    
  3. 最新バージョンの Azure Container Apps CLI 拡張機能をインストールします。

    az extension add \
      --name containerapp \
      --allow-preview true --upgrade
    
  4. Azure にサインインします。

    az login
    
  5. Azure サブスクリプション ID に対してクエリを実行し、値を変数に設定します。

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. このプロシージャで使用する変数を設定します。

    次のコマンドを実行する前に、<> で囲まれたプレースホルダーを実際の値に置き換えてください。

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION="northcentralus"
    

    これらの変数を使用して、次の手順でリソースを作成します。

  7. リソース グループの作成に使用するサブスクリプションを設定する

    az account set -s $SUBSCRIPTION_ID
    
  8. リソース グループを作成する。

    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 を呼び出します。

  1. ユーザー オブジェクト ID に対してクエリを実行します。

    USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
    
  2. 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) のクレームが含まれていることを確認します。 詳細については、認証と承認の規則に関する記事を参照してください。

  1. アクセス トークンを取得します。

    JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
    
  2. 要求ヘッダーを保持する変数を作成します。

    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

次のステップ