AWS re:Invent 2025の4日目、こんなアップデートがしれっと出ていました。
Bedrockのモデルは通常、Converse APIを介して呼び出しますが、OpenAI API形式での呼び出しにも対応したとのこと。ドキュメントは以下です。
ただし、ドキュメント通りに実施してもうまく動かなかったので、試行錯誤して分かったポイントを共有します。
今回のアプデの詳細
OpenAI API形式のうち、最新のステートフルなResponses APIと、従来型のChat Completions APIがBedrockで使えるようになりました。
対応するモデルは、GPT-OSSやDeepSeekをはじめとするオープンウェイトの26種類。
そのうちResponses APIに対応するのは現在GPT-OSS 20/120Bのみ(Safeguard系は非対応)。
他はChat Completionsのみの対応です。
つまずきポイント
ドキュメント通りにAPIを叩くと、いくつか躓くポイントがあります。
ポイント1: Bedrock APIキー発行後にIAM権限追加が必要
BedrockのAPIキーを発行すると、IAM認証情報が発行されます。
例えば長期APIキーの場合、それに紐づくIAMユーザーが自動作成されますが、今回呼び出すBedrock Mantle(分散推論エンジン)のAPIを呼び出す権限がありません。
User: BedrockAPIKey-XXXX is not authorized to perform: bedrock-mantle:XXXXXXXX というエラーが表示されます。
そのため、以下のIAMポリシーを自分で追加する必要があります。
{
"Effect": "Allow",
"Action": "bedrock-mantle:*",
"Resource": "*"
}
ポイント2: APIのベースURLは末尾に /v1 が必要
ドキュメントを見ると、APIリクエスト時に環境変数として、APIキーの他に OPENAI_BASE_URL の指定が必要と記載されています。例は https://bedrock-mantle.us-east-1.api.aws となっています。
ただし、実際のエンドポイントには末尾に /v1 を付与する必要があります。
実行手順まとめ
- Bedrock APIキーを発行する
- 環境変数に以下の2件をexportする
-
OPENAI_API_KEY: Bedrock APIキーの値を設定 -
OPENAI_BASE_URL:https://bedrock-mantle.<リージョン>.api.aws/v1
-
- 以下のようなコードを実行
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="openai.gpt-oss-120b",
input=[{
"role": "user",
"content": "Xで話題の驚き屋って何?"
}]
)
print(response.output[0].content[0].text)
ベースURLは、環境変数ではなくクライアント定義に含めてもいいと思います。
client = OpenAI(
base_url="https://bedrock-mantle.us-east-1.api.aws/v1"
)