Azure SRE エージェントでコード インタープリターを使用してコードを実行する

SRE エージェント コード インタープリターを使用すると、セキュリティで保護された分離サンドボックス環境で Python コードとシェル コマンドを実行できます。 コード インタープリターを使用して、SRE エージェントの会話を離れることなく、データの分析、視覚化の作成、PDF レポートの生成、ファイル操作の自動化を行います。

この記事では、次の方法について説明します。

  • Python コードを実行してデータを分析し、視覚化を作成する
  • ファイル操作用のシェル コマンドを実行する
  • PDF レポートの生成とダウンロード
  • サンドボックス環境でファイルを操作する

[前提条件]

エージェントを作成するには、エージェントに適切なアクセス許可を付与し、正しい設定を構成し、適切なリソースへのアクセス権を付与する必要があります。

  • Azure アカウント: アクティブなサブスクリプションを持つ Azure アカウントが必要です。 まだアカウントがない場合は、無料でアカウントを作成することができます。

  • セキュリティ コンテキスト: ユーザー アカウントに、Microsoft.Authorization/roleAssignments/writeまたはユーザー アクセス管理者として アクセス許可が付与されていることを確認してください。

  • ファイアウォール設定: ファイアウォール設定の許可リストに *.azuresre.ai を追加します。 一部のネットワーク プロファイルでは、既定で *.azuresre.ai ドメインへのアクセスがブロックされる場合があります。

コード インタープリターのしくみ

SRE エージェント コード インタープリターは、次の特性を持つ分離された Azure Container Apps セッションで実行されます。

  • ネットワーク アクセスなし: サンドボックスは送信 HTTP または HTTPS 要求を行うことができません。
  • プロセスの生成なし: subprocessos.system などのコマンドはブロックされます。
  • パッケージのインストールなし: pip installconda install は使用できません。
  • 分離ファイル システム: すべてのファイルを /mnt/data/に保存する必要があります。

これらの制限により、コードの実行がセキュリティで保護され、予測可能になります。 pandas、matplotlib、seaborn などの一般的なデータ サイエンス ライブラリがプレインストールされています。

コードインタープリターの使い始め方

コード インタープリター ツールは、SRE エージェントの会話で自動的に使用できます。 自然言語を使用してタスクを実行するようにエージェントに依頼します。

プロンプトの例

開始するには、次のプロンプトを試してください。

  • "この CSV データを分析し、カテゴリ別にインシデントを示すグラフを作成します。"
  • "今日のインシデントの PDF 概要を生成します。"
  • "この JSON ファイルを解析し、エラー パターンを抽出します。"
  • "セッション内のすべてのファイルを一覧表示し、サイズを表示します。"

最初の Python スクリプト

次の例では、視覚化を作成する方法を示します。

import matplotlib.pyplot as plt
import numpy as np

# Generate sample data
categories = ['Critical', 'High', 'Medium', 'Low']
counts = [5, 12, 28, 45]

# Create bar chart
plt.figure(figsize=(10, 6))
plt.bar(categories, counts, color=['red', 'orange', 'yellow', 'green'])
plt.title('Incidents by Severity')
plt.xlabel('Severity Level')
plt.ylabel('Count')
plt.savefig('/mnt/data/incidents_by_severity.png', dpi=150)

コードが正常に実行されると、エージェントはメッセージ交換でイメージをインラインで返します。

シナリオ

インシデント データの分析

コード インタープリターを使用して、生のインシデント データを実用的な分析情報と視覚化に変換します。

  1. 次のプロンプトを使用して、先月に発生したすべてのインシデントの CSV ファイルを作成するように SRE エージェントに依頼します。

    Create a CSV file of all the incidents that 
    occurred in the last month.
    
    Name the file `incidents.csv` and save it
    to `/mnt/data`.
    
  2. Python を使用してインシデント パターンを分析し、傾向を特定します。

    import pandas as pd
    
    # Load incident data
    df = pd.read_csv('/mnt/data/incidents.csv')
    
    # Calculate summary statistics
    summary = df.groupby('category').agg({
        'id': 'count',
        'resolution_time': 'mean'
    }).rename(columns={'id': 'count', 'resolution_time': 'avg_resolution_hours'})
    
    # Export results
    summary.to_csv('/mnt/data/incident_summary.csv')
    print(summary)
    

視覚化を作成する

分析情報を伝えるグラフを生成します。

import matplotlib.pyplot as plt
import seaborn as sns

# Load data
df = pd.read_csv('/mnt/data/incidents.csv')

# Create visualization
plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='category', y='count', palette='viridis')
plt.title('Incidents by Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('/mnt/data/category_chart.png', dpi=150)

PDF レポートを生成する

関係者向けに書式設定された PDF ドキュメントを作成します。

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

# Create PDF
c = canvas.Canvas('/mnt/data/weekly_report.pdf', pagesize=letter)

# Add content
c.setFont('Helvetica-Bold', 18)
c.drawString(72, 750, 'Weekly Incident Report')

c.setFont('Helvetica', 12)
c.drawString(72, 720, 'Period: January 10-17, 2026')
c.drawString(72, 700, 'Total incidents: 90')
c.drawString(72, 680, 'Critical incidents: 5')
c.drawString(72, 660, 'Average resolution time: 4.2 hours')

c.save()

エージェントは、生成された PDF のダウンロード リンクを返します。

ログ ファイルの処理

シェル コマンドを使用してログ ファイルを検索および分析します。

# Count error occurrences by type
grep -E "ERROR|WARN|FATAL" application.log | sort | uniq -c | sort -rn
# Find the most recent log entries
tail -100 application.log

ツール リファレンス

コード インタープリターには、次のツールが用意されています。

ExecutePythonCode

分離されたサンドボックスで Python コードを実行します。

パラメーター タイプ 必須 Description
pythonCode 文字列 イエス 実行する Python コード (最大 20,000 文字)
timeoutSeconds 整数 いいえ 実行タイムアウト (秒) (既定値: 120、最大: 900)

出力: 画像はマークダウンとしてインラインで表示されます。 データ ファイルはダウンロード リンクとして返されます。

PDFレポート生成

Python コードから PDF ドキュメントを作成します。

パラメーター タイプ 必須 Description
pythonCode 文字列 イエス PDF ファイルを作成する Python コード
expectedOutputFilename 文字列 イエス PDF が保存されるパス (たとえば、 report.pdf)
saveAsFilename 文字列 イエス ファイル名のダウンロード (例: daily_summary.pdf)
timeoutSeconds 整数 いいえ 実行タイムアウト (秒) (既定値: 180、最大: 900)

シェルコマンドを実行

サンドボックスでシェル コマンドを実行します。

パラメーター タイプ 必須 Description
command 文字列 イエス 実行するシェル コマンド
explanation 文字列 いいえ コマンドを使用してログに記録する説明
isBackground ブーリアン いいえ falseする必要があります (バックグラウンド ジョブはサポートされていません)
timeoutSeconds 整数 いいえ 実行タイムアウト (既定値: 120、最大: 240)

コマンドは /mnt/data/から実行されます。 ;の代わりに&&を使用して、相対パスとチェーン コマンドを使用します。

ファイル操作

Tool Description
ReadSessionFile /mnt/data/からファイルの内容を読み取ります。
SearchSessionFiles grep スタイルのパターンを使用して、ファイル内のテキストを検索します。
ListSessionFiles セッション内のすべてのファイルをメタデータと共に一覧表示します。
GetSessionFile セッションからファイルをダウンロードします。
UploadFileToSession さらに処理するためにファイルをアップロードします。

サポートされているファイルの種類

  • 画像: PNG、JPG、GIF、SVG、WebP、BMP、TIFF、EPS
  • データ: CSV、TSV、Excel、JSON、XML、YAML、HDF5、NetCDF、pickle
  • ドキュメント: PDF、HTML、Markdown、Office 形式
  • コード: Python、Jupyter Notebook、R、SQL
  • アーカイブ: ZIP, TAR, GZ

制限事項

セキュリティ上の理由から、システムは次の操作をブロックします。

カテゴリ ブロックされた操作
プロセスの生成 subprocessos.systemos.popenos.spawn*
ネットワーク アクセス 外部向け HTTP/HTTPS 要求
パッケージ インストール pip installconda install
ファイル システム 外部へのアクセス /mnt/data/

コード インタープリターのトラブルシューティング

コードの実行が失敗する

  • コードが、 subprocess やネットワーク呼び出しなどのブロックされた操作を使用していないことを確認します。
  • すべてのファイル パスが /mnt/data/を指していることを確認します。
  • コードが 20,000 文字以下であることを確認します。

ファイルが出力に表示されない

  • /mnt/data/にファイルを保存することを確認します。
  • ListSessionFilesを使用して、ファイルの作成を確認します。
  • ファイル拡張子がサポートされていることを確認します。

タイムアウト エラー

  • timeoutSeconds パラメーターを大きくします (最大 900 秒)。
  • コードを最適化して実行時間を短縮します。
  • 大規模な操作をより小さなチャンクに分割します。