Lambda MicroVMs × Claude Platform on AWSでClaude Managed Agentsサンドボックスを起動してみた
リテールアプリ共創部@大阪の岩田です。
2026年6月22日付けでローンチされたLambda MicroVMsですが、ユースケースの1つとしてコーディングアシスタントが紹介されています。
実際Lambda MicroVMsのドキュメントを見に行くと、ClaudeのManaged Agents向けのサンドボックス環境としてLambda MicroVMsを利用する仕組みが紹介されています。
Using Lambda MicroVMs as a sandbox for Claude Managed Agents - AWS Lambda
遅ればせながら、本ブログでLambda MicroVMs上にClaudeのManaged Agents向けのサンドボックス環境を構築するサンプルを試してみます。
アーキテクチャ概要
今回構築する環境は以下のようなアーキテクチャになります。

※ 画像は https://github.com/aws-samples/sample-lambda-microvm-claude-managed-agents から引用
処理の流れは以下のようになります。
- Claudeのコンソールからセッションを開始するとウェブフックでAPI GWにリクエストが飛ぶ
- API GWからLambdaが起動、Lambdaはウェブフックの署名を検証し、問題なければMicroVMを起動する
- 起動したMicroVM上のワーカーがワークキューに積まれたアイテムを取得・処理してレスポンスをAnthropicのコントロールプレーンに返却。全てのアイテムが処理できたらMicroVMを終了
こちらのプロジェクトはあくまでも最小限のサンプルとなっており、ワークキューから取得したアイテムの処理が完了するたびにMicroVMを終了する仕様になっています。そのため、Lambda MicroVMsのメリットである中断・再開可能という特性を活かしきれておらず、実際に業務で利用したい場合はさらなる作り込みが必要になります。
やってみる
それではさっそくやっていきましょう。以下のリポジトリで公式のサンプルが提供されているので、こちらを利用して環境構築していきます。
ただ、私が普段使いしているClaudeの環境に対しては管理者権限を持っていないため、Claude Platform on AWSを使って検証用の組織を作成し、その組織内で必要なリソースを作っていくことにします。Claude Platform on AWSを利用する場合は、各種APIの呼び出しにSIGv4の署名を利用する形になるため、上記リポジトリの内容を一部改変して利用していきます。
ソースコードの準備
基本は aws-samples/sample-lambda-microvm-claude-managed-agents のソースコードを利用しますが、Claude Platform on AWS向けに一部のコードを修正していきます。なお、今回ベースにしたのはコミットハッシュaff9237f387ec2c5debae0f08bba5c526fe6b9edのコードです。
オリジナルの実装はSSM ParameterStoreから環境キーを取得して利用するのですが、Claude Platform on AWSではSigV4の署名で各種のAPIが呼び出せるため、環境キーに関連するコードを削除します。
まずClaudeのWeb Hooksession.status_run_startedを処理してMicroVMを起動するLambda関数のコードを修正します。
@@ -176,7 +176,6 @@ def _load_config() -> LauncherConfig:
return LauncherConfig(
environment_id=os.environ["ANTHROPIC_ENVIRONMENT_ID"],
image_identifier=os.environ["MICROVM_IMAGE_IDENTIFIER"],
- environment_key_param_name=os.environ["ENVIRONMENT_KEY_PARAM_NAME"],
execution_role_arn=os.environ["MICROVM_EXECUTION_ROLE_ARN"],
aws_region=region,
signing_param_name=os.environ.get("SIGNING_PARAM_NAME"),
後ほど紹介するMicroVM側の実装に合わせて、MicroVM起動時のペイロードにワークスペースIDを含める修正も追加します。
@@ -23,8 +23,8 @@ def build_run_hook_payload(event: WebhookEvent, cfg: LauncherConfig) -> str:
"""Build the run hook payload JSON string for a started session."""
session: dict[str, Any] = {
"ANTHROPIC_SESSION_ID": event.session_id,
+ "ANTHROPIC_WORKSPACE_ID": event.workspace_id,
"ANTHROPIC_ENVIRONMENT_ID": cfg.environment_id,
- "ENVIRONMENT_KEY_PARAM_NAME": cfg.environment_key_param_name,
"AWS_REGION": cfg.aws_region,
}
if cfg.base_url is not None:
@@ -17,7 +17,6 @@ class LauncherConfig:
environment_id: str
image_identifier: str
- environment_key_param_name: str
execution_role_arn: str
aws_region: str
signing_param_name: Optional[str] = None
@@ -33,6 +32,7 @@ class WebhookEvent:
event_id: str
data_type: str
session_id: str
+ workspace_id: str
@classmethod
def from_payload(cls, payload: dict[str, Any]) -> "WebhookEvent":
@@ -41,4 +41,5 @@ class WebhookEvent:
event_id=payload.get("id", ""),
data_type=data.get("type", ""),
session_id=data.get("id", ""),
+ workspace_id=data.get("workspace_id", ""),
)
これでMicroVM起動時のペイロードからENVIRONMENT_KEY_PARAM_NAMEが削除され、代わりにANTHROPIC_WORKSPACE_IDが渡されるようになります。
続いてMicroVMのベースイメージに追加するjsのコードを修正します。前述の通りClaude Platform on AWSの場合はSigV4の署名で各種APIの呼び出しが可能なので、それに合わせて不要コードの削除等を行います。
まずSDKを通常のAnthropicクライアントSDKからClaude Platform on AWS向けのSDKに変更します。
@@ -9,7 +9,7 @@
},
"dependencies": {
"@anthropic-ai/sdk": "^0.104.1",
- "@aws-sdk/client-lambda-microvms": "^3.600.0",
- "@aws-sdk/client-ssm": "^3.600.0"
+ "@anthropic-ai/aws-sdk": "^0.7.0",
+ "@aws-sdk/client-lambda-microvms": "^3.600.0"
}
}
続いてメインとなるMicroVM上のワーカー実装の修正です。
差分の全体は以下の通りです。
@@ -17,9 +17,8 @@
// the idle policy is only the fallback if the call can't be made.
import http from "node:http";
-import { SSMClient, GetParameterCommand } from "@aws-sdk/client-ssm";
import { LambdaMicrovmsClient, TerminateMicrovmCommand } from "@aws-sdk/client-lambda-microvms";
-import Anthropic from "@anthropic-ai/sdk";
+import Anthropic from "@anthropic-ai/aws-sdk";
import { WorkPoller, EnvironmentWorker } from "@anthropic-ai/sdk/helpers/beta/environments";
// Hook server config.
@@ -35,38 +34,24 @@ async function readBody(req) {
return Buffer.concat(chunks).toString("utf-8");
}
-async function fetchEnvironmentKey(parameterName, region) {
- const client = new SSMClient({ region });
- const result = await client.send(
- new GetParameterCommand({ Name: parameterName, WithDecryption: true }),
- );
- const value = result.Parameter?.Value;
- if (!value) {
- throw new Error(`SSM parameter ${parameterName} has no value`);
- }
- return value;
-}
-
// Handle exactly the session named in the dispatch.
async function handleSession(dispatch) {
const sessionId = dispatch.ANTHROPIC_SESSION_ID;
const environmentId = dispatch.ANTHROPIC_ENVIRONMENT_ID;
- const parameterName = dispatch.ENVIRONMENT_KEY_PARAM_NAME;
- const region = dispatch.AWS_REGION;
- const baseURL = dispatch.ANTHROPIC_BASE_URL || undefined;
- const environmentKey = await fetchEnvironmentKey(parameterName, region);
- const client = new Anthropic({ authToken: environmentKey, baseURL });
- const worker = new EnvironmentWorker({ client, environmentId, environmentKey, workdir: "/workspace" });
+ const client = new Anthropic({
+ workspaceId: dispatch.ANTHROPIC_WORKSPACE_ID,
+ });
+ const worker = new EnvironmentWorker({ client, environmentId, workdir: "/workspace", environmentKey: 'dummy' });
console.log(`worker: looking for work item for session ${sessionId}`);
const poller = new WorkPoller({
client,
environmentId,
- environmentKey,
reclaimOlderThanMs: 2000,
drain: true,
autoStop: false,
+ environmentKey: 'dummy'
});
for await (const work of poller) {
@@ -74,7 +59,7 @@ async function handleSession(dispatch) {
continue;
}
console.log(`worker: handling session ${sessionId} (work ${work.id})`);
- await worker.handleItem({ workId: work.id, environmentId, sessionId, environmentKey });
+ await worker.handleItem({ workId: work.id, environmentId, sessionId });
console.log(`worker: session ${sessionId} complete`);
return;
}
@anthropic-ai/aws-sdkのクライアントクラスを利用する場合、ワークスペースIDが必須になるため、MicroVM起動時のペイロードで渡されたワークスペースIDをコンストラクタにセットするよう修正しています。また、コンストラクタに環境キーをセットする必要が無くなったので、SSMパラメータストアから環境キーを取得する処理も丸々削除しています。
import Anthropic from "@anthropic-ai/aws-sdk";
//...略
const client = new Anthropic({
workspaceId: dispatch.ANTHROPIC_WORKSPACE_ID,
});
EnvironmentWorkerとWorkPollerのコンストラクタにはenvironmentKey: 'dummy'を渡すようにしています。
const worker = new EnvironmentWorker({ client, environmentId, workdir: "/workspace", environmentKey: 'dummy' });
console.log(`worker: looking for work item for session ${sessionId}`);
const poller = new WorkPoller({
client,
environmentId,
reclaimOlderThanMs: 2000,
drain: true,
autoStop: false,
environmentKey: 'dummy'
});
各種APIの呼び出しにはSigV4の署名を使うのでenvironmentKeyは不要なのですが、environmentKeyが設定されていないとSDKが内部的に呼び出すcopyClientForHelperでエラーになるため、ダミーの文字列を渡すことで回避しています。
最後にSAMテンプレートです。
こちらも修正箇所は環境キーに関連する記述の削除に加え、MicroVMの実行ロールからClaude Platform on AWSのAPIを呼び出すための権限を追加しています。
diff --git a/template.yaml b/template.yaml
@@ -26,15 +26,6 @@ Parameters:
Default: claude-self-hosted-worker
Description: Name of the built MicroVM image the launcher runs (resolved to a full ARN below).
- EnvironmentKeyParamName:
- Type: String
- Default: /claude-microvm-sandbox/anthropic-environment-key
- Description: >-
- Name of the SSM Parameter Store SecureString holding the Anthropic
- environment key. CloudFormation cannot create SecureString parameters, so
- create this parameter out-of-band after deploy (see README) with
- `aws ssm put-parameter --type SecureString`.
-
SigningParamName:
Type: String
Default: /claude-microvm-sandbox/anthropic-webhook-signing-secret
@@ -67,9 +58,6 @@ Resources:
# RunMicroVm requires the full image ARN, not a bare name. Build it
# from the configured name + this account/region.
MICROVM_IMAGE_IDENTIFIER: !Sub "arn:${AWS::Partition}:lambda:${AWS::Region}:${AWS::AccountId}:microvm-image:${MicroVmImageIdentifier}"
- # Name of the SSM SecureString holding the environment key. Passed by
- # *reference* (name only) into the MicroVM; the launcher never reads it.
- ENVIRONMENT_KEY_PARAM_NAME: !Ref EnvironmentKeyParamName
MICROVM_EXECUTION_ROLE_ARN: !GetAtt MicroVmExecutionRole.Arn
# Webhook signature verification happens in-process (no API GW authorizer).
SIGNING_PARAM_NAME: !Ref SigningParamName
@@ -370,24 +358,9 @@ Resources:
Action:
- "sts:AssumeRole"
- "sts:TagSession"
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AnthropicSelfHostedEnvironmentAccess
Policies:
- - PolicyName: read-environment-key
- PolicyDocument:
- Version: "2012-10-17"
- Statement:
- # Read only the environment-key SSM SecureString, scoped to its ARN.
- - Effect: Allow
- Action: "ssm:GetParameter"
- Resource: !Sub "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter${EnvironmentKeyParamName}"
- # kms:Decrypt for the SecureString KMS key, bounded to SSM and to
- # this one parameter via the PARAMETER_ARN encryption context.
- - Effect: Allow
- Action: "kms:Decrypt"
- Resource: "*"
- Condition:
- StringEquals:
- kms:ViaService: !Sub "ssm.${AWS::Region}.amazonaws.com"
- kms:EncryptionContext:PARAMETER_ARN: !Sub "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter${EnvironmentKeyParamName}"
- PolicyName: self-terminate
PolicyDocument:
Version: "2012-10-17"
@@ -412,6 +385,29 @@ Resources:
Resource:
- !Sub "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/microvms/${ImageNamePrefix}*"
- !Sub "arn:${AWS::Partition}:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/microvms/${ImageNamePrefix}*:*"
+ - PolicyName: anthropic-inference-get-token
+ PolicyDocument:
+ Version: "2012-10-17"
+ Statement:
+ - Effect: Allow
+ Action:
+ - "sts:GetWebIdentityToken"
+ Resource: "*"
+ Condition:
+ ForAnyValue:StringEquals:
+ sts:IdentityTokenAudience:
+ - "https://api.anthropic.com"
+ - "https://platform.claude.com"
+ StringEquals:
+ aws:CalledViaLast: "aws-external-anthropic.amazonaws.com"
+ - PolicyName: anthropic-inference-tag-token
+ PolicyDocument:
+ Version: "2012-10-17"
+ Statement:
+ - Effect: Allow
+ Action:
+ - "sts:TagGetWebIdentityToken"
+ Resource: "*"
# --- MicroVM image build prerequisites ----------------------------------
# These support building the MicroVM image (a separate CLI step), not the
@@ -489,9 +485,6 @@ Outputs:
MicroVmExecutionRoleArn:
Description: Execution role the MicroVM assumes to read the environment key.
Value: !GetAtt MicroVmExecutionRole.Arn
- EnvironmentKeyParamName:
- Description: Create this SSM SecureString parameter with the Anthropic environment key.
- Value: !Ref EnvironmentKeyParamName
SigningParamName:
Description: Create this SSM SecureString parameter with the Anthropic webhook signing secret.
Value: !Ref SigningParamName
組織側の準備
ソースコードが準備できたので、今度はClaude Platform上で作業していきます。
まずホスティングタイプにセルフホスト型を指定して「環境」を作成します。

「環境」が作成できたら後ほど利用するためにIDを控えておきましょう。

続いてエージェントを作成します。今回は特に凝ったことはしないので、空のテンプレートをもとに適当な設定で作成しています。

デプロイする
準備ができたのでCFnのスタックをデプロイして必要なリソースを一式作成していきます。以下のコマンドでSAM CLIからデプロイします。
sam build
sam deploy --guided --capabilities CAPABILITY_NAMED_IAM --parameter-overrides "AnthropicEnvironmentId=<作成した環境のID>"
対話形式でパラメータを聞かれるので入力していきます。基本はデフォルト値をそのまま利用していますが、後で実行するシェルスクリプトを楽にするためCFnのスタック名はclaude-microvm-sandboxとしています。
Configuring SAM deploy
======================
Looking for config file [samconfig.toml] : Not found
Setting default arguments for 'sam deploy'
=========================================
Stack Name [sam-app]: claude-microvm-sandbox
AWS Region [ap-northeast-1]: us-east-1
Parameter ProjectName [claude-microvm-sandbox]:
Parameter ImageNamePrefix [claude-self-hosted-worker]:
Parameter AnthropicEnvironmentId [作成したEnvironmentのID]:
Parameter MicroVmImageIdentifier [claude-self-hosted-worker]:
Parameter SigningParamName [/claude-microvm-sandbox/anthropic-webhook-signing-secret]:
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]:
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]:
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]:
LauncherFunction has no authentication. Is this okay? [y/N]: y
Save arguments to configuration file [Y/n]:
SAM configuration file [samconfig.toml]:
SAM configuration environment [default]:
デプロイできたらOutputsを確認しましょう。WebhookUrlにAPI GWのエンドポイントが出力されているのでこれを控えます。

ウェブフック関連の設定
再度Claude Platformに戻り、ウェブフックエンドポイントを作成します。
URLには先程控えたAPI GWのエンドポイントを、サブスクライブするイベントにはsession.status_run_startedを指定します。

作成が完了すると署名シークレットが発行されるので値を控えておきます。

控えたシークレット値はSSM パラメータストアにSecureStringとして登録します。これまでの手順通りに構築していればパラメータ名は/claude-microvm-sandbox/anthropic-webhook-signing-secretです。
※パラメータ名はCFnスタックの出力 SigningParamName からも確認できます。

MicroVMのイメージを登録
MicroVMのイメージを作成するためシェルスクリプト./src/scripts/build-image.shを実行します。以下のように出力されればOKです。
※何度か検証を繰り返したので、MicroVMのイメージはバージョン5になっています。
Resolving artifact bucket and build role from stack 'claude-microvm-sandbox'...
Discovering a managed base image via list-managed-microvm-images...
Using base image: arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1
Packaging /Users/iwata.tomoya/...略/sample-lambda-microvm-claude-managed-agents/src/microvm-image -> /var/folders/62/l795fhb51jgfcd1vlh1rp_sh0000gn/T/tmp.GpXZluwoFe/app.zip...
Uploading to s3://claude-microvm-sandbox-artifacts-<AWSアカウントID>-us-east-1/deployments/app-20260909-171336.zip...
upload: ../../../../../../../../var/folders/62/l795fhb51jgfcd1vlh1rp_sh0000gn/T/tmp.GpXZluwoFe/app.zip to s3://claude-microvm-sandbox-artifacts-<AWSアカウントID>-us-east-1/deployments/app-20260909-171336.zip
Checking for an existing MicroVM image named 'claude-self-hosted-worker'...
Found existing MicroVM image 'claude-self-hosted-worker' (arn:aws:lambda:us-east-1:<AWSアカウントID>:microvm-image:claude-self-hosted-worker). Updating...
{
"imageArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:microvm-image:claude-self-hosted-worker",
"name": "claude-self-hosted-worker",
"state": "UPDATING",
"latestActiveImageVersion": "4.0",
"createdAt": "2026-09-08T18:46:41.129000+09:00",
"baseImageArn": "arn:aws:lambda:us-east-1:aws:microvm-image:al2023-1",
"baseImageVersion": "1.0",
"buildRoleArn": "arn:aws:iam::<AWSアカウントID>:role/claude-microvm-sandbox-build-role",
"codeArtifact": {
"uri": "s3://claude-microvm-sandbox-artifacts-<AWSアカウントID>-us-east-1/deployments/app-20260909-171336.zip"
},
"egressNetworkConnectors": [
"arn:aws:lambda:us-east-1:aws:network-connector:aws-network-connector:INTERNET_EGRESS"
],
"resources": [
{
"minimumMemoryInMiB": 2048
}
],
"hooks": {
"port": 9000,
"microvmHooks": {
"run": "ENABLED",
"runTimeoutInSeconds": 5,
"resume": "ENABLED",
"resumeTimeoutInSeconds": 5,
"suspend": "ENABLED",
"suspendTimeoutInSeconds": 5,
"terminate": "ENABLED",
"terminateTimeoutInSeconds": 5
},
"microvmImageHooks": {
"ready": "ENABLED",
"readyTimeoutInSeconds": 300,
"validate": "ENABLED",
"validateTimeoutInSeconds": 300
}
},
"updatedAt": "2026-09-09T17:13:51.618000+09:00",
"imageVersion": "5.0"
}
Image build started. Monitor build logs in CloudWatch:
/aws/lambda/microvms/claude-self-hosted-worker
The image transitions CREATING -> CREATED on success.
しばらく待つとMicroVMイメージのビルドが完了し、ステータスが成功に遷移するはずなので確認しておきましょう。

いざセッションを作成
準備ができたのでセッションを作成し、MicroVM上でBashツールを実行してみましょう!
まずはセッションを作成します。

作成したセッション内でBashツールでuname -aとcat /proc/cmdlineを実行してと依頼してみました。

しばらく待つとウェブフック処理用のLambdaにログが出力され、MicroVMが起動されました。
INIT_START Runtime Version: python:3.14.mainline.v63 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:dcc254f24e53b310604e77daf69eb00ee324eb039af7bf7cbfca2e47540298d3
START RequestId: 39f830b5-998f-4077-aeee-f80a08530572 Version: $LATEST
{
"level": "INFO",
"location": "_launch_and_dispatch:117",
"message": "launched microvm_id=microvm-df4bf75a-e323-330c-9ae4-ae1a78abc31d for session_id=sesn_01KfCoXmJhHmQMRH6rG2jnWZ",
"timestamp": "2026-09-09 08:22:32,306+0000",
"service": "claude-microvm-sandbox-launcher",
"cold_start": true,
"function_name": "claude-microvm-sandbox-launcher",
"function_memory_size": "1024",
"function_arn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:claude-microvm-sandbox-launcher",
"function_request_id": "39f830b5-998f-4077-aeee-f80a08530572",
"xray_trace_id": "1-6aa11743-5010e21f4071f04450e2bd16"
}
END RequestId: 39f830b5-998f-4077-aeee-f80a08530572
REPORT RequestId: 39f830b5-998f-4077-aeee-f80a08530572 Duration: 1099.73 ms Billed Duration: 4305 ms Memory Size: 1024 MB Max Memory Used: 170 MB Init Duration: 3204.61 ms
XRAY TraceId: 1-6aa11743-5010e21f4071f04450e2bd16 Sampled: true
MicroVM側のログです。正常に起動してセッションを処理していることが分かります。
worker: looking for work item for session sesn_01KfCoXmJhHmQMRH6rG2jnWZ
(node:1) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
worker: handling session sesn_01KfCoXmJhHmQMRH6rG2jnWZ (work sesn_01KfCoXmJhHmQMRH6rG2jnWZ)
worker: session sesn_01KfCoXmJhHmQMRH6rG2jnWZ complete
(node:1) Warning: NodeVersionSupportWarning: The AWS SDK for JavaScript (v3)
versions published after the first week of January 2027
will require node >=22. You are running node v18.12.1.
To continue receiving updates to AWS services, bug fixes,
and security updates please upgrade to node >=22.
More information can be found at: https://a.co/c895JFp
worker: requested termination of microvm microvm-df4bf75a-e323-330c-9ae4-ae1a78abc31d
ログに出力されていたMicroVMのIDをもとにマネコンを確認してみます。

正常に起動していたことが分かります。
Claudeプラットフォームの方に戻ると、先程のBashツールの呼び出しが正常に終了していました。

uname -aの実行結果は以下の通りでした。
Linux localhost 6.1.166-24.303.amzn2023.aarch64 #1 SMP Wed Mar 25 10:39:29 UTC 2026 aarch64 aarch64 aarch64 GNU/Linux
/proc/cmdlineについては以下のようなコメントが返ってきました。
この起動パラメータから、軽量なマイクロVM(サンドボックス環境)のような構成であることが読み取れます。主な特徴として、
overlay_root=vdb + init=/sbin/overlay-init.sh:オーバーレイファイルシステムで起動
modules_disabled=1, kexec_load_disabled=1:カーネルモジュールロードやkexecが無効化されたセキュリティ強化構成
damon_reclaim.*:DAMON(Data Access MONitor)によるメモリリクレーム機能が有効
pci=off:PCIデバイスなし(最小構成のVM)セキュリティやリソース管理を意識した、サンドボックス用の軽量VM環境と考えられます。
確かに当たっています!
参考までにセルフホスト型ではないクラウド型の環境で同様の指示をした結果は以下でした。
uname -aの実行結果はこちらです。
Linux vm 6.18.44-fc-v24 #1 SMP PREEMPT_DYNAMIC @0 x86_64 x86_64 x86_64 GNU/Linux
続いて cat /proc/cmdlineの実行結果です。
console=ttyS0 reboot=k panic=1 nomodule random.trust_cpu=1 ipv6.disable=1 swiotlb=noforce rdinit=/process_api -- --firecracker-init --addr 0.0.0.0:2024 --max-ws-buffer-size 32768 --block-local-connections --listen-vsock-port 2024 --log-vsock-port 5002
カーネル引数からFirecracker上で稼働しているのが分かって面白いですね。
Sonnetさんからも以下のようなコメントが得られました。
これから、このマシンは Firecracker マイクロVM(軽量仮想化技術)上で動作していることが分かります。カーネルバージョンは
6.18.44-fc-v24("fc" は Firecracker を示唆)、rdinit=/process_apiで起動時に専用のプロセス管理プログラムが実行され、vsock経由でAPI(ポート2024)やログ(ポート5002)と通信する構成になっています。
おまけ~サンドボックス環境からAWSのリソースにアクセスしてみる~
せっかくLambda MicroVMs上でサンドボックス環境が起動できたので、IAMロールの恩恵が受けられることも確認してみました。
MicroVMイメージビルド用のDockerfileにAWS CLIのインストール処理を追加、SAMテンプレートも修正してMicroVM用のIAMロールにDynamoDBのスキャンの権限を追加した後にawscliでDynamoDBのテーブルclaude-microvm-sandbox-idempotencyをスキャンしてみてと依頼してみました。結果は以下の通り、無事にDynamoDBのテーブルにアクセスできていました。

まとめ
Lambda MicroVMsとClaude Platform on AWSを使ってClaude Managed Agentsのサンドボックスを起動してみました。Anthropicが管理する環境を使う場合と比較すると、MicroVMに割り当てられたIAMロールが使えるというのはなかなか面白いポイントだと思います。アイデア次第ですが、色々とできることが多そうなので、選択肢として覚えておくと良いのではないでしょうか。









