![[アップデート] Agent Toolkit for AWS の AWS AI/ML スキルで、Claude Code から SageMaker AI の Processing job を実行してみた](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/f_auto,q_auto/v1790875157/eyecatch/zettwdjcftbeaqfmbezn.png)
[アップデート] Agent Toolkit for AWS の AWS AI/ML スキルで、Claude Code から SageMaker AI の Processing job を実行してみた
クラウド事業統括本部の石川です。Agent Toolkit for AWS の AWS AI/ML スキル(aws-ai-ml)が core スキルになり、Amazon SageMaker AI の対応範囲が広がりましたので、Claude Code から実際に使って、SageMaker AI の Processing job を実行してみました。
AWS AI/ML スキルが Agent Toolkit for AWS の core スキルになったことが発表されました。コーディングエージェントは、Agent Toolkit for AWS のほかのスキル(EC2、Bedrock など)と組み合わせて、SageMaker AI でのモデルの選定・学習・最適化・デプロイを自然言語の依頼で進められます。
アナウンスでは、Agent Toolkit for AWS が、以前の AWS Labs のスキルとプラグインを置き換える唯一のサポート対象の統合ポイントになったと説明されています。スキルは SageMaker Studio の JupyterLab にもプリインストールされ、Kiro などのコーディングエージェントから使えます。
あわせて、スキルが対応する SageMaker AI の領域が次のように拡張されました。
- 推論最適化(デプロイ済みモデルのレイテンシー・スループット・コストの最適化)
- モデルカスタマイズ(ユースケース定義から学習・評価・デプロイまでのファインチューニング)
- 従来の機械学習と生成 AI の両方を対象にしたサーバーレスなトレーニング
- MLflow(実験管理とモデルのライフサイクル管理)
- JumpStart モデルのデプロイとモデルの推薦
- Processing jobs(マネージドなコンピューティングでのデータ準備と ETL)
スキル自体の追加料金はなく、エージェントが使った AWS リソースの料金だけがかかります。
本記事では、Claude Code に Agent Toolkit for AWS の aws-core プラグインを入れた状態で、次の 3 つを試します。
- プラグインを更新し、
aws-ai-mlスキルの版と構成を確認する - JumpStart のモデルを推薦してもらう(AWS リソースは作成しない)
- 今回追加された Processing jobs を使い、前処理のジョブを実行してもらう
Agent Toolkit for AWS そのものについては、以下の記事で紹介しています。
AWS AI/ML スキル(aws-ai-ml)とは
Agent Toolkit for AWS は、AI コーディングエージェントが AWS 上で作業するためのツールキットです。AWS MCP Server、スキル、プラグイン、ルールファイルの 4 つで構成されています。aws-ai-ml はそのうちの SageMaker AI を対象にしたスキルで、Claude Code では aws-core プラグインに含まれています。
スキルの入口である SKILL.md には、依頼の内容ごとに読む reference フォルダを決めるルーティング表があります。エージェントは依頼に関係するフォルダだけを読み、そこに書かれた手順・スクリプト・コードテンプレートに沿って作業します。今回インストールした版(metadata.version: "5")では、次の 15 フォルダがありました。
| reference フォルダ | 対象となる依頼 |
|---|---|
| planning | モデルカスタマイズやデプロイの計画、作業範囲の洗い出し |
| use-case-specification | 業務課題・成功基準などの要件定義 |
| model-selection | ベースモデルの選定(Hub のモデル ID の解決を含む) |
| finetuning-technique | SFT / DPO / RLVR / RLAIF の選択 |
| dataset-evaluation | 学習データの品質・形式の確認 |
| dataset-transformation | データセットの形式変換 |
| finetuning | ファインチューニングのコード生成と学習の開始 |
| training-jobs | SageMaker Training job による学習 |
| processing-jobs | SageMaker Processing job による前処理・ETL |
| model-evaluation | 学習済みモデルの評価・ベンチマーク |
| model-deployment | エンドポイントや Bedrock へのデプロイ、推論最適化 |
| sdk-getting-started | IAM ロール・S3 バケット・SDK の事前確認 |
| directory-management | プロジェクトディレクトリと成果物の管理 |
| manage-mlflow | SageMaker Managed MLflow App の作成・更新・削除 |
| endpoint-diagnostics | エンドポイントの障害・レイテンシーの診断 |
SKILL.md には共通のルールもあり、AWS CLI やスクリプトを実行する前に AWS_SDK_UA_APP_ID=AWSSkill-SageMaker を設定するよう指示されています。
Claude Code へのインストール方法は、ドキュメントに次の 3 つが記載されています。
aws-coreプラグインをインストールする(/plugin install aws-core@claude-plugins-official)- Skills CLI で
aws-ai-mlだけを入れる(npx skills add aws/agent-toolkit-for-aws/skills/core-skills/aws-ai-ml --all --agent claude-code --copy) - AWS CLI 2.35.0 以降の
aws configure agent-toolkitで、エージェントの検出・スキルのインストール・AWS MCP Server の設定をまとめて行う
インストール方法によって、スキルの取得元が異なります。今回使った agent-toolkit-for-aws マーケットプレイスの aws-core プラグインは、GitHub の aws/agent-toolkit-for-aws リポジトリからスキルを取得します。AWS CLI の aws agent-toolkit add-skill コマンドは、AWS の skills catalog からスキルを取得します。skills catalog は us-east-1 でのみ提供されています。
今回の検証では、次の構成で Claude Code を動かしました。
やってみた
前提条件
- SageMaker AI の実行ロール(
AmazonSageMakerFullAccessと S3 の Get/Put/List を許可する既存のロール) - 検証環境
- リージョン: ap-northeast-1(
aws agent-toolkitコマンドのみ us-east-1) - Claude Code 2.1.296(モデル: claude-opus-5-5)
aws-coreプラグイン 1.1.0(agent-toolkit-for-awsマーケットプレイス)- AWS CLI 2.37.9
- Python 3.12.11、SageMaker Python SDK 3.24.0(uv で作成した venv)
- リージョン: ap-northeast-1(
コマンドの出力に含まれる AWS アカウント ID は <アカウント ID>、IAM ロールの ID は <ロール ID> に置き換えています。
エージェントの実行ログを残すため、検証用ディレクトリ demo で Claude Code をヘッドレス(claude -p)で実行しました。個人の設定の影響を除くため、--setting-sources project で読み込む設定をプロジェクトのものに限定し、ユーザーの CLAUDE.md は claudeMdExcludes で除外しています。claude.ai のコネクタは環境変数 ENABLE_CLAUDEAI_MCP_SERVERS=false で無効にしました。
demo/.claude/settings.json では aws-core プラグインだけを有効にしています。
demo/.claude/settings.json
{
"enabledPlugins": {
"aws-core@agent-toolkit-for-aws": true
},
"env": {
"AWS_REGION": "ap-northeast-1",
"AWS_DEFAULT_REGION": "ap-northeast-1"
}
}
許可ルールは --settings で渡すファイル demo/headless-settings.json に分けました。最初は demo/.claude/settings.json に書いていましたが、claude -p の実行時に「this workspace has not been trusted」という警告とともに許可ルールが無視されたため、こちらに移しています。--permission-mode dontAsk では、許可リストにない操作は確認なしで拒否されます。AWS CLI は読み取り系のコマンドと Processing job の作成だけを許可し、IAM の変更系や、エンドポイント・ドメイン・MLflow App の作成は拒否しました。以下は検証の最後の時点の内容で、検証の途中でルールを追加しています(追加した経緯は各ステップに記載します)。
headless-settings.json
{
"claudeMdExcludes": [
"/Users/ishikawa/.claude/CLAUDE.md",
"/Users/ishikawa/.claude/**"
],
"permissions": {
"allow": [
"Skill",
"Read",
"Glob",
"Grep",
"Edit(./**)",
"Bash(export AWS_SDK_UA_APP_ID=*)",
"Bash(python -c:*)",
"Bash(python:*)",
"Bash(python3:*)",
"Bash(ls:*)",
"Bash(cat:*)",
"Bash(aws sts get-caller-identity:*)",
"Bash(aws sagemaker list-*)",
"Bash(aws sagemaker describe-*)",
"mcp__plugin_aws-core_aws-mcp__aws___search_documentation",
"mcp__plugin_aws-core_aws-mcp__aws___read_documentation",
"mcp__plugin_aws-core_aws-mcp__aws___retrieve_skill",
"Bash(cd:*)",
"Bash(rm -f -- /var/folders/:*)",
"Bash(rm -f -- \"/var/folders/:*)",
"Bash(rm -f /var/folders/:*)",
"Bash(mkdir:*)",
"Bash(aws iam get-*)",
"Bash(aws iam list-*)",
"Bash(aws iam simulate-principal-policy *)",
"Bash(aws s3 ls *)",
"Bash(aws s3api head-object *)",
"Bash(aws s3api list-objects-v2 *)",
"Bash(aws s3api get-bucket-location *)",
"Bash(aws s3api get-bucket-tagging *)",
"Bash(aws s3 cp s3://20261018-blog/*)",
"Bash(aws logs get-log-events *)",
"Bash(aws logs describe-log-streams *)",
"Bash(aws logs filter-log-events *)",
"Bash(aws logs tail *)",
"Bash(aws service-quotas get-service-quota *)",
"Bash(aws service-quotas list-service-quotas *)",
"Bash(head:*)",
"Bash(wc:*)",
"Bash(aws s3 cp * s3://20261018-blog/code/*)",
"Bash(aws sagemaker create-processing-job *)",
"Bash(aws sagemaker stop-processing-job *)",
"Bash(aws ecr describe-images *)",
"Bash(echo:*)"
],
"deny": [
"mcp__plugin_aws-core_aws-mcp__aws___run_script",
"Bash(aws sagemaker delete-*)",
"Bash(aws s3 rm:*)",
"Bash(aws s3 rb:*)",
"Bash(aws iam create-*)",
"Bash(aws iam delete-*)",
"Bash(aws iam put-*)",
"Bash(aws iam attach-*)",
"Bash(aws iam detach-*)",
"Bash(aws iam update-*)",
"Bash(aws s3 mb *)",
"Bash(aws sagemaker create-endpoint*)",
"Bash(aws sagemaker create-model*)",
"Bash(aws sagemaker create-domain*)",
"Bash(aws sagemaker create-space*)",
"Bash(aws sagemaker create-app*)",
"Bash(aws sagemaker create-mlflow*)",
"Bash(aws sagemaker create-training-job*)"
]
}
}
エージェントへの依頼は、demo/prompts/ に置いた依頼文のファイルを -p に渡し、ラッパースクリプトで実行しました。各ステップに載せているコマンドは、スクリプトが実行した内容を展開したものです。スクリプトは、次の環境変数を設定してから claude を起動しています。
cd demo
export ENABLE_CLAUDEAI_MCP_SERVERS=false
export AWS_SDK_UA_APP_ID=AWSSkill-SageMaker
claude --setting-sources project --settings headless-settings.json
プラグインを更新して aws-ai-ml の版を確認する
aws-core プラグインはバージョンが一緒でも中身が異なる場合があるので、プラグインをアンインストールしてから、インストールし直します。
% claude plugin uninstall aws-core@agent-toolkit-for-aws --json
{"command":"uninstall","outcome":"ok","plugin":"aws-core@agent-toolkit-for-aws","pluginId":"aws-core@agent-toolkit-for-aws","scope":"user","keptData":false,"message":"Successfully uninstalled plugin: aws-core (scope: user)"}
% claude plugin install aws-core@agent-toolkit-for-aws --json -y
{"command":"install","outcome":"ok","plugin":"aws-core@agent-toolkit-for-aws","pluginId":"aws-core@agent-toolkit-for-aws","scope":"user","message":"Successfully installed plugin: aws-core@agent-toolkit-for-aws (scope: user)"}
スキルが読み込まれていることを確認する
公式ブログの手順に合わせて、利用できるスキルを Claude Code に尋ねました。プロンプトは以下のとおりです。
どのようなスキルが利用可能ですか? aws-ai-ml が含まれるかどうかと、その説明を 3 行で教えてください。

aws-core:aws-ai-ml として読み込まれており、説明に Training / Processing ジョブが含まれています。
JumpStart のモデルを推薦してもらう
ファインチューニングせずにデプロイするモデルを選んでもらいます。AWS リソースは作成しないよう依頼しました。プロンプトは以下のとおりです。
SageMaker AI で、社内の日本語の問い合わせ文を要約する用途に使うモデルを選びたいです。ファインチューニングはせず、そのままリアルタイムエンドポイントへデプロイする前提です。リージョンは ap-northeast-1 です。今回はモデル候補の推薦までにして、エンドポイントなどの AWS リソースは作成しないでください。
下記の質問に応答します。
⏺ User answered Claude's questions:
⎿ · モデルのサイズ・コスト感について希望はありますか?(ap-northeast-1 のリア
ルタイムエンドポイントは常時課金のため、インスタンス費用に直結します) →
小型・低コスト重視

日本語の問い合わせ要約用モデルを ap-northeast-1 の SageMaker から選び、AWS リソースは作らずに推薦まで終えました。第一候補は Gemma 4 E4B-it を ml.g6e.xlarge で動かす構成です。
回答の最後にあるとおり、次は社内データで上位 2 モデルの要約品質を比べることです。このモデル推薦で作成した AWS リソースはありません。
Processing job を実行してもらう
前処理の対象として、問い合わせチケットの合成データ(500 行)を次のスクリプトで作りました。channel、response_minutes、satisfaction に欠損値が入ります。
import csv, random
random.seed(20261014)
p="./demo/data/support_tickets.csv"
cats=["billing","technical","account","shipping"]; chans=["email","chat","phone"]; pri=["low","medium","high"]
with open(p,"w",newline="") as f:
w=csv.writer(f); w.writerow(["ticket_id","category","channel","priority","response_minutes","message_length","satisfaction","resolved"])
for i in range(1,501):
c=random.choice(cats); ch=random.choice(chans); pr=random.choices(pri,[5,3,2])[0]
rm=round(random.lognormvariate(3.2,0.8),1) if random.random()>0.08 else ""
ml=int(random.gauss(600,250)); ml=max(ml,20)
sat=random.randint(1,5) if random.random()>0.12 else ""
res=1 if random.random()<(0.85 if pr!="high" else 0.65) else 0
if random.random()<0.04: ch=""
w.writerow([f"T{i:05d}",c,ch,pr,rm,ml,sat,res])
先頭の 5 行です。
% head -5 demo/data/support_tickets.csv
ticket_id,category,channel,priority,response_minutes,message_length,satisfaction,resolved
T00001,technical,phone,medium,29.6,408,5,1
T00002,shipping,chat,low,,837,3,0
T00003,shipping,chat,medium,339.7,548,1,0
T00004,account,chat,high,138.8,433,3,0
このファイルを、検証用の S3 バケット 20261018-blog の support_tickets.csv にアップロードしておきました。バケットには run_id、owner、purpose、ttl のタグを付けています。
このセッションでは、作業ディレクトリの外にあるスキルのフォルダをエージェントが読めるように、--add-dir でスキルのフォルダを追加しています(付けなかった場合の結果は考察で触れます)。
claude --setting-sources project --settings headless-settings.json --add-dir ~/.claude/plugins/cache/agent-toolkit-for-aws/aws-core/1.1.0/skills/aws-ai-ml
新しいセッションで、次のように依頼しました。プロンプトは以下のとおりです。
s3://20261018-blog/input/support_tickets.csv(問い合わせチケットの CSV、500 行、欠損値あり)を scikit-learn で前処理する SageMaker Processing job を実行したいです。
前処理の内容:
- 欠損値の補完(数値列は中央値、カテゴリ列は最頻値)
- カテゴリ列の One-Hot エンコーディング、数値列の標準化
- resolved を目的変数として train/test を 8:2 に分割し、CSV で出力
条件:
- リージョン: ap-northeast-1
- 実行ロール: arn:aws:iam::<アカウント ID>:role/service-role/AmazonSageMaker-ExecutionRole-20230126T113346
- インスタンス: ml.m5.large を 1 台、最大実行時間 15 分
- 出力先: s3://20261018-blog/output/
- コードのアップロード先も s3://20261018-blog/ 配下にし、SageMaker のデフォルトバケットは作成しない
- ジョブにタグ run_id=20261018-blog, owner=blog, purpose=blog-verification を付与
- エンドポイント、IAM ロール、VPC、ドメイン、MLflow App は作成しない
まず計画を提示し、私が承認するまでジョブは起動しないでください。

エージェントは aws-ai-ml を読み込んだ後、processing-jobs/overview.md、コードテンプレート code_templates/script_processing.py、references/configuration.md を読み、ローカルの CSV で列を確認したうえで、次の計画を出しました。
この計画で進めてください。

考察
今回は、発表された対応領域のうち JumpStart のモデル推薦と Processing jobs を検証しました。SageMaker Studio JupyterLab のプリインストールと、エンドポイントを伴うデプロイ・推論最適化は検証していません。
プラグインを更新しても新しいスキルが入らない場合がある
今回の環境では、claude plugin update は version 1.1.0 のまま「最新」と判定し、aws-ai-ml は Training / Processing jobs の手順がない version 3 のままでした。アンインストールとインストールのやり直しで version 5 になりました。以前から aws-core を入れている場合は、SKILL.md の metadata.version か、references 配下に processing-jobs と training-jobs があるかを確認するとよいです。
スキルの手順が、エージェントの確認の順序と出力を決めている
モデル推薦では、Hub のスクリプトによる検索(752 件から 9 件)、ライセンスと EULA の確認、ホスティング構成ごとのトークン上限の比較が、model-selection の手順どおりに行われました。Processing job では、テンプレートに沿ったコード生成、イメージバージョンの固定、起動前の権限・クォータの確認が行われ、ジョブを起動する前に承認を求めて停止しました。
エージェントがスキルの reference を読めないと、スキルの手順は使われない
Processing job は、上記の前に一度、--add-dir を付けずに同じ依頼をしています。このときは、作業ディレクトリの外にあるスキルのフォルダに対する ls が dontAsk モードで拒否され、エージェントは processing-jobs の手順書を読まずに計画を立てました。その計画は、boto3 の create_processing_job を直接呼ぶ方式で、料金も「数円から十数円」と金額で見積もっており、手順書の内容(SDK v3 のテンプレートを使う、料金はリンクで示す)とは異なっていました。--add-dir でスキルのフォルダを読めるようにして新しいセッションでやり直したところ、上記のとおり手順書とテンプレートを読んだうえでの計画になりました。ヘッドレス実行や権限を絞った環境で使う場合は、スキルのフォルダを読み取れるようにしておく必要があります。
ドキュメントの記載の違い
2026 年 10 月 14 日時点で、JupyterLab のコーディングアシスタントのページには、AWSLabs のリポジトリ(awslabs/agent-plugins)からスキルを更新する手順が記載されています。また、公式ブログの npx skills add のパスは aws/agent-toolkit-for-aws/skills/aws-ai-ml ですが、リポジトリ上のスキルは skills/core-skills/aws-ai-ml にあり、SageMaker AI のインストール手順のページもこちらのパスです。インストールの際は、SageMaker AI のドキュメントのパスを確認してください。
今後は次の点に期待しています。
- プラグインの version 更新(
claude plugin updateで新しいスキルが入るようになること) - JupyterLab のページの手順が Agent Toolkit for AWS に合わせて更新されること
最後に
Agent Toolkit for AWS の aws-ai-ml スキルを Claude Code から使い、JumpStart のモデル推薦と Processing job の実行を試しました。エージェントは、Hub の検索とモデルの設定情報からインスタンスを選び、Processing job ではテンプレートに沿ったコードと起動前の確認を経てジョブを実行しました。今回の Processing job の料金は約 $0.0045 でした。
aws-ai-ml の SKILL.md では、Bedrock の基盤モデルの呼び出しや Bedrock Agents などはこのスキルの検証済みの手順の対象外とされています。同じ aws-core プラグインには amazon-bedrock スキルも含まれているため、両方のサービスにまたがる作業も 1 つのプラグインで扱えます。既に aws-core を入れている場合は、まずスキルの版を確認し、古ければ入れ直してから試してみてください。SageMaker Studio の JupyterLab でのプリインストールや推論最適化は、改めて検証したいと考えています。
合わせて読みたい










