Bedrock Mantle の一部モデルでメトリクスが出ないので CloudTrail のデータイベントで補ってみた

Bedrock Mantle の一部モデルでメトリクスが出ないので CloudTrail のデータイベントで補ってみた

2026.06.16

はじめに

Claude Code や Codex に任せている作業のうち、定型的なものを安いモデルに振り分けられないかと考えて、Amazon Bedrock の Bedrock Mantle で Gemma 4 31B を試していました。

その後、どのくらい呼び出したかを確認しようと CloudWatch を開いたところ、このモデルのメトリクスが見当たりませんでした。調べてみると Bedrock Mantle ではモデルによってメトリクスを取得できるものとできないものがあり、取得できないモデルでも CloudTrail のデータイベントなら推論の記録を取得できました。同じことを確認したい人向けに、その手順を残しておきます。

メトリクスが取得できないモデル

まず、us-east-1 で利用できるモデルを一通り確認してみました。

2026 年 6 月時点で、us-east-1 の bedrock-mantle で GET /v1/models が返したのは 48 モデルでした。これらを呼び出した上で CloudWatch の AWS/BedrockMantle 名前空間を確認したところ、メトリクスが取得できたのは 41 モデル、できなかったのは 7 モデルでした。

7 モデルのうち 2 モデルは openai.gpt-5.5-2026-04-23 のような日付入りのスナップショット ID で、これらの分はエイリアス側 (openai.gpt-5.5) のメトリクスに合算されていました。これを差し引くと、実質的にメトリクスが取得できないのは次の 5 モデルでした。

  • anthropic.claude-opus-4-7
  • anthropic.claude-opus-4-8
  • google.gemma-4-31b
  • google.gemma-4-26b-a4b
  • google.gemma-4-e2b

いずれもごく最近追加されたモデルで、メトリクス対応が後追いになっているのかなと思います。

us-east-1 で確認できた 48 モデル ID (2026-06-15 時点)
  • anthropic.claude-haiku-4-5
  • anthropic.claude-opus-4-7
  • anthropic.claude-opus-4-8
  • deepseek.v3.1
  • deepseek.v3.2
  • google.gemma-3-12b-it
  • google.gemma-3-27b-it
  • google.gemma-3-4b-it
  • google.gemma-4-26b-a4b
  • google.gemma-4-31b
  • google.gemma-4-e2b
  • minimax.minimax-m2
  • minimax.minimax-m2.1
  • minimax.minimax-m2.5
  • mistral.devstral-2-123b
  • mistral.magistral-small-2509
  • mistral.ministral-3-14b-instruct
  • mistral.ministral-3-3b-instruct
  • mistral.ministral-3-8b-instruct
  • mistral.mistral-large-3-675b-instruct
  • mistral.voxtral-mini-3b-2507
  • mistral.voxtral-small-24b-2507
  • moonshotai.kimi-k2-thinking
  • moonshotai.kimi-k2.5
  • nvidia.nemotron-nano-12b-v2
  • nvidia.nemotron-nano-3-30b
  • nvidia.nemotron-nano-9b-v2
  • nvidia.nemotron-super-3-120b
  • openai.gpt-5.4
  • openai.gpt-5.4-2026-03-05
  • openai.gpt-5.5
  • openai.gpt-5.5-2026-04-23
  • openai.gpt-oss-120b
  • openai.gpt-oss-20b
  • openai.gpt-oss-safeguard-120b
  • openai.gpt-oss-safeguard-20b
  • qwen.qwen3-235b-a22b-2507
  • qwen.qwen3-32b
  • qwen.qwen3-coder-30b-a3b-instruct
  • qwen.qwen3-coder-480b-a35b-instruct
  • qwen.qwen3-coder-next
  • qwen.qwen3-next-80b-a3b-instruct
  • qwen.qwen3-vl-235b-a22b-instruct
  • writer.palmyra-vision-7b
  • zai.glm-4.6
  • zai.glm-4.7
  • zai.glm-4.7-flash
  • zai.glm-5

とは言え、業務で利用するとなるとこれでは困ります。監査の観点からも、誰がいつどのモデルを呼んだかを後から確認できる状態にしておく必要はあります。そこで、別の方法で記録を取ることにしました。

CloudTrail のデータイベントで記録

アプリケーション側でログを取る手も考えられますが、今回は公式ドキュメントにも記載されているように CloudTrail を使います。

https://docs.aws.amazon.com/bedrock/latest/userguide/logging-cloudtrail-mantle.html

CloudTrail の管理イベントはリソースの管理操作を対象とするもので、Mantle の推論呼び出しは記録されません。推論を 1 件ずつ残すにはデータイベントを使う必要があり、Bedrock Mantle の推論は CreateInference という API として呼ばれるため、これを捕捉すれば 1 件単位で記録できます。

データイベントの絞り込みは、高度なイベントセレクタで指定します。eventCategoryDataresources.typeAWS::BedrockMantle::ProjecteventNameCreateInference に絞り込みます。証跡やログ用 S3 バケットの作成は通常の CloudTrail と同じなので、セレクタの指定部分だけ抜き出しました。

aws cloudtrail put-event-selectors \
  --trail-name "bedrock-mantle-dataevents" \
  --region us-east-1 \
  --advanced-event-selectors '[
    {
      "Name": "Bedrock Mantle inference data events",
      "FieldSelectors": [
        { "Field": "eventCategory", "Equals": ["Data"] },
        { "Field": "resources.type", "Equals": ["AWS::BedrockMantle::Project"] },
        { "Field": "eventName", "Equals": ["CreateInference"] }
      ]
    }
  ]'

証跡のログ記録を開始したら、Gemma 4 を呼び出します。

記録されたイベントを確認する

少し時間を置いたら、S3 に出力されたログを確認してみましょう。メトリクスを取得できないモデルだったので、データイベントも記録されないかと危惧していましたが、実際には記録されていました。取得できたイベントは次のような中身です。

{
  "eventVersion": "1.11",
  "userIdentity": {
    "type": "AssumedRole",
    "principalId": "<PRINCIPAL_ID>:<SESSION_NAME>",
    "arn": "arn:aws:sts::<ACCOUNT_ID>:assumed-role/<ROLE_NAME>/<SESSION_NAME>",
    "accountId": "<ACCOUNT_ID>",
    "accessKeyId": "<ACCESS_KEY_ID>",
    "sessionContext": {
      "sessionIssuer": {
        "type": "Role",
        "principalId": "<PRINCIPAL_ID>",
        "arn": "arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>",
        "accountId": "<ACCOUNT_ID>",
        "userName": "<ROLE_NAME>"
      },
      "attributes": {
        "creationDate": "2026-06-14T23:32:47Z",
        "mfaAuthenticated": "true"
      }
    }
  },
  "eventTime": "2026-06-15T06:24:20Z",
  "eventSource": "bedrock-mantle.amazonaws.com",
  "eventName": "CreateInference",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "<SOURCE_IP>",
  "userAgent": "curl/8.7.1",
  "requestParameters": {
    "service_tier": "default",
    "callWithBearerToken": true,
    "bearerTokenType": "SHORT_TERM",
    "model": "google.gemma-4-31b",
    "stream": false
  },
  "responseElements": null,
  "requestID": "<REQUEST_ID>",
  "eventID": "<EVENT_ID>",
  "readOnly": false,
  "resources": [
    {
      "accountId": "<ACCOUNT_ID>",
      "type": "AWS::BedrockMantle::Project",
      "ARN": "arn:aws:bedrock-mantle:us-east-1:<ACCOUNT_ID>:project/default"
    }
  ],
  "eventType": "AwsApiCall",
  "managementEvent": false,
  "recipientAccountId": "<ACCOUNT_ID>",
  "eventCategory": "Data",
  "tlsDetails": {
    "tlsVersion": "TLSv1.3",
    "cipherSuite": "TLS_AES_128_GCM_SHA256",
    "clientProvidedHostHeader": "bedrock-mantle.us-east-1.api.aws"
  }
}

requestParameters.modelgoogle.gemma-4-31b が入っていて、userIdentity からどの IAM ロールが呼び出したかも分かります。今回は短命の Bearer トークンを使っていたので、bearerTokenTypeSHORT_TERM になっています。

なお、記録されるのはリクエスト側の情報だけで、responseElementsnull になります。そのため、いつ・誰が・どのモデルをどんなパラメータ (streamservice_tier など) で呼んだかは分かるものの、トークン数や課金額、プロンプトの内容までは残りません。

おわりに

Bedrock Mantle はまだ新しく、現時点でメトリクスを取得できないモデルについては、CloudTrail のデータイベントが使用状況や監査の記録を取る必要があります。メトリクスで見られるようになればそちらのほうが手軽なので、データイベントは状況に応じて使い分けるものとして考えています。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事