Agent for BedrockでLambda関数を呼び出す際のエラーと対策
こんにちは!開発部の天津炒飯です。
最近、Agent for Bedrockを使ってLambda関数を呼び出す処理を実装していたのですが、エージェントをテストした際にエラーが発生し、しばらく原因が分からず苦戦しました。同じような問題に直面した方の参考になればと思い、解決方法を共有します。
発生したエラー
Agent for BedrockでAction Groupを作成し、アクショングループの呼び出しで既存のLambda関数を選択した際に、エージェントをテストすると以下のエラーが発生することがあります。
Access denied while invoking Lambda function arn:aws:lambda:us-east-1:xxxx:function:LambdaFunc-xxx. Check the permissions on Lambda function and retry the request.
エラーの原因
このエラーの原因は、Lambda側の設定が不足しているためです。具体的には、リソースベースのポリシーステートメントでBedrockに対する権限を追加する必要があります。
最初はIAMロールの権限設定を見直したのですが、問題が解決せずかなり時間を取られました。調査を進める中で、LambdaのリソースベースポリシーにBedrockのアクセス許可を追加する必要があることに気づきました。
対応方法
以下の手順で、Lambda関数にBedrockの権限を追加します。
- AWSマネジメントコンソールでLambdaのサービスを開く。
- 設定 → アクセス権限 → リソースベースのポリシーステートメント → アクセス権限を追加。
- 「AWSのサービス」のタブを選択。
- 以下の設定を入力。
-
サービス:
other
-
ステートメントID: 任意の値を入力(例:
AllowBedrockInvoke
) -
プリンシパル:
bedrock.amazonaws.com
- ソース ARN: (BedrockエージェントのARNを指定)
-
アクション:
lambda:InvokeFunction
-
サービス:
- 保存して設定を反映。
これにより、Agent for Bedrockが指定したLambda関数を正常に呼び出せるようになります。
まとめ
Agent for BedrockからLambdaを呼び出す場合、デフォルトではBedrockにLambdaの実行権限がないため、明示的にリソースベースのポリシーステートメントを追加する必要があります。上記の設定を適用することで、エージェントが正しくLambdaを実行できるようになります。
自分がこの問題に直面した際は、IAMロールの設定ばかりを見直してしまい、リソースベースポリシーの設定が足りないことに気づくまで時間がかかりました。同じような問題で悩んでいる方は、ぜひ試してみてください!
最後に
はつかぜ株式会社では、IT学習や業務に役立つ情報を定期的にお届けしていきたいと思っています。
システム開発のお問い合わせ・ご相談はこちら