- 公開日
- 最終更新日
【Bedrock】Organizationメンバーアカウントの料金を教えてもらう
この記事を共有する
目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの小泉です。
先日公開した以下の記事にて、AWS利用料金をSlackからAmazon Bedrock エージェント(以下、Bedrock Agent)を通して確認できるようにしました。
【Bedrock】Bedrock AgentをSlackで操作する
【Bedrock】Bedrock AgentからAWS利用料金を教えてもらう
今回はさらに機能を拡張して、AWS Organization(以下、Organization)環境における各メンバーアカウントの利用料金 をSlack上で確認できるようにしたので、その構成について解説します!
完成したもの

Slackから「@Amazon Q ask usercost <個人メンション> のXXXX年Y月からZ月の利用料金を教えて」と質問すると、メンションした人のAWS利用料金を教えてくれます!
構成図


※Organization環境は概略図になります
処理の概要
- ユーザ(社員)がSlackで個人メンションと問い合わせたい期間を入力する
- Bedrock Agentが入力を理解し、Action Groupに設定したLambdaを実行する
- AWS Lambda(以下、Lambda)がAmazon DynamoDB(以下、DynamoDB)にSlackのユーザIDと紐づいているAWSアカウントIDを取得する
- LambdaがmasterアカウントのIAM RoleにAssum Roleを行い、取得したAWSアカウントIDに対してAWS Cost Explorer(以下、Cost Explorer) APIを実行する
- Bedrock Agentが回答をまとめる
- Slackに回答が返却される
作り方
具体的な手順(Lambdaの実装コードなど)は前回の記事にまとめているため、今回は作成する際のポイントを解説します!
DynamoDB
SlackユーザーとAWSアカウントIDを紐づけるためのテーブルを作成します。
| キー | 値 |
|---|---|
| SlackUserId | U12345678 |
| AWSAccountId | 123456789012 |
このようにSlackユーザIDとAWSアカウントIDを対応付けることで、Slackからのリクエストに対して適切なアカウント情報を返せるようにします。
Lambda関数
Lambdaでは主に以下の処理を実装します:
- Slack IDに紐づくAWSアカウントIDを取得
- masterアカウントのIAM RoleにAssume Roleして権限を取得
- 取得したAWSアカウントIDに対してCost Explorer APIを実行
- 結果をフォーマットしてBedrock Agentに返却
Bedrock AgentからはAction Groupの定義に従って期間の情報(開始月・終了月)が渡されます。
Bedrock Agent
Bedrockエージェントの設定では、以下のポイントに注意します:
- Action Groupの設定でコストの参照期間を定義
- Agentとしてのふるまい・役割をシステムプロンプトで設定
IAM Role設定
各アカウントの料金情報にアクセスするために以下の権限設定が必要です:
- sysytemアカウントからmasterアカウントへのswitch role設定
- masterアカウントに対してCost Explorer APIを実行する権限付与
- masterアカウントからOrganizationメンバーアカウントの料金情報を参照できる権限設定
Amazon Q Developer in chat applications
SlackからBedrock Agentを呼び出すには以下の設定が必要です:
- Amazon Q Developer in chat applicationsで接続先のSlackを設定
- SlackでBedrock Agentの接続設定
動作検証
実際に動作させてみると、各メンバーアカウントの料金情報を簡単に取得することができました。


Slack IDに紐づいているアカウントの利用料金が返されることが確認できました。
まとめ
Organization環境でのAWS利用料金管理にお悩みの方は、ぜひ参考にしてみてください。
この記事は私が書きました
小泉 和貴
記事一覧全国を旅行することを目標に、仕事を頑張っています。