Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Amazon Bedrock

最終更新 Markdown で表示Agent セットアップ

Amazon Bedrock では、基盤モデルを使って生成 AI アプリケーションを構築し、スケールできます。

エンドポイント

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock

前提条件

Amazon Bedrock へリクエストを送るときは、次が必要です。

  • AI Gateway のアカウント ID
  • AI Gateway のゲートウェイ名
  • Amazon Bedrock の権限を持つ AWS 認証情報(accessKeyIdsecretAccessKeyregion
  • 使う Amazon Bedrock モデルの名前

URL の構造

Amazon Bedrock へリクエストを送るときは、現在使っている URL の https://bedrock-runtime.us-east-1.amazonaws.com/https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/ に置き換え、続けて使うモデルを付けます。

たとえば us-east-1 で Anthropic Claude モデルを呼び出す場合:

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke

Amazon Bedrock での認証

Amazon Bedrock は、API リクエストの認証に AWS Signature Version 4 (SigV4) を使います。単純な API キーを使う OpenAI や Anthropic などと違い、AWS では各リクエストを認証情報で暗号署名する必要があります。

この複雑さは AI Gateway が処理します。BYOK で AWS 認証情報を保存すると、ゲートウェイは AWS へ転送する前に各リクエストへ自動で署名します。

認証方法の比較

方法 cf-aig-authorization ヘッダー Authorization ヘッダー 署名
BYOK(推奨) Bearer {CF_AIG_TOKEN} 不要 ゲートウェイが自動で署名します
クライアント側での署名 Bearer {CF_AIG_TOKEN} 事前署名済みの AWS ヘッダー aws4fetch または AWS SDK で署名します

オプション 1: BYOK(推奨)

推奨する方法は、AI Gateway の Bring Your Own Keys(BYOK) で AWS 認証情報を保存することです。認証情報を安全に保てて、クライアント側でのリクエスト署名も不要になります。

  1. Cloudflare ダッシュボードで AI > AI Gateway > 対象のゲートウェイ > Provider Keys を開きます。

  2. Add API Key を選び、プロバイダーとして Amazon Bedrock を選びます。

  3. 次の構造の JSON オブジェクトとして AWS 認証情報を入力します。

    {
    	"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    	"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    	"region": "us-east-1"
    }
  4. Save を選びます。

AWS STS の一時認証情報(IAM ロールの引き受けなど)を使う場合は、sessionToken フィールドを含めます。

{
	"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
	"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
	"region": "us-east-1",
	"sessionToken": "FwoGZXIvYXdzEBY..."
}

BYOK を設定すれば、リクエストに含めるのは cf-aig-authorization ヘッダーだけです。AWS SigV4 の署名は AI Gateway が自動で行います。

オプション 2: クライアント側での署名

自分でリクエストに署名する場合は、aws4fetch ライブラリまたは任意の AWS SDK を使い、AI Gateway 経由で送る前に署名します。後述の aws4fetch によるクライアント側署名の例 を参照してください。

BYOK を使う cURL

AWS 認証情報を プロバイダーキーとして保存 していれば、リクエストは簡単です。AWS の署名は不要です。

curl "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/aws-bedrock/bedrock-runtime/us-east-1/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke" \
  -H "cf-aig-authorization: Bearer {CF_AIG_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "What is Cloudflare?"
      }
    ],
    "max_tokens": 256,
    "anthropic_version": "bedrock-2023-05-31"
  }'

aws4fetch によるクライアント側署名

BYOK を使わない場合は、AI Gateway 経由で送る前にリクエストへ署名する必要があります。次の例は、Cloudflare Worker で aws4fetch ライブラリを使います。

import { AwsClient } from "aws4fetch";

interface Env {
	accessKey: string;
	secretAccessKey: string;
}

export default {
	async fetch(
		request: Request,
		env: Env,
		ctx: ExecutionContext,
	): Promise<Response> {
		const cfAccountId = "{account_id}";
		const gatewayName = "{gateway_id}";
		const region = "us-east-1";

		const awsClient = new AwsClient({
			accessKeyId: env.accessKey,
			secretAccessKey: env.secretAccessKey,
			region: region,
			service: "bedrock",
		});

		const body = JSON.stringify({
			messages: [{ role: "user", content: "What does ethereal mean?" }],
			max_tokens: 256,
			anthropic_version: "bedrock-2023-05-31",
		});

		// Sign against the original AWS URL
		const awsUrl = `https://bedrock-runtime.${region}.amazonaws.com/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke`;

		const presignedRequest = await awsClient.sign(awsUrl, {
			method: "POST",
			headers: { "Content-Type": "application/json" },
			body: body,
		});

		// Send through AI Gateway
		const gatewayUrl = `https://gateway.ai.cloudflare.com/v1/${cfAccountId}/${gatewayName}/aws-bedrock/bedrock-runtime/${region}/model/us.anthropic.claude-haiku-4-5-20251001-v1:0/invoke`;

		const response = await fetch(gatewayUrl, {
			method: "POST",
			headers: presignedRequest.headers,
			body: body,
		});

		if (
			response.ok &&
			response.headers.get("content-type")?.includes("application/json")
		) {
			const data = await response.json();
			return new Response(JSON.stringify(data));
		}

		return new Response("Invalid response", { status: 500 });
	},
};

Anthropic Messages API を使う

Amazon Bedrock は、bedrock-mantle エンドポイント 経由で Anthropic ネイティブの Messages API を提供します。AI Gateway は、ネイティブの Anthropic リクエスト、レスポンス、server-sent events を変換せずにそのまま通します。

ネイティブの Anthropic クライアントには、次のベース URL を設定します。

https://gateway.ai.cloudflare.com/v1/<ACCOUNT_ID>/<GATEWAY_ID>/aws-bedrock/bedrock-mantle/<AWS_REGION>/anthropic

クライアントはベース URL に /v1/messages を付けます。bedrock-mantle エンドポイントに対応する AWS リージョンを選び、anthropic. プレフィックス付きのモデル ID(例: anthropic.claude-opus-5)を使います。

保存済みの AWS 認証情報を使う場合、関連する AWS Identity and Access Management(IAM)ポリシーで bedrock-mantle:CreateInference アクションを許可する必要があります。AI Gateway は、bedrock-mantle サービス向けに各リクエストへ署名します。

次の例は、保存済みの AWS 認証情報または Amazon Bedrock API キーで Messages API を呼び出します。

例を実行する前に、$ACCOUNT_ID$GATEWAY_ID$AWS_REGION$CF_AIG_TOKEN を設定します。API キーの例では、Amazon Bedrock API キー$BEDROCK_API_KEY にも設定します。

curl "https://gateway.ai.cloudflare.com/v1/$ACCOUNT_ID/$GATEWAY_ID/aws-bedrock/bedrock-mantle/$AWS_REGION/anthropic/v1/messages" \
  --header "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
  --header "anthropic-version: 2023-06-01" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "anthropic.claude-opus-5",
    "max_tokens": 256,
    "messages": [
      {
        "role": "user",
        "content": "What is Cloudflare?"
      }
    ]
  }'
curl "https://gateway.ai.cloudflare.com/v1/$ACCOUNT_ID/$GATEWAY_ID/aws-bedrock/bedrock-mantle/$AWS_REGION/anthropic/v1/messages" \
  --header "Authorization: Bearer $BEDROCK_API_KEY" \
  --header "cf-aig-authorization: Bearer $CF_AIG_TOKEN" \
  --header "anthropic-version: 2023-06-01" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "anthropic.claude-opus-5",
    "max_tokens": 256,
    "messages": [
      {
        "role": "user",
        "content": "What is Cloudflare?"
      }
    ]
  }'

AI Gateway は、bearer トークンを Bedrock Mantle が期待する x-api-key ヘッダーへマッピングします。

Unified API を使う(OpenAI 互換)

AI Gateway は Unified API を提供します。Bedrock モデルを OpenAI の chat completions 形式で使えます。現在対応しているのは Anthropic ClaudeAmazon Nova のモデルファミリーです。リクエスト形式を変えずに、OpenAI SDK で Bedrock 上のこれらのモデルへアクセスできます。

Amazon Bedrock への認証に API キーを使う場合、Unified API はリクエストを us-east-1 へ送ります。AWS Signature Version 4(SigV4)で認証する場合は、保存済み AWS 認証情報で選んだリージョンを使います。

エンドポイント

https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions

cURL

AWS 認証情報を プロバイダーキーとして保存 していれば、モデルは aws-bedrock/{model} 形式で指定します。

curl "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions" \
  -H "cf-aig-authorization: Bearer {CF_AIG_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0",
    "messages": [
      {
        "role": "user",
        "content": "What is Cloudflare?"
      }
    ]
  }'

OpenAI SDK

import OpenAI from "openai";

const client = new OpenAI({
	apiKey: "{CF_AIG_TOKEN}",
	baseURL:
		"https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat",
});

const response = await client.chat.completions.create({
	model: "aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0",
	messages: [
		{
			role: "user",
			content: "What is Cloudflare?",
		},
	],
});

console.log(response.choices[0].message.content);

役に立ちましたか?