🙆

[失敗談]AWS Bedrock × Strands でLLMを動かそうとしたらダメだった話(全工程&ハマりポイントまとめ)

に公開

はじめに

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 or ACTIVEだが、「利用不可」なものもある
  • 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」 は今後どんどん発展する分野!
今回は苦戦したけど、「沼った知見」もいつか誰かの役に立つはず。
この記事が誰かの参考になれば嬉しいです。

Discussion