Amazon Bedrock Managed Knowledge Base に対して IngestKnowledgeBaseDocuments API は使えるのか試してみた
はじめに
クラスメソッドの内田です。
Amazon Bedrock Knowledge Base に新しく追加された Managed Knowledge Base(以下 Managed KB)に対して、ドキュメント単位で直接インジェストする API IngestKnowledgeBaseDocumentsが使えるのかを、実機で確認しました。
S3 にファイルを置いて Lambda から逐次取り込むようなリアルタイム反映構成を Managed KB で組みたい人にとっては、ここが動くかどうかで設計が大きく変わります。公式ドキュメントに明示された記述が見つからなかったので、今回試してみました。
結論
動きます。
Managed KB(type=MANAGED, embeddingModelType=MANAGED)に対して IngestKnowledgeBaseDocuments で S3 オブジェクトを直接インジェストし、数秒で INDEXED に到達、retrieve でも引ける ことを確認しました。
処理の流れはシンプル:
API 呼び出しの本体もこれだけです(KB / DS 側の設定は事前に済んでいる前提):
aws bedrock-agent ingest-knowledge-base-documents \
--knowledge-base-id <KB_ID> \
--data-source-id <DS_ID> \
--documents file://ingest-documents.json \
--region ap-northeast-1
[
{
"content": {
"dataSourceType": "S3",
"s3": {
"s3Location": {
"uri": "s3://<your-bucket>/direct-ingest/direct.md"
}
}
}
}
]
背景: なぜこの検証が必要か
通常の Bedrock Knowledge Base の取り込みは、StartIngestionJob で データソース全体をスキャンして差分取り込みする 方式です。これだと「S3 にファイルを置いた瞬間に KB に反映したい」ユースケースに対して、以下の課題があります:
- 手動で同期ボタンを押す運用は現実的でない
- EventBridge + Lambda で自動化しても、データソース全体をスキャンする方式は重い(並列実行に上限、ジョブ単位課金、反映まで数分)
そこで使いたいのが IngestKnowledgeBaseDocuments API です。これはドキュメント単位で直接インジェストする API で、S3 アップロードをトリガに 1 ファイルだけを即時取り込みできます:
Self-managed KB での事例は 神野さんの記事 に詳しく紹介されています。
一方、新しく出た Managed KB でこの API が動くか公式ドキュメントに明記がなく、石川さんの記事 でも記載が見当たりませんでした。Managed KB は登場したばかりで、従来 API との互換性は実機で確認するしかない状態だったので、今回検証しました。
検証環境
| 項目 | 値 |
|---|---|
| 検証日 | 2026-06-29 〜 2026-07-01 |
| リージョン | ap-northeast-1(東京) |
| AWS CLI | 2.35.11(後述の通り 2.34+ 必須) |
| Knowledge Base | Managed(type=MANAGED, embeddingModelType=MANAGED) |
| Data source | S3 connector(MANAGED_KNOWLEDGE_BASE_CONNECTOR)、inclusionPrefixes: ["baseline/"] |
S3 バケットには 2 つのサンプルを配置しました:
s3://<bucket>/
├── baseline/
│ └── baseline.md ← StartIngestionJob で取り込む(ベースライン)
└── direct-ingest/
└── direct.md ← IngestKnowledgeBaseDocuments で取り込む(本題)
DS の inclusionPrefixes を "baseline/" に絞った のは意図的な設計です。これにより:
baseline/baseline.mdは DS 範囲内 →StartIngestionJob(Sync)で取り込まれるdirect-ingest/direct.mdは DS 範囲外 →IngestKnowledgeBaseDocuments(本題)でのみ取り込める
という 2 経路を 1 つの KB で比較できるようにしています。「Direct Ingestion が DS の prefix 制約を無視するか」も同時に確認できる仕掛けです。
Managed KB とデータソースを作る
Managed KB を作成する
aws bedrock-agent create-knowledge-base \
--name s3kb-walkthrough-managed-20260630 \
--role-arn arn:aws:iam::<account-id>:role/<kb-role> \
--knowledge-base-configuration '{
"type": "MANAGED",
"managedKnowledgeBaseConfiguration": {
"embeddingModelType": "MANAGED"
}
}' \
--region ap-northeast-1
ポイント:
type: "MANAGED"が新タイプ(従来のVECTORとは別物)embeddingModelType: "MANAGED"で埋め込みモデルも AWS 側に任せるstorageConfigurationは指定不要(Managed KB は AWS 側でベクトルストアを自動用意)
主なレスポンス:
{
"knowledgeBase": {
"knowledgeBaseId": "6WNUV7VE7I",
"status": "CREATING",
"knowledgeBaseConfiguration": {
"type": "MANAGED",
"managedKnowledgeBaseConfiguration": {
"embeddingModelType": "MANAGED"
}
},
"createdAt": "2026-06-30T06:24:47Z"
}
}
status: CREATING で返り、約 30〜80 秒で ACTIVE に遷移します。get-knowledge-base でポーリングして状態遷移を追えます。
参考までに、コンソールから同じものを作ると以下のような画面になります。CLI で明示指定していない項目(画像抽出 ON / Max file size 500 MB / データ削除ポリシー Delete 等)は、コンソール上でもデフォルト値として反映されています:

データソースを作成する(S3 コネクタ)
Managed KB 専用の MANAGED_KNOWLEDGE_BASE_CONNECTOR 構造で作成します。self-managed KB とは JSON 構造が違うので注意です。
aws bedrock-agent create-data-source \
--knowledge-base-id <KB_ID> \
--name s3kb-walkthrough-ds-20260630 \
--data-source-configuration file://ds-managed-s3.json \
--region ap-northeast-1
{
"type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
"managedKnowledgeBaseConnectorConfiguration": {
"connectorParameters": {
"type": "S3",
"version": "1",
"connectionConfiguration": {
"bucketName": "<your-bucket>",
"bucketOwnerAccountId": "<account-id>"
},
"filterConfiguration": {
"inclusionPrefixes": ["baseline/"]
}
}
}
}
ポイント(Managed KB 特有の構造):
- 外側の
typeはMANAGED_KNOWLEDGE_BASE_CONNECTOR固定 - 内側の
connectorParameters.typeにS3を指定 bucketNameを渡す(self-managed のbucketArnではなく、バケット名そのもの)bucketOwnerAccountIdは同一アカウントでも必須(後述の「実装ではまった点」参照)filterConfiguration.inclusionPrefixesで取り込む S3 prefix を指定
主なレスポンスは以下のとおり:
{
"dataSource": {
"dataSourceId": "V6DJBLFLQ2",
"knowledgeBaseId": "6WNUV7VE7I",
"status": "CREATING",
"dataSourceConfiguration": {
"type": "MANAGED_KNOWLEDGE_BASE_CONNECTOR",
"managedKnowledgeBaseConnectorConfiguration": {
"connectorParameters": {
"type": "S3",
"connectionConfiguration": { "bucketName": "...", "bucketOwnerAccountId": "..." },
"filterConfiguration": {
"inclusionPrefixes": ["baseline/"],
"maxFileSizeInMegaBytes": "500"
},
"aclEnabled": false
},
"mediaExtractionConfiguration": {
"imageExtractionConfiguration": {
"imageExtractionStatus": "ENABLED"
}
}
}
},
"dataDeletionPolicy": "DELETE"
}
}
CLI で明示指定していない値(maxFileSizeInMegaBytes=500、aclEnabled=false、imageExtractionStatus=ENABLED、dataDeletionPolicy=DELETE)が自動補完されて返ってきます。**画像抽出はデフォルトで ON ** です。
本題: Direct Ingestion を叩く
いよいよ本題です。IngestKnowledgeBaseDocuments が Managed KB で動くか、そして DS の inclusionPrefixes 範囲外のファイルも取り込めるか を確認します。ターゲットは direct-ingest/direct.md(DS の ["baseline/"] の外)。
CLI コマンド:
aws bedrock-agent ingest-knowledge-base-documents \
--knowledge-base-id <KB_ID> \
--data-source-id <DS_ID> \
--documents file://ingest-documents.json \
--region ap-northeast-1
[
{
"content": {
"dataSourceType": "S3",
"s3": {
"s3Location": {
"uri": "s3://<your-bucket>/direct-ingest/direct.md"
}
}
}
}
]
主なレスポンス:
{
"documentDetails": [
{
"dataSourceId": "V6DJBLFLQ2",
"knowledgeBaseId": "6WNUV7VE7I",
"status": "STARTING",
"identifier": {
"dataSourceType": "S3",
"s3": {
"uri": "s3://<your-bucket>/direct-ingest/direct.md"
}
},
"updatedAt": "2026-06-30T06:39:19Z"
}
]
}
API が受理し、STARTING で応答が返ってきました。inclusionPrefixes: ["baseline/"] の範囲外なのに、エラーになりません。
ステータスをポーリングして INDEXED を確認
aws bedrock-agent get-knowledge-base-documents \
--knowledge-base-id <KB_ID> \
--data-source-id <DS_ID> \
--document-identifiers '[{"dataSourceType":"S3","s3":{"uri":"s3://<your-bucket>/direct-ingest/direct.md"}}]' \
--region ap-northeast-1
数秒後、ステータスが INDEXED に遷移すれば取り込み完了です。実測では 10 秒以内 に INDEXED に到達しました。

retrieve でヒットするかを確認
念のため retrieve API 側でも取り込み結果を確認します:
aws bedrock-agent-runtime retrieve \
--knowledge-base-id <KB_ID> \
--retrieval-query '{"text":"IngestKnowledgeBaseDocuments API と直接インジェストについて教えて"}' \
--region ap-northeast-1
direct-ingest/direct.md の内容が retrieval 結果に含まれ、検索可能な状態になっていることを確認できました。

- Test KBs の「取得のみ: データソース」モードで direct.md がスコア 0.36 でヒットしました。右ペインのメタデータに
direct-ingest/direct.mdの S3 URI が表示されています。
Sync と Direct Ingestion のざっくり比較
同じ KB で StartIngestionJob も動かして、実装選定の判断材料として比較しました:
| 観点 | Sync (StartIngestionJob) |
Direct Ingestion (IngestKnowledgeBaseDocuments) |
|---|---|---|
| 呼び出し単位 | DS 全体をスキャン | ファイル単位で指定 |
| リクエストに S3 URI を含むか | 含まない(DS 設定に依存) | 含む |
DS の inclusionPrefixes 制約 |
有効 | 効かない(URI 指定が優先) |
| 所要時間(1 ファイル) | 初回 約 2 分 32 秒、増分同期 約 30 秒 | 10 秒以内 |
| リアルタイム取り込み向き | 重い | 軽い |
Sync 側の所要時間はコンソールの同期履歴でも確認できます:

- DS 詳細画面の同期履歴。上段が 2 回目同期(変化なし、全カラム 0)、下段が初回同期(追加 = 1)
リアルタイム取り込みが要件なら Direct Ingestion 一択 という結論になります。
検証でエラーが出た点
1. AWS CLI 2.34+ 必須
2.33 以前だと、managedKnowledgeBaseConfiguration がクライアント側 botocore モデルに未登録で、API に到達する前に client 側で弾かれます:
Parameter validation failed:
Unknown parameter in knowledgeBaseConfiguration: "managedKnowledgeBaseConfiguration",
must be one of: type, vectorKnowledgeBaseConfiguration, ...
対処: brew upgrade awscli などで 2.34 以降に更新します(検証時は 2.35.11 を使用)。
2. Managed KB は MANAGED_KNOWLEDGE_BASE_CONNECTOR 専用構造
self-managed KB でよく見る type: "S3" + s3Configuration の構造は Managed KB では通りません:
ValidationException: Unsupported data source type for MANAGED knowledge base type.
上記「データソースを作成する」節の JSON 構造で書き換える必要があります。
3. bucketOwnerAccountId は同一アカウントでも必須(公式ドキュメントとの乖離)
公式ドキュメント (kb-managed-ds-s3) には以下のように書かれています:
bucketOwnerAccountId— Conditional — The AWS account ID of the bucket owner. Required for cross-account access.
しかし実機では、同一アカウントでもこのフィールドを省略すると DS が即 FAILED になります:
failureReasons:
Value at 'connectionConfiguration.bucketOwnerAccountId' failed to satisfy constraint:
Member must not be null
Managed KB で S3 コネクタを組む場合は、同一アカウントでも bucketOwnerAccountId を常に明示指定するのが安全です。
4. 自動補完されるデフォルト値、特に画像抽出は ON
CLI で mediaExtractionConfiguration を明示指定しなくても、レスポンスでは imageExtractionStatus: "ENABLED" が返ります。画像抽出はデフォルト ON です。テキスト主体のドキュメントであれば実害はないですが、画像を大量に含む PDF などを取り込む前提なら、無効化するか、コスト面を考慮に入れておく必要がありそうです(本検証ではテキスト主体のドキュメントのみで、画像抽出時のコストは実測していません)。
その他、指定しなくても自動補完される値:
| フィールド | デフォルト値 |
|---|---|
| maxFileSizeInMegaBytes | 500 |
| aclEnabled | false |
| dataDeletionPolicy | DELETE |
| imageExtractionStatus | ENABLED |
まとめ
Amazon Bedrock Managed KB に対して IngestKnowledgeBaseDocuments API が使えるかを実機で確認しました。動きます。
- Managed KB(
type=MANAGED,embeddingModelType=MANAGED)でIngestKnowledgeBaseDocumentsを叩き、S3 オブジェクトを直接インジェスト → 数秒で INDEXED に到達 → retrieve でテスト実行を確認しました - DS の
inclusionPrefixes範囲外のファイルも受理されました - Sync と比べて 1 ファイルあたりの取り込みが圧倒的に速く(10 秒以内 vs 2 分〜)、リアルタイム取り込みには Direct Ingestion 一択
- 実装レベルで気をつけたい点は本検証のスコープ内では上記4点(AWS CLI 2.34+、専用 DS 構造、
bucketOwnerAccountIdの実必須化、デフォルト値の自動補完)
未検証事項
本検証範囲では以下は確認していません。今後余力があれば追試したい部分です:
- 画像抽出 ON 状態での実際のコスト増加量
- リージョン別の挙動差(本検証は ap-northeast-1 のみ)
- 大規模ドキュメント(数百 MB 級)や PDF/画像入りドキュメントでの所要時間
IngestKnowledgeBaseDocumentsの同時実行時のスループット上限- Managed KBの精度
Amazon Bedrock Managed Knowledge Base は登場したばかりで、UI やログ周りの仕様は今後も変わる可能性があります。本記事は 2026-06-29 〜 2026-07-01 時点の実機観察に基づきます。
なお、本検証を通じてCloudTrail / retrieve メタデータの経路差など、記事の主題から外れる観察もいくつか得られました。これらは別記事で改めて整理する予定です。
参考リンク
- Amazon Bedrock Managed Knowledge Base(AWS 公式ドキュメント)
- Managed Knowledge Base の S3 connector
- Ingest documents directly into a knowledge base
- aws bedrock-agent ingest-knowledge-base-documents
- Amazon Bedrock Managed Knowledge Base 詳解(Classmethod DevelopersIO)
- Bedrock Knowledge Base の Direct Ingestion(Classmethod DevelopersIO / 神野さん)






