読み込み中

Amazon Bedrock で Claude をセットアップする

自分のAWSアカウントでClaudeから最初の返信を取得します。Claudeを呼び出すことが許可されたロールとしてターミナルから サインインし、AnthropicのPython SDKを使って短いPythonファイルを1つ実行します。

25 分Claude Platform

Claude in Amazon Bedrock を使うと、自分のAWSアカウントからClaudeを呼び出せます。 AWSのサインインを使用し、使用量はAWSの請求に計上されます。短いPythonファイル1つで、Claudeから最初の返信が得られます。AnthropicのAPIキーは必要ありません。

開始する前に、AWSアカウント、Python 3.10以降、およびAWS CLIが必要です。AWS CLIは、ターミナルからAWSを使用するためのツールです。

Claude を呼び出す権限を取得する

このページでは、Claudeを呼び出すためのロールとしてサインインします。ロールとは、AWSアカウント内の権限のセットです。そのロールはIAM Identity Center(サインイン用のAWSのサービス)で作成されます。IAM Identity Centerは、そのロールとしてサインインする場所でもあります。

以下の手順は、AWSアカウントを管理する方のためのものです。ご自身が管理者でない場合は、これらの手順を管理者に送ってください。 IAM Identity Centerをまだセットアップしたことがない場合は、AWSのIAM Identity Center入門ガイドから始めてください。

  1. 権限セットを作成します。 権限セットには、ロールが実行できる内容を列挙したポリシーが含まれます。AWSの権限セットを作成する手順に従ってください。そこに、AWSが提供するマネージドポリシー AmazonBedrockMantleInferenceAccess を追加します。これはAmazon Bedrock内のClaude呼び出しを許可するためにAWSが提供するものです。

  2. 同じ権限セットに、AWSのストアであるAWS Marketplace用の以下の権限を追加します。

    • aws-marketplace:Subscribe
    • aws-marketplace:Unsubscribe
    • aws-marketplace:ViewSubscriptions

    アカウント内で各Claudeモデルを最初に呼び出す際、その呼び出しによってAWS Marketplace経由でそのモデルへのサブスクリプションが開始される場合があり、その呼び出しにはこれらの権限が必要です。アカウントには、AWS Marketplaceでの購入のための支払い方法の設定も必要です。これらの権限はアカウント内でモデルを初めて使用する際にのみ必要なので、アカウントが使用する各モデルのサブスクリプションが完了したら、権限セットから削除できます。

  3. Claudeを呼び出す人に権限セットを割り当てます。 これは、その人がClaudeを呼び出すAWSアカウント内で、AWSのAWSアカウントへのアクセス権の割り当ての手順に従って行います。割り当てを行うと、そのアカウント内に権限セットにちなんで名付けられたロールが作成されます。

ターミナルからサインインする

サインインに必要な詳細を管理者に確認してください。

  • 使用するAWSアカウント
  • ロールの名前
  • IAM Identity Centerの開始URL(サインインするウェブアドレス)
  • IAM Identity Centerをホストするリージョン。リージョンとは、AWSがサービスを実行している場所の1つです。

AWS CLIを使ってそのロールとしてサインインします。まだインストールしていない場合は、最初にAWS CLIをインストールしてください。その後、以下の手順を順番に進めてください。

  1. サインインプロファイルをセットアップします。 プロファイルとは、CLIが保存する、名前の付いたサインイン設定のセットです。次のコマンドを実行します。

    bash
    aws configure sso

    質問が1つずつ表示されます。最初の質問には次のように答えてください。

    1. セッション名には、my-sso のような短い名前を入力します。
    2. 開始URLには、管理者から教えてもらったものを入力します。
    3. IAM Identity Centerをホストするリージョンには、管理者から教えてもらったものを入力します。
    4. 登録スコープには、sso:account:access を入力します。

    次にコマンドがブラウザを開くので、そこでサインインします。ブラウザが開かない場合は、コマンドが表示する指示に従ってください。コマンドがAWSアカウント、続いてロールを一覧表示したら、管理者から指定されたアカウントとロールを選びます。

    最後に、以下の設定を尋ねられます。

    1. プロファイルのリージョンには、US East(北バージニア)である us-east-1 を入力します。
    2. 出力フォーマットには、json を入力します。
    3. プロファイル名には、default を入力します。CLIは、コマンドがプロファイルを指定しない場合に default プロファイルを使用するため、以下のコマンドは記載どおりに実行されます。
  2. サインインします。

    bash
    aws sso login

    ブラウザが開きます。そこでサインインを完了すると、ターミナルに「Successfully logged into Start URL」で始まる行が表示されます。これでCLIが認証情報を保持します。認証情報とは、あなたが誰であるかをAWSに証明する、短期間だけ有効なキーです。期限が切れたら、このコマンドを再度実行してください。

  3. どのアカウントとロールでサインインしているかを確認します。

    bash
    aws sts get-caller-identity

    出力内の Account は、あなたのAWSアカウントのIDであるはずです。Arn は、サインインしているロールに対するAWSの完全な名前であり、選択したロールの名前が含まれているはずです。どちらかが間違っている場合は、aws configure sso を再度実行し、正しいアカウントとロールを選択してください。

最初の返信を取得する

それでは、Pythonから1件のリクエストをClaudeに送信しましょう。

  1. Amazon Bedrockサポート付きのAnthropicのPython SDKをインストールします。 SDKとは、コードからClaudeを呼び出すためのAnthropicのライブラリです。

    bash
    pip install -U "anthropic[bedrock]"
  2. このファイルを first_reply.py として保存します。

    python
    from anthropic import (
        AnthropicBedrockMantle,
    )
    
    client = AnthropicBedrockMantle(
        aws_region="us-east-1",
    )
    
    message = client.messages.create(
        model="anthropic.claude-sonnet-5",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": "Hello, Claude",
        }],
    )
    
    for block in message.content:
        if block.type == "text":
            print(block.text)

    このファイルは、コードがリクエストを送信する対象のオブジェクトであるクライアントを作成します。このクライアントは、プロファイルで指定したリージョンである us-east-1 のAmazon Bedrock内のClaude用です。

    クライアントは、IAM Identity Centerのサインインによる認証情報を含め、AWSの認証情報を自動的に見つけ出すため、ファイル内にキーを記載する必要はありません。

    その後ファイルは、「Hello, Claude」という1件のメッセージをClaude Sonnet 5に送信します。model の行は、モデルIDでそのモデルを指定します。最後に、ファイルはClaudeの返信テキストを表示します。

  3. ファイルを実行します。

    bash
    python first_reply.py

    ターミナルにClaudeの返信が表示されます。代わりにPythonがエラーで停止した場合は、下記の「リクエストが失敗した場合」に進んでください。

  4. アカウントを再度確認します。 同じターミナルで aws sts get-caller-identity を実行します。これにより、どのアカウントとロールでサインインしているかが表示されます。使用量はAWSの請求に計上されるため、そのアカウントが管理者から指定されたものであることを確認してください。

リクエストが失敗した場合

リクエストが失敗すると、SDKはエラーを発生させ、Pythonがそれをターミナルに表示します。その出力の中に PermissionDeniedError または NotFoundError がないか確認してください。

権限エラー

PermissionDeniedError は、AWSがステータス403でリクエストを拒否したことを意味します。ステータスとは、リクエストがどのような結果になったかをサーバーが返す番号です。送信した認証情報には、このリクエストを行う権限がありません。以下の対処法を順番に試してください。

  1. サインインが期限切れになっている可能性があるため、再度サインインします。aws sso login を実行し、その後 first_reply.py を再度実行します。
  2. ロールとアカウントに「Claudeを呼び出す権限を取得する」に記載されているものがすべて揃っているか、管理者に確認してもらいます。
  3. これがアカウント内でClaude Sonnet 5を初めて呼び出す場合は、権限が設定されてから2分待ってから、first_reply.py を再度実行します。モデルへのサブスクリプションの完了には最大2分かかる場合があり、それが完了するまで呼び出しが拒否されることがあります。

見つからないエラー

NotFoundError は、AWSがステータス404で応答し、リクエストが指定したものを見つけられなかったことを意味します。first_reply.py 内のモデルIDを確認してください。Claude in Amazon BedrockのモデルIDは anthropic. で始まるため、正確に anthropic.claude-sonnet-5 と記載されている必要があります。

その他のエラー

その他のエラーについては、AWSのAmazon Bedrockエラーコードのページで調べてください。

次に進むには

次は、Claude Platformでの構築方法を学ぶコースClaude Platform 101を受講してください。このコースのいくつかのレッスンには、anthropic.Anthropic() でクライアントを作成するPythonのサンプルがあります。

それらのサンプルでは、代わりに first_reply.py のインポート、クライアントの行、モデルIDを使用してください。 コースのサンプルの一部には、Claude in Amazon Bedrockがサポートしていない機能を使用しているものがあり、それらはClaude in Amazon Bedrockのドキュメントページに記載されています。