本サイトでは、文章の一部の生成系AIを活用しています。また、一部の記事にはアフィリエイトリンクを設定しています。

はじめに

AWS Bedrockでは、ClaudeだけでなくOpenAIのGPTモデルも利用できます。 本記事では、BedrockのClaude・GPTモデルを呼び出すときに知っておきたい2つのエンドポイントの違い、必要なIAM権限、そしてPythonのサンプルコードを紹介します。


1. Bedrockの2つのエンドポイント

Bedrockには2つのエンドポイントがあります。

  • 通常のBedrock: bedrock-runtime
  • Bedrock Mantle: bedrock-mantle

Bedrock Mantleとは

Amazon Bedrock Mantleは、OpenAIやAnthropic互換のAPIを利用して最新モデルをスムーズに実行できるよう最適化された、Amazon Bedrockの分散推論エンジンおよび専用コンソール体験です。

従来のBedrockとの最大の違いは、AWS固有の仕様から解放され、OpenAIやAnthropicのコードをそのまま持ち込めるようになった点です。 従来はAWS独自の仕様に合わせるため、boto3などを使って複雑なレスポンスのパース処理(JSONの解析など)を書く必要がありました。

  • OpenAI/Anthropic互換APIの利用: 既存のOpenAI SDKやAnthropic SDKのコードから、ベースURLとAPIキーを書き換えるだけで、そのままBedrock上のモデルを呼び出せる

モデルID指定の違い

Mantleでは、global.openai.gpt-6-luna の global. 部分を外し、openai.gpt-6-luna のようにモデルIDを指定する必要があります。 この点が通常のBedrockと異なります。


2. IAMに付与すべき権限

ユーザーグループを作成し、対象のユーザーグループにBedrockのAPIを実行する権限を付与します。 必要な権限は、以下の組み込みポリシーです。

ポリシー 用途
AmazonBedrockLimitedAccess 通常のBedrockを採用する場合に必要。Bedrockへの限定的なアクセス権で、一般的なAPI呼び出し(bedrock:InvokeModel)やモデル一覧取得などが許可されますが、利用可能なモデルや機能は制限される場合があります
AmazonBedrockMantleInferenceAccess Mantleを使用する場合に必要
AmazonBedrockMarketplaceAccess AWS Marketplace経由で提供されるモデルのサブスクリプション関連の権限。GPTなどMarketplaceモデルを使う場合、初回に必要

3. 設定手順

ユーザーグループにポリシーを付与する

ユーザーグループを作成し、アプリが使用する上記の組み込みポリシーを付与します。

IAMユーザーグループにBedrock関連のポリシーを付与する画面

ユーザーを作成しアクセスキーを発行する

ユーザーグループ内にユーザーを作成し、作成したユーザーのアクセスキーを作成します。

IAMユーザーのアクセスキーを作成する画面

発行されたアクセスキーIDとシークレットアクセスキーをコピーし、環境変数AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY に設定します。
アクセスキーは漏えいすると不正利用されるため、ソースコードへの直書きやGitへのコミットは避けてください。


4. サンプルコード

GPTモデルをBedrock-Mantleで使用する

Bedrockの bedrock-mantle エンドポイントはOpenAI互換のため、OpenAI SDKをそのまま使えます。 認証は次の2通りです。

A. Bedrock APIキーを使う場合(最小構成)

OpenAI SDKをインストールします。

pip install -U openai

認証用の環境変数を設定します。

export OPENAI_BASE_URL="https://bedrock-mantle.us-east-2.api.aws/openai/v1"
export OPENAI_API_KEY="<BEDROCK_API_KEY>"
export BEDROCK_OPENAI_MODEL_ID="openai.gpt-5.5"

BedrockのGPT-5.5モデルを呼び出すPythonのサンプルコードです。

import os
from openai import OpenAI

client = OpenAI(
    base_url=os.environ["OPENAI_BASE_URL"],
    api_key=os.environ["OPENAI_API_KEY"],
)

response = client.responses.create(
    model=os.environ["BEDROCK_OPENAI_MODEL_ID"],
    input=[
        {
            "role": "developer",
            "content": "You are a software engineer with excellent AWS cloud knowledge. Be concise and practical.",
        },
        {
            "role": "user",
            "content": "Design a distributed architecture on AWS in Python that should support 100k requests per second across multiple geographic regions.",
        },
    ],
    reasoning={"effort": "medium"},
    text={"verbosity": "low"},
)

print(response.output_text)

ClaudeモデルをBedrock-runtimeで使用する

Anthropic SDKのBedrock対応版をインストールします。

pip install anthropic[bedrock]

認証はキーをコードに明示せず、AWSの標準認証情報チェーンに任せます。 環境変数(AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN)、AWS_PROFILE、IAMロールなどが使えます。

MODEL_ID の global.anthropic.claude-sonnet-5 はBedrockの推論プロファイルIDです。

非ストリーミング

import asyncio

from anthropic import AsyncAnthropicBedrock

REGION = "us-east-2"
MODEL_ID = "global.anthropic.claude-sonnet-5"  # Bedrock のモデルID(推論プロファイル)


async def main() -> None:
    client = AsyncAnthropicBedrock(aws_region=REGION)

    response = await client.beta.messages.create(
        model=MODEL_ID,
        max_tokens=1000,
        system="あなたは親切なアシスタントです。",
        messages=[
            {"role": "user", "content": [{"type": "text", "text": "こんにちは"}]},
        ],
    )

    print(response.content[0].text)
    print(response.usage)  # input_tokens / output_tokens など


asyncio.run(main())

ストリーミング

stream=True を渡し、返ってきたイベントを async for で処理します。

stream = await client.beta.messages.create(
    model=MODEL_ID,
    max_tokens=1000,
    messages=[{"role": "user", "content": [{"type": "text", "text": "こんにちは"}]}],
    stream=True,
)
async for event in stream:
    if event.type == "content_block_delta" and event.delta.type == "text_delta":
        print(event.delta.text, end="", flush=True)

まとめ

  • Bedrockには通常の bedrock-runtime と、OpenAI/Anthropic互換の bedrock-mantle の2つのエンドポイントがある
  • Mantleでは既存のOpenAI SDK・Anthropic SDKのコードを、ベースURLと認証情報の変更だけで流用できる
  • MantleのモデルIDは global. を外して指定する
  • IAMには、利用するエンドポイントに応じて AmazonBedrockLimitedAccess / AmazonBedrockMantleInferenceAccess を、GPTなどMarketplaceモデルの初回利用時は AmazonBedrockMarketplaceAccess を付与する

参考リンク