yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

2025年07月時点のvscodeのcline拡張からAWS Bedrockのモデルを使う方法

はじめに

個人利用なら正直わざわざAWS Bedrockを使う意味があるのかは疑問なのだが、まあ会社がそうしてるので、同じ構成に近づけとくほうが考えることが減って良さそうである。

前提

  • AWSのアカウント自体はある
    • 請求情報が古くなってたので更新するなどはした
  • Amazon Bedrockを使ったことはない
  • VSCodeには手元とRemote(ArchLinux)両方にclineの拡張は入れたけどそれ以上は何もしてない
  • ホスト: Windows11
  • VM: archlinux
  • VSCode Remote-SSHを使用してvmのarchlinux上で作業するしclineも使う
  • archlinux にaws cli 導入済み

Bedrock利用開始

自分は気分でオレゴンリージョン(us-west2)を選んだ。リージョンによっては使えないモデルとかあるので注意する。

モデルアクセス→モデルアクセスの変更で利用したいモデルを選んで

初回は↓みたいなことが聞かれるが日本語で書いて通った。

数時間から数日なんて話もあったが、今回は1分かからず通過した。

IAM

会社だとIAM Identity Centerを使ってるのでAWS SSOしてるのだが、個人では別に有り難みがないし、何よりもめんdなので伝統と信頼のAccessKey/SecretKeyを使うことにする。

こんな感じのポリシーを作る。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "bedrock:ListInferenceProfiles",
                "ce:GetDimensionValues",
                "bedrock:InvokeModel",
                "ce:GetCostAndUsage",
                "bedrock:InvokeModelWithResponseStream",
                "ce:GetCostForecast",
                "ce:GetUsageForecast"
            ],
            "Resource": "*"
        }
    ]
}
  • Resource: 厳密にやるならAI Modelをここで指定するのだろうが、そこまでしたい需要がないのでAnyに
  • bedrock:ListInferenceProfiles: なくてもいいのだが、aws bedrock list-inference-profilesコマンドを叩きたいのでつけてる。

あとはこれを割り当てたIAMユーザーを作ってAccessKeyを発行する

~/.aws/config

[bedrock]
region = us-west-2
output = json

~/.aws/credentials

[bedrock]
aws_access_key_id = <access key here>
aws_secret_access_key = <secret key here>

のように記述する。aws configureコマンドで作ったらdefault profileにされたので手動でファイルを書き換えてbedrockにリネームした。別にdefaultじゃなきゃ何でも良いのだが。

Clineの設定

~/.cline/config.yaml

provider: bedrock
region: us-west-2

models:
  - id: us.anthropic.claude-sonnet-4-20250514-v1:0
    name: Claude Sonnet 4
    provider: bedrock

  - id: us.anthropic.claude-3-7-sonnet-20250219-v1:0
    name: Claude 3.7 Sonnet
    provider: bedrock

  - id: us.anthropic.claude-3-haiku-20240307-v1:0
    name: Claude 3.5 Haiku
    provider: bedrock

  - id: us.deepseek.deepseek-coder:20240601
    name: DeepSeek-R1
    provider: bedrock

us.のprefixの意味は後述するが、リージョンによって読み替えが必要。

  • API Provider: Amazon Bedrock, AWS Profile
  • AWS Profile Name: bedrock
    • awsのprofile名に合わせる
  • AWS Region: us-west-2
    • modelを利用申請したリージョン
  • Use Prompt caching: true
  • Model: Custom
  • Model ID: arn:aws:bedrock:us-west-2:679122520526:inference-profile/us.anthropic.claude-sonnet-4-20250514-v1:0
    • 後述するように推論プロファイルのみ対応するモデルを使う場合は推論プロファイルARNをかかないといけない。
  • Base Inference Model: anthropic.claude-sonnet-4-20250514-v1:0
推論プロファイル

AIくんに解説させた。↓

推論プロファイルは、AWS Bedrockの機能であり、生成AIのコストとリソース使用率を管理・追跡し、回復性とスループットを向上させるために設計されています。

  • 推論プロファイルの種類:
    • システム定義(クロスリージョン推論プロファイル): Bedrockサービスによって事前に定義されており、モデルのリクエストを複数のリージョンにルーティングすることで、回復性を高め、トラフィックの急増を管理します。これらは、サポートするモデルと対象リージョンに基づいて命名され、例えば us.anthropic.claude-3-7-sonnet-20250219-v1:0 のような形式をとります。
    • アプリケーション定義(ユーザー定義)推論プロファイル: ユーザーが作成し、コストとモデルの使用状況を追跡したり、カスタムのコスト配分タグを適用したり、リクエストを単一または複数のリージョンにルーティングしたりするために使用されます。
  • 特定のモデルにおける必須性: 重要な点として、Claude Sonnet 4やClaude 3.7 Sonnetのような一部のモデルは、オンデマンド利用であっても、推論プロファイルを介した推論のみをサポートしています。これは、ベースモデルIDを直接使用して呼び出すことができないことを意味します。

Claude Sonnet 4のようなモデルがオンデマンド利用であっても推論プロファイルを必須とするのは、AWSが推論プロファイルを新しい/より高度なモデルの基盤となる抽象化レイヤーとして利用していることを示唆しています。これにより、基盤となるインフラストラクチャの管理、クロスリージョンルーティングなどの機能の実装、およびリソース割り当てのより効果的な最適化が可能になり、同時に「従量課金制」の料金モデルを提供することができます。このような設計パターンは、モデルの呼び出しとリソース管理を一元化する役割を担っています。

Model ID

一口にModel IDといっても色々ある。またしてもAI解説↓

呼び出し方法 modelId形式の例 使用例 備考
ベースモデルID anthropic.claude-sonnet-4-20250514-v1:0 推論プロファイルを必要としないオンデマンドモデルの直接呼び出し。 特定のモデルでは、オンデマンドであっても推論プロファイルが必須となる場合があります。
システム定義推論プロファイルID us.anthropic.claude-sonnet-4-20250514-v1:0 クロスリージョン推論など、システムが管理する推論プロファイルを介したモデル呼び出し。 Claude Sonnet 4など、一部のモデルではオンデマンド利用でもこの形式が必須です 1。地域プレフィックス( us.など)が含まれます 24。
推論プロファイルARN arn:aws:bedrock:us-east-1:123456789012:inference-profile/my-sonnet-profile ユーザーが作成したアプリケーション推論プロファイルを介したモデル呼び出し。コスト追跡やカスタムルーティングに利用。 modelIdパラメータにARNを指定します 8。
プロビジョンドスループットARN arn:aws:bedrock:us-west-2:123456789012:provisioned-model/my-custom-model-pt カスタムモデルや、専用キャパシティを持つベースモデルの呼び出し。 modelIdパラメータにARNを指定します 25。

推論プロファイルARNをどうやってしらべるかだが、

$ aws bedrock list-inference-profiles --region us-west-2 --profile bedrock | jq '.inferenceProfileSummaries[] | select(.inferenceProfileName | test("Claude Sonnet 4"))'
{
  "inferenceProfileName": "US Claude Sonnet 4",
  "description": "Routes requests to Claude Sonnet 4 in us-east-1, us-east-2 and us-west-2.",
  "createdAt": "2025-05-20T00:00:00+00:00",
  "updatedAt": "2025-07-25T19:30:55.377390+00:00",
  "inferenceProfileArn": "arn:aws:bedrock:us-west-2:679122520526:inference-profile/us.anthropic.claude-sonnet-4-20250514-v1:0",
  "models": [
    {
      "modelArn": "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0"
    },
    {
      "modelArn": "arn:aws:bedrock:us-east-2::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0"
    },
    {
      "modelArn": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-sonnet-4-20250514-v1:0"
    }
  ],
  "inferenceProfileId": "us.anthropic.claude-sonnet-4-20250514-v1:0",
  "status": "ACTIVE",
  "type": "SYSTEM_DEFINED"
}

こんな感じでinferenceProfileArnが求まる。これをするためにIAMにbedrock:ListInferenceProfilesを足しているのである。