Step Functions + Lambda + Box SDKでBoxからAmazon Bedrock KnowledgeBasesにドキュメントを同期する【CDK】
はじめに
Amazon Bedrock Knowledge Basesは、Amazon Kendraと比較するとデータソースコネクタが少なく、Boxなどの外部サービスとの連携が標準では提供されていないという課題があります。
そこで今回は、BoxとAmazon Bedrock Knowledge Basesを連携させる方法としてStepFunctions + Lambda + Box SDKの組み合わせで実装を行ってみました。
今回作成したコードは以下のリポジトリで公開しています。
アーキテクチャ概要
今回実装したアーキテクチャは以下のようになっています。
前提条件
- Amazon Bedrock Knowledge Basesが作成済みであること
- Amazon Bedrock Knowledge BasesにS3バケットがデータソースとして設定済みであること
構築
1. Boxの認証設定
まず初めに以下のドキュメントを参考にアプリの作成、JSONのダウンロードを行います。
2. プロジェクトのセットアップ
GitHubからリポジトリをクローンして、必要なパッケージをインストールします。
git clone https://github.com/sakai-classmethod/box-to-s3-data-sync
cd box-to-s3-data-sync
npm ci
Boxの認証設定で作成したBox JWT設定ファイルをbox_config.json
として保存し、AWS Systems ManagerパラメーターストアにAWS CLIでアップロードします。
リージョンはAmazon Bedrock Knowledge Basesのあるリージョンを指定してください。
aws ssm put-parameter \
--name "/box/jwt" \
--type "SecureString" \
--value file://./box_config.json \
--overwrite \
--no-cli-pager \
--region us-west-2
3. 設定ファイルの編集
次にcdk.json
ファイルを編集して、プロジェクトの設定を行います。
このファイルで各環境(開発・本番など)ごとの設定を行えるため、環境に応じた柔軟な構成が可能です。
今回は環境指定なしで設定します。
以下の設定項目をcdk.json
に記述します:
設定項目 | 説明 |
---|---|
bucketName |
Amazon Bedrock Knowledge Basesのデータソースで利用しているS3バケット名 |
destinationS3Prefix |
Amazon Bedrock Knowledge Basesのデータソースで指定しているパス(フォルダー) |
ssmParameterKey |
JWTの保存先 |
boxFolderId |
データ取得先のBoxフォルダーのID |
maxFileSizeMB |
同期するファイルの最大サイズ(MB) |
knowledgeBaseId |
Amazon Bedrock Knowledge BasesのID |
dataSourceId |
Amazon Bedrock Knowledge BasesのデータソースのID |
syncFilePrefixes |
同期対象のファイル名プレフィックス |
env.account |
デプロイ先のAWSアカウントID |
env.region |
デプロイ先のAWSリージョン |
設定ファイルの例:
{
"context": {
"": {
"bucketName": "your-dev-bucket-name",
"destinationS3Prefix": "docs",
"ssmParameterKey": "/box/jwt",
"boxFolderId": "your-box-folder-id",
"maxFileSizeMB": 50,
"knowledgeBaseId": "your-knowledge-base-id",
"dataSourceId": "your-data-source-id",
"syncFilePrefixes": ["sample", "sample2"],
"env": {
"account": "123456789012",
"region": "us-east-2"
}
}
}
}
4. AWS CDKによるデプロイ
設定が完了したら、AWS CDKを使ってリソースをデプロイします。
npm run cdk:deploy
5. 実行方法と動作確認
本来Step Functionsは自動でEventBridgeで毎日実行されますが、今回は動作確認のためにAWSマネジメントコンソールから手動実行します。
- AWS Step Functionsコンソールにアクセス
BoxToS3SyncStateMachine
を検索して選択- 「実行の開始」ボタンをクリック
- 実行パラメーターを入力
以下のような形でInputを設定します。
実行パラメーター詳細
設定項目 | 説明 | 必須 |
---|---|---|
intervalHours | 何時間前までの更新ファイルを対象とするか(省略時は全ファイル) | いいえ |
filePrefixes | ファイル名のプレフィックス(文字列の配列で指定) | いいえ |
KnowledgeBaseId | Amazon Bedrock Knowledge BasesのID | はい |
DataSourceId | Amazon Bedrock Knowledge BasesのデータソースのID | はい |
最後まで成功ステータスのまま実行されたら連携完了です。
実行が完了すると、BoxのファイルがS3にダウンロードされ、さらにAmazon Bedrock Knowledge Basesへの同期が開始されます。
S3バケットを確認すると、以下のように指定した条件に一致するファイルが保存されているはずです。
また、Amazon Bedrock Knowledge Basesにも正常にデータが取り込まれ、ナレッジベースとして利用可能な状態になっています。
今回はAmazon Bedrock Knowledge Basesへの同期ジョブを開始するところまでを実装しています。
実際の運用では、同期プロセスの完了ステータスを監視し、エラーが発生した場合に通知を受け取れるようにするとよいでしょう。
まとめ
今回は、BoxとAmazon Bedrock Knowledge Basesを連携させる方法を紹介しました。
この連携により、社内に蓄積されたBoxのドキュメントを簡単にAI活用できる基盤を整えることができます。
どなたかの参考になれば幸いです。