Step Functions + Lambda + Box SDKでBoxからAmazon Bedrock KnowledgeBasesにドキュメントを同期する【CDK】

Step Functions + Lambda + Box SDKでBoxからAmazon Bedrock KnowledgeBasesにドキュメントを同期する【CDK】

Clock Icon2025.04.28

はじめに

Amazon Bedrock Knowledge Basesは、Amazon Kendraと比較するとデータソースコネクタが少なく、Boxなどの外部サービスとの連携が標準では提供されていないという課題があります。
そこで今回は、BoxとAmazon Bedrock Knowledge Basesを連携させる方法としてStepFunctions + Lambda + Box SDKの組み合わせで実装を行ってみました。

今回作成したコードは以下のリポジトリで公開しています。
https://github.com/sakai-classmethod/box-to-s3-data-sync

アーキテクチャ概要

今回実装したアーキテクチャは以下のようになっています。
構成図_20250424

前提条件

  • Amazon Bedrock Knowledge Basesが作成済みであること
  • Amazon Bedrock Knowledge BasesにS3バケットがデータソースとして設定済みであること

構築

1. Boxの認証設定

まず初めに以下のドキュメントを参考にアプリの作成、JSONのダウンロードを行います。

https://ja.developer.box.com/guides/authentication/jwt/jwt-setup/

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のあるリージョンを指定してください。

JWT設定のアップロード
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リージョン

設定ファイルの例:

cdk.json
{
  "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マネジメントコンソールから手動実行します。

  1. AWS Step Functionsコンソールにアクセス
  2. BoxToS3SyncStateMachineを検索して選択
  3. 「実行の開始」ボタンをクリック
  4. 実行パラメーターを入力

以下のような形でInputを設定します。

StepFunctions実行パラメーター入力画面

実行パラメーター詳細
設定項目 説明 必須
intervalHours 何時間前までの更新ファイルを対象とするか(省略時は全ファイル) いいえ
filePrefixes ファイル名のプレフィックス(文字列の配列で指定) いいえ
KnowledgeBaseId Amazon Bedrock Knowledge BasesのID はい
DataSourceId Amazon Bedrock Knowledge BasesのデータソースのID はい

最後まで成功ステータスのまま実行されたら連携完了です。

StepFunctions実行成功画面

実行が完了すると、BoxのファイルがS3にダウンロードされ、さらにAmazon Bedrock Knowledge Basesへの同期が開始されます。
S3バケットを確認すると、以下のように指定した条件に一致するファイルが保存されているはずです。

S3バケットに同期されたファイル一覧

また、Amazon Bedrock Knowledge Basesにも正常にデータが取り込まれ、ナレッジベースとして利用可能な状態になっています。

Bedrockナレッジベース同期状態確認画面

今回はAmazon Bedrock Knowledge Basesへの同期ジョブを開始するところまでを実装しています。
実際の運用では、同期プロセスの完了ステータスを監視し、エラーが発生した場合に通知を受け取れるようにするとよいでしょう。

まとめ

今回は、BoxとAmazon Bedrock Knowledge Basesを連携させる方法を紹介しました。
この連携により、社内に蓄積されたBoxのドキュメントを簡単にAI活用できる基盤を整えることができます。
どなたかの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.