はじめに
AWSの「Bedrock」× OSSエージェントフレームワーク「Strands」で、
LLM(大規模言語モデル)をローカルCLIから対話的に動かそう!
――そう意気込んでチャレンジしたエンジニアの体験記です。
結論:「権限周り、想像以上に沼で諦めました」
でも、同じところでハマる人がきっといるはず。
そのための**「備忘録+ハマりポイント共有」**として残します。
ゴール
- AWS BedrockのClaudeやTitanなどのモデルをStrands CLIから動かしたい
- Mac(Apple Silicon)+ AWS個人アカウント利用
- 最低限「何かが動く」体験をしたい!
やったこと全まとめ
1. IAMユーザーとポリシーの設定
- 会社用と個人用のAWSアカウントを明確に分離(今回は個人用のみ利用)
- 個人用IAMユーザーを新規作成し、必要なBedrockポリシーをアタッチ
-
aws configure
で新しいプロファイル(例:personal
)を追加
aws configure --profile personal
2. 利用可能なモデル一覧の取得
aws bedrock list-foundation-models --region us-east-1 --profile personal \
| jq '.modelSummaries[] | select(.providerName=="Anthropic" or .providerName=="Amazon") | {modelId, modelName, status: .modelLifecycle.status}'
-
Anthropic(Claude)系は
LEGACY
orACTIVE
だが、「利用不可」なものもある -
Amazon Titan/Nova系は
ACTIVE
だが、動く保証はない
3. CLI単体でBedrockモデルAPIを叩くテスト
(準備)input.json を用意
{"inputText": "Hello"}
(実行)
aws bedrock-runtime invoke-model \
--region us-east-1 \
--model-id amazon.titan-text-lite-v1 \
--body fileb://input.json \
--content-type 'application/json' \
--accept 'application/json' \
--profile personal \
outfile.txt
(結果)
{"inputTextTokenCount":3,"results":[{"tokenCount":13,"outputText":"\nBot: Hello! How can I help you today?","completionReason":"FINISH"}]}
👉 CLI単体なら "動作OK"。
4. Strands からBedrock経由でモデル実行
AWS_PROFILE=personal strands --model-provider bedrock --model-config '{"region": "us-east-1", "model_id": "amazon.titan-text-lite-v1"}'
(結果)
- 何度試しても**
AccessDeniedException
**(権限エラー) - モデルIDを
ACTIVE
なものに変えても状況変わらず - 「CLI単体では動作する」のに、Strands経由では常にエラー
ハマりポイント・得られた知見
1. Bedrockモデルの「アクセス権」は本当に厳しい
- IAMで**「Bedrockフル権限」**を明示的に付与してもダメな場合あり
- アカウント/リージョン/モデルの状態が絡む
- **「モデルはACTIVEでもアクセス権自体は付与されていない」**というケースに注意
2. Strandsは「推論API」のラッパーであり、AWS SDKの権限エラーは内部的に伝播してくる
- 権限エラーがそのまま出てデバッグがつらい
- SDKレイヤーの動作確認はまずaws CLI単体で
3. 公式サポート状況・実装依存に要注意
- Strands側のBedrock対応実装に制約やバグがある可能性
- **(執筆時点2025年5月)Claude/Haikuなど最新モデルは「表示はされるが、実際には権限エラー」**が出る状況
最後に(これから挑戦する人へ)
- IAM・Bedrock・モデルID・API実行権限の4点セットは絶対チェック
- 「CLIで動く → SDK/OSSツールで動かない」の場合はOSS側の実装やバグも疑う
- 権限沼にハマっても**「あなただけじゃない」ので安心して!**
参考コマンド集
# プロファイル確認
aws sts get-caller-identity --profile personal
# 利用可能なモデル一覧
aws bedrock list-foundation-models --region us-east-1 --profile personal | jq '.modelSummaries[] | {providerName, modelId, modelName, status: .modelLifecycle.status}'
# Bedrock推論API動作テスト
aws bedrock-runtime invoke-model \
--region us-east-1 \
--model-id amazon.titan-text-lite-v1 \
--body fileb://input.json \
--content-type 'application/json' \
--accept 'application/json' \
--profile personal \
outfile.txt
おまけ
「OSSフレームワーク×クラウドLLM」 は今後どんどん発展する分野!
今回は苦戦したけど、「沼った知見」もいつか誰かの役に立つはず。
この記事が誰かの参考になれば嬉しいです。