CDKでアプリケーション推論プロファイルを作成しClineで利用する

CDKでアプリケーション推論プロファイルを作成しClineで利用する

Clock Icon2025.05.25

はじめに

ClineやClaude CodeをBedrockを使って組織で使う際に、組織やチーム、個人に以下のようなニーズがあります。

  • 権限の付与
  • リクエストの使用状況の把握
  • 使用料金の把握

このニーズのアプローチとしてアプリケーション推論プロファイルを使う方法があります。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/inference-profiles-create.html

  • 1 つのリージョンのアプリケーション推論プロファイルを作成するには、基盤モデルを指定します。そのモデルでそのリージョンに対して行われたリクエストの使用状況とコストが追跡されます。
  • 複数のリージョンのアプリケーション推論プロファイルを作成するには、クロスリージョン (システム定義) 推論プロファイルを指定します。推論プロファイルは、選択したクロスリージョン (システム定義) 推論プロファイルで定義されたリージョンにリクエストをルーティングします。推論プロファイルのリージョンに対して行われたリクエストの使用状況とコストが追跡されます。

今回はこちらをチーム、ユーザーがいる想定でCDKでリソースを構築しようと思います。

ただこの管理方法でもいくつか課題はあり、AWS様よりLiteLLM Proxyを使った手法も紹介されています。今回はこちらの方法に関しては触れません。

https://aws.amazon.com/jp/blogs/news/cline-with-bedrock-3-governance/

前提

CDKで実装するリソースは以下です。

  • IAMユーザー
    • 上記のアクセスキーを格納するシークレットマネージャー
  • アプリケーション推論プロファイル

IAMユーザーの権限設定はこちらの記事を参考に作成しました。

https://zenn.dev/winteryukky/articles/b51ba6d63cf15e

コスト分配タグを使ったユーザー毎のコストの確認も行いたいと思います。

https://aws.amazon.com/jp/about-aws/whats-new/2024/11/amazon-bedrock-cost-allocation-tags-inference-profiles/

BedrockでClaudeモデルの有効化

Claudeモデルの有効化をします。今回はClaude Sonnet 4を使います。アプリケーション推論プロファイルには、クロスリージョンプロファイルを紐づける予定です。以下の資料を確認し、Claudeモデルを有効化するリージョンを確認します。

https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html

CleanShot 2025-05-25 at 08.06.17@2x

以上より、以下のBedrockのSonnet 4モデルを有効化します。

  • us-east-1(バージニア北部)
  • us-east-2(オハイオ)
  • us-west-2(オレゴン)

オレゴンから有効化します。(マネジメントコンソールのどこかわからない場合、こちらを参考にしてください。)

CleanShot 2025-05-25 at 08.15.18@2x

オレゴンでの有効化が確認できました。
CleanShot 2025-05-25 at 08.19.54@2x

同じような手順でus-east-2(オハイオ)とus-east-1(バージニア北部)も適用してください。

us-east-2(オハイオ)の有効化
CleanShot 2025-05-25 at 08.22.21@2x

us-east-1(バージニア北部)の有効化
CleanShot 2025-05-25 at 08.24.45@2x

CDK実装

リポジトリはこちらです。不明点がありましたらこちらをご参照ください。

https://github.com/shuntaka9576/bedrock-application-inference-template

ライブラリは以下を利用します。アプリケーション推論プロファイルは、@cdklabs/generative-ai-cdk-constructsを利用します。

https://github.com/shuntaka9576/bedrock-application-inference-template/blob/95417a1eb06932744799a8b3a066322240bf7f57/package.json#L23-L28

タグは仮でteam, name, emailを定義します。
https://github.com/shuntaka9576/bedrock-application-inference-template/blob/95417a1eb06932744799a8b3a066322240bf7f57/lib/config.ts#L1-L29

CDKで作成するリソースは以下の通りです。

  • クロスリージョンプロファイル
  • アプリケーション推論プロファイル
  • IAMユーザー
  • シークレットマネージャーのシークレット(作成したIAMユーザーのアクセスキー、シークレットキーを格納)

https://github.com/shuntaka9576/bedrock-application-inference-template/blob/95417a1eb06932744799a8b3a066322240bf7f57/lib/main-stack.ts#L1-L98

デプロイ

export AWS_REGION="us-west-2"

# AWSからデプロイ権限取得(aws-vaultなど)

# CDK利用が初回の場合は必要なコマンド
npx cdk bootstrap

npx cdk deploy

作成されたリソースの確認

アプリケーション推論プロファイルが作成されていることを確認します。

aws bedrock list-inference-profiles \
  --region 'us-west-2' \
  --type-equals 'APPLICATION' \
  --no-cli-pager

出力結果
{
    "inferenceProfileSummaries": [
        {
            "inferenceProfileName": "sonnet4-asgard-baldur",
            "createdAt": "2025-05-24T23:50:07.396192+00:00",
            "updatedAt": "2025-05-24T23:50:07.396192+00:00",
            "inferenceProfileArn": "arn:aws:bedrock:us-west-2:111111111111:application-inference-profile/g3ys3rof2rl2",
            "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"

(中略)

アプリケーション推論プロファイルが、6ユーザー分作成されていることが分かります。

$ aws bedrock list-inference-profiles \
  --region 'us-west-2' \
  --type-equals 'APPLICATION' \
  --no-cli-pager | jq '.inferenceProfileSummaries | length'
6

タグがついているリソースは以下のコマンドで確認できます。olympusチームとasgardチームにそれぞれ3つずつアプリケーションプロファイルが設定されていることがわかります。簡易ではありますが、アプリケーション推論プロファイルにもタグが正しく設定されていそうです。

$ aws resourcegroupstaggingapi get-resources \
  --tag-filters Key=team,Values=olympus \
  --no-cli-pager | jq '.ResourceTagMappingList | length'
3
$ aws resourcegroupstaggingapi get-resources \
  --tag-filters Key=team,Values=asgard \
  --no-cli-pager | jq '.ResourceTagMappingList | length'
3

Clineの動作確認

シークレットマネージャーにクレデンシャルが生成されているので確認し、AWSのプロファイル設定を実施します。
CleanShot 2025-05-25 at 08.57.16@2x
CleanShot 2025-05-25 at 08.57.58@2x

AWSのプロファイル設定をします。今回はAWS CLIの平文管理のものを紹介します。必要に応じてaws-vaultなどを利用し、セキュアストレージにクレデンシャルを格納するようにしてください。

今回は検証用にzeusとfreyjaのプロファイルをそれぞれ作ります。

~/.aws/credentials
[zeus]
aws_access_key_id=<アクセスキー>
aws_secret_access_key=<シークレットキー>

[freyja]
aws_access_key_id=<アクセスキー>
aws_secret_access_key=<シークレットキー>
~/.aws/config
[profile zeus]
region=us-west-2
output=json
source_profile=zeus

[profile freyja]
region=us-west-2
output=json
source_profile=freyja

次にユーザーに紐づいているアプリケーション推論プロファイルを確認します。arn:aws:bedrock:us-west-2:111111111111:application-inference-profile/<id>のARNを控えます。

CleanShot 2025-05-25 at 09.07.34@2x

Clineの設定

バージョンはv3.17.5を利用します。

以下のように設定をします。ポイントはカスタムモデルを指定し、先ほど控えたアプリケーション推論プロファイルのARNを直接指定することです。
CleanShot 2025-05-25 at 09.55.50@2x

動作の確認が取れました。
CleanShot 2025-05-25 at 09.48.09@2x

おまけ(Claude Code)

Claude CodeとSonnet 4の場合は以下の429エラーになりました。これはSonnet v4に特有だと推測しています。(3.7では動作を確認しています revision)

export AWS_REGION="us-west-2"
export AWS_PROFILE="zeus"
export CLAUDE_CODE_USE_BEDROCK=1
export ANTHROPIC_MODEL="arn:aws:bedrock:us-west-2:111111111111:application-inference-profile/z7e2p7z54pcz"
claude
❯ claude "クエリ"
╭────────────────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code!                                  │
│                                                            │
│   /help for help, /status for your current setup           │
│                                                            │
│   cwd: /Users/shuntaka/repos/github.com/shuntaka9576/hoge  │
│                                                            │
│   ──────────────────────────────────────────────────────── │
│                                                            │
│   Overrides (via env):                                     │
│                                                            │
│   • Model: arn:aws:bedrock:us-west-2:111111111111:applicat │
│   ion-inference-profile/z7e2p7z54pcz                       │
│   • Prompt caching: off                                    │
╰────────────────────────────────────────────────────────────╯

 ※ Tip: Use /memory to view and manage Claude memory

> クエリ
  ⎿  API Error (429 Too many tokens, please wait before trying again.) · Retrying in 1 seconds… (attempt 1/10)
  ⎿  API Error (429 Too many tokens, please wait before trying again.) · Retrying in 1 seconds… (attempt 2/10)

✢ Thinking… (3s · ↑ 0 tokens · esc to interrupt)
(中略)

サービスクォータは以下です、↑の例はトークンは少ないはずなので、違和感があります。(Clineは動作していますし。。)
CleanShot 2025-05-25 at 10.31.06@2x

issueも切られていたので、おそらく本体側のバグと予想しています。Claude CodeとBedrock Sonnet 4で動作した方がいれば、情報頂けると嬉しいです。(Claude Codeはクローズドソースで、npm上も難読化処理がされているため)

https://github.com/anthropics/claude-code/issues/1293

コスト分配タグの確認

さいごに

LiteLLM Proxyを使った手法も試してみたいですね!

https://aws.amazon.com/jp/blogs/news/cline-with-bedrock-3-governance/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.