APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【Microsoft Build 2024速報】Azure Container Apps Dynamic Sessions で安全にコードを実行する

はじめに

こんばんは、ACS事業部の吉川です。
Microsoftの年次イベント Microsoft Build でのアップデートについて引き続きお届けしていきます。

build.microsoft.com

news.microsoft.com

タイトルどおり、本記事では Azure Container Apps Dynamic Sessions をピックアップしてお届けします。

概要

Azure Container Apps Dynamic Sessions は、サンドボックス環境を作成し安全にコードを実行できるサービスです。

https://techcommunity.microsoft.com/t5/apps-on-azure-blog/new-secure-sandboxes-at-scale-with-azure-container-apps-dynamic/ba-p/4142148

Microsoft Build に先駆けて、Python のカンファレンスである PyCon US 2024 の中で紹介されていたようです。

us.pycon.org

PyCon で紹介されたという点からもわかるとおり、現時点では実行可能なコードは Python のみです。

リソースを作成してみる

どんなものかを見ていくために、実際にリソースを作成してみましょう。

現時点では限られたリージョンのみに展開されています。

az provider show -n Microsoft.App --query "resourceTypes[?resourceType=='sessionPools'].locations"
[
  [
    "West US 2",
    "North Europe",
    "East US",
    "East Asia",
    "North Central US"
  ]
]

残念ながら日本のリージョンには対応していません。上記の中からお好きなリージョンを選びましょう。

リソースの作成手順は以下のドキュメントに記載されています。現時点ではポータルから作成はできず、Azure CLI を使用します。

learn.microsoft.com

# Azure CLI を最新版に更新
az upgrade

# Azure Container Apps 用の拡張機能を、プレビューフラグを有効にしてインストール
az extension add --name containerapp --upgrade --allow-preview true -y

# リソースグループの作成
az group create --name rg-build2024 --location westus2 

# Azure Container Apps Dynamic Sessions リソースの作成
# --network-status EgressDisabled を指定していると、実行するコードでのアウトバウンド通信は許可されない
# アウトバウンド通信が必要な場合は EgressEnabled を指定する
az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group rg-build2024 \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

上記の手順で my-session-pool というリソースが作成されます。
手順を見るとわかるように、通常の Azure Container Apps では必要となる Container Apps 環境を作成していません。Azure Container Apps Dynamic Sessions においては Container Apps 環境は必ずしも必須ではないようです。 CLI の指定可能なオプションを見る限り Container Apps 環境内にデプロイすることも可能なようですが、サンドボックス環境と考えればContainer Apps環境内に作成する必然性も薄いのではと思います。

learn.microsoft.com

ポータルから使ってみる

リソースの作成には CLI が必要ですが、作成後はポータルからも操作可能です。
Playground で Python のコードを書き、そのまま実行可能です。
実行結果として標準出力・標準エラー出力が表示されます。

API で利用する

実際の利用においてはポータルから利用するシーンはほぼなく、アプリケーションに組み込んで利用することとなるでしょう。
利用のイメージを掴むために、API を直接呼び出して利用してみます。

まずは以下のような JSON ファイルを作成します。

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "print('Hello, world!')"
    }
}

properties.code に実行したい Python のコードを入力します。上記例だと print('Hello, world!') ですね。

この JSON を Azure Container Apps Dynamic Sessions の API エンドポイントに POST します。

# API エンドポイントの取得
ENDPOINT=$(az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group rg-build2024 \
    --query 'properties.poolManagementEndpoint' -o tsv)

# 実行用のパスを付与
ENDPOINT=${ENDPOINT}/code/execute

# API バージョンを付与
ENDPOINT=${ENDPOINT}?api-version=2024-02-02-preview

# 実行するセッションを識別するための識別子を付与
# 任意の文字列でよいので、今回は testsession とする
ENDPOINT="${ENDPOINT}&identifier=testsession"

# 認証用のアクセストークンを取得
BEARER_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)

# JSON ファイルを POST
curl -X POST -H "Content-Type: application/json" \
  -H "Authorization: Bearer $BEARER_TOKEN" \
  --data @./body.json $ENDPOINT

以下のようなレスポンスが返ってきます。

{
    "$id": "1",
    "properties": {
        "$id": "2",
        "status": "Success",
        "stdout": "Hello, world!\n",
        "stderr": "",
        "result": "",
        "executionTimeInMilliseconds": 8
    }
}

properties.stdout に、Python を実行した結果の標準出力が入っていることが確認できます。

想定される利用シーン

サンドボックス上で Python のコードを実行できるという機能をどう使うかという点について、想定される主なユースケースとしては LLM の生成したコードを実行する というものになるでしょう。

LLM が生成したコードを隔離された安全な環境で実行し、その実行結果を基に次の処理を行う…という一連のフローを構築することで、LLM を組み込んだ処理の幅がグッと広がることが期待できます。

上記では API を直接実行しましたが、LLM アプリケーション開発においてメジャーな以下のフレームワークでのチュートリアルも準備されています。

単一のコードだけでなく、複数ファイルをアップロードして実行することや、実行結果をファイルとして出力しそれをダウンロードすることもできます。
生成 AI 全盛のこの時代においては有用なサービスとなるでしょう。

おわりに

Microsoft Buildのキーノートの中でも、Azure OpenAI Service での GPT-4o の対応や LLM モデルの拡充といった発表がありました。 Microsoft はモデルそのものの提供だけでなく、それらを活用したアプリケーション開発においても便利なサービスをどんどん拡充していっています。
それらの新サービスを利用した、素敵なプロダクト・ソリューションが生まれてくる未来が楽しみですね。

【PR】
私達ACS事業部はAzure・AKSなどのクラウドネイティブ技術を活用した内製化のご支援をしております。

www.ap-com.co.jp

一緒に働いていただける仲間も募集中です!
まだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。
我々の事業部のCultureDeckはコチラ。

www.ap-com.co.jp

本記事の投稿者: 吉川 俊甫
Buildに合わせ夜型生活です。Microsoft MVP (Microsoft Azure)
Shunsuke Yoshikawa - Credly