Amazon Bedrock Data Automation の抽出処理を AWS CLI 経由で実行してみた
こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。
みなさん Amazon Bedrock Data Automation(以後、BDA)使っていますでしょうか。
今回は API を利用して BDA のプロジェクトの作成から、データの抽出まで行ってみたいと思います。
マネジメントコンソールとの違い
BDA は AWS マネジメントコンソール経由でも、データを抽出できます。
ただし、データを抽出するドキュメントは 1 ドキュメントずつのみで、複数のドキュメントのデータを並列で抽出できないのが特徴的です。(意訳すると InvokeDataAutomationAsync
を何度も
BDA コンソールでは、非構造化コンテンツから BDA が抽出できるインサイトを簡単にテストおよびプレビューすることもできます。これらのテストは、一度に 1 つのドキュメントしか実行できません。複数のドキュメントを処理するには、「 API の使用」を参照してください。サンプルドキュメント、イメージ、動画、またはオーディオファイルをアップロードできます。コンソールには、BDA が生成できるデフォルトのインサイトと、作成したカスタムブループリントを適用するオプションが表示されます。
そのためなのか、コンソールの画面では テスト
といった表現がされています。
やってみる
それでは今回は AWS CLI を利用して、 BDA でデータ抽出をしてみます。リージョンはオレゴンリージョンを利用しました。
カスタムブループリントの作成および、プロジェクトの紐付けは行いません。(マネジメントコンソールから行った方が開発体験が良いかと個人的には思います。)
プロジェクトの作成
まずは肝となる、プロジェクトの作成を行います。プロジェクトの作成は CreateDataAutomationProject API から実行します。
まずはデフォルト値を確かめたいため、standardOutputConfiguration
, customOutputConfiguration
は設定せずに作成します。
aws bedrock-data-automation create-data-automation-project \
--region us-west-2 \
--project-name my-project \
--standard-output-configuration "{}"
プロジェクトが作成されました。
~ $ aws bedrock-data-automation create-data-automation-project \
> --region us-west-2 \
> --project-name my-project \
> --standard-output-configuration "{}"
{
"projectArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053",
"projectStage": "LIVE",
"status": "IN_PROGRESS"
}
GetDataAutomationProject API でプロジェクトを確認すると、次の設定値であることがわかります。
ドキュメント
- ページレベル、要素レベルで文章を抽出
- テキストフォーマットはマークダウン付きテキストで生成
- 出力フォーマットは JSON
イメージ
- 画像内のテキストを認識する
- 画像の要約を生成する
- 境界ボックスは有効
ビデオ
- オーディオの文字起こしを行う
- 要約などの生成は行わない
コマンド
aws bedrock-data-automation get-data-automation-project \
--region us-west-2 \
--project-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053"
~ $ aws bedrock-data-automation get-data-automation-project \
> --region us-west-2 \
> --project-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053"
{
"project": {
"projectArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053",
"creationTime": "2025-03-15T08:10:09.935000+00:00",
"lastModifiedTime": "2025-03-15T08:10:09.935000+00:00",
"projectName": "my-project",
"projectStage": "LIVE",
"standardOutputConfiguration": {
"document": {
"extraction": {
"granularity": {
"types": [
"PAGE",
"ELEMENT"
]
},
"boundingBox": {
"state": "DISABLED"
}
},
"generativeField": {
"state": "DISABLED"
},
"outputFormat": {
"textFormat": {
"types": [
"MARKDOWN"
]
},
"additionalFileFormat": {
"state": "DISABLED"
}
}
},
"image": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TEXT_DETECTION"
]
},
"boundingBox": {
"state": "ENABLED"
}
},
"generativeField": {
"state": "ENABLED",
"types": [
"IMAGE_SUMMARY"
]
}
},
"video": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TEXT_DETECTION"
]
},
"boundingBox": {
"state": "ENABLED"
}
},
"generativeField": {
"state": "ENABLED",
"types": [
"VIDEO_SUMMARY",
"CHAPTER_SUMMARY"
]
}
},
"audio": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TRANSCRIPT"
]
}
},
"generativeField": {
"state": "DISABLED"
}
}
},
"customOutputConfiguration": {},
"status": "COMPLETED"
}
}
ドキュメント分割
BDA のインプットに利用できるドキュメントには、以下の制約があります。
- PDF、JPEG、PNG をサポート
- API の場合は 500MB 以下、コンソールの場合は 200MB 以下であること
- 1 つのドキュメントは 20 ページ以内であること。ドキュメント分割すると 1,500 ページまで対応可能
- PDF
- 高さは最大40インチ、幅は最大2880ポイントまで
- パスワードで保護は不可
- JPEG 形式で 2000 枚の画像を含めることが可能
- 面内回転に対応
- 10000 ピクセル以下の解像度の画像をサポート
- ドキュメント内でドキュメントを水平に整列可能
- 縦書きは非対応
- 検出可能な最小文字サイズは 15ピクセル
- 150 Dots Per Inch の場合、8ポイントのフォントに該当する
上記のうちの 1 つのドキュメントは 20 ページ以内であること。
に対して BDA では、ドキュメント分割機能というものがサポートされています。(名前の通り、自動でドキュメントを分割する機能です)
今回はこのドキュメント分割機能を有効にしてみます。
有効化はプロジェクトの作成(CreateDataAutomationProject)または更新(UpdateDataAutomationProject)API で行います。
プロジェクトはすでに作成したため、UpdateDataAutomationProject API を利用します。
aws bedrock-data-automation update-data-automation-project \
--region us-west-2 \
--project-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053" \
--standard-output-configuration "{}" \
--override-configuration "document={splitter={state=ENABLED}}"
Command Reference を見ていると Shorthand Syntax:
というものがあり非常に便利でした。
Shorthand Syntax:
document={splitter={state=string}}
~ $ aws bedrock-data-automation update-data-automation-project \
> --region us-west-2 \
> --project-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053" \
> --standard-output-configuration "{}" \
> --override-configuration "document={splitter={state=ENABLED}}"
{
"projectArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053",
"projectStage": "LIVE",
"status": "IN_PROGRESS"
}
再び GetDataAutomationProject で確認すると overrideConfiguration
が増え、ドキュメント分割が有効になっています。
~ $ aws bedrock-data-automation get-data-automation-project \
> --region us-west-2 \
> --project-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053"
{
"project": {
"projectArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053",
"creationTime": "2025-03-15T08:10:09.935000+00:00",
"lastModifiedTime": "2025-03-15T08:41:32.779000+00:00",
"projectName": "my-project",
"projectStage": "LIVE",
"standardOutputConfiguration": {
"document": {
"extraction": {
"granularity": {
"types": [
"PAGE",
"ELEMENT"
]
},
"boundingBox": {
"state": "DISABLED"
}
},
"generativeField": {
"state": "DISABLED"
},
"outputFormat": {
"textFormat": {
"types": [
"MARKDOWN"
]
},
"additionalFileFormat": {
"state": "DISABLED"
}
}
},
"image": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TEXT_DETECTION"
]
},
"boundingBox": {
"state": "ENABLED"
}
},
"generativeField": {
"state": "ENABLED",
"types": [
"IMAGE_SUMMARY"
]
}
},
"video": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TEXT_DETECTION"
]
},
"boundingBox": {
"state": "ENABLED"
}
},
"generativeField": {
"state": "ENABLED",
"types": [
"VIDEO_SUMMARY",
"CHAPTER_SUMMARY"
]
}
},
"audio": {
"extraction": {
"category": {
"state": "ENABLED",
"types": [
"TRANSCRIPT"
]
}
},
"generativeField": {
"state": "DISABLED"
}
}
},
"customOutputConfiguration": {},
"overrideConfiguration": {
"document": {
"splitter": {
"state": "ENABLED"
}
}
},
"status": "COMPLETED"
}
}
データ抽出
それではデータの抽出を行います。
S3 バケットの作成
まずは入力元/出力先となるデータを格納する S3 バケットをそれぞれ作成します。
# 入力データ用バケットの作成
aws s3api create-bucket \
--region us-west-2 \
--bucket bda-input-cli-123456789012 \
--create-bucket-configuration LocationConstraint=us-west-2
# 出力データ用バケットの作成
aws s3api create-bucket \
--region us-west-2 \
--bucket bda-output-cli-123456789012 \
--create-bucket-configuration LocationConstraint=us-west-2
# オブジェクトの格納
curl "https://docs.aws.amazon.com/pdfs/whitepapers/latest/overview-aws-cloud-adoption-framework/overview-aws-cloud-adoption-framework.pdf" -o overview-aws-cloud-adoption-framework.pdf
aws s3 cp overview-aws-cloud-adoption-framework.pdf s3://bda-input-cli-123456789012/overview-aws-cloud-adoption-framework.pdf
curl "https://docs.aws.amazon.com/pdfs/whitepapers/latest/aws-caf-security-perspective/aws-caf-security-perspective.pdf" -o aws-caf-security-perspective.pdf
aws s3 cp aws-caf-security-perspective.pdf s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf
~ $ aws s3api create-bucket \
> --region us-west-2 \
> --bucket bda-input-cli-123456789012 \
> --create-bucket-configuration LocationConstraint=us-west-2
{
"Location": "http://bda-input-cli-123456789012.s3.amazonaws.com/"
}
~ $ aws s3api create-bucket \
> --region us-west-2 \
> --bucket bda-output-cli-123456789012 \
> --create-bucket-configuration LocationConstraint=us-west-2
{
"Location": "http://bda-output-cli-123456789012.s3.amazonaws.com/"
}
~ $ curl "https://docs.aws.amazon.com/pdfs/whitepapers/latest/overview-aws-cloud-adoption-framework/overview-aws-cloud-adoption-framework.pdf" -o overview-aws-cloud-adoption-framework.pdf
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2723k 100 2723k 0 0 9276k 0 --:--:-- --:--:-- --:--:-- 9294k
~ $
~ $ aws s3 cp overview-aws-cloud-adoption-framework.pdf s3://bda-input-cli-123456789012/overview-aws-cloud-adoption-framework.pdf
upload: ./overview-aws-cloud-adoption-framework.pdf to s3://bda-input-cli-123456789012/overview-aws-cloud-adoption-framework.pdf
~ $ curl "https://docs.aws.amazon.com/pdfs/whitepapers/latest/aws-caf-security-perspective/aws-caf-security-perspective.pdf" -o aws-caf-security-perspective.pdf
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 716k 100 716k 0 0 5257k 0 --:--:-- --:--:-- --:--:-- 5270k
~ $
~ $ aws s3 cp aws-caf-security-perspective.pdf s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf
upload: ./aws-caf-security-perspective.pdf to s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf
抽出
データの抽出は InvokeDataAutomationAsync API から行います。
aws bedrock-data-automation-runtime invoke-data-automation-async \
--region us-west-2 \
--input-configuration "s3Uri=s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf" \
--output-configuration "s3Uri=s3://bda-output-cli-123456789012/data" \
--data-automation-configuration "dataAutomationProjectArn='arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053',stage=LIVE" \
--data-automation-profile-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-profile/us.data-automation-v1"
aws bedrock-data-automation-runtime invoke-data-automation-async \
--region us-west-2 \
--input-configuration "s3Uri=s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf" \
--output-configuration "s3Uri=s3://bda-output-cli-123456789012/data" \
--data-automation-configuration "dataAutomationProjectArn='arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053',stage=LIVE" \
--data-automation-profile-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-profile/us.data-automation-v1"
~ $ aws bedrock-data-automation-runtime invoke-data-automation-async \
> --region us-west-2 \
> --input-configuration "s3Uri=s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf" \
> --output-configuration "s3Uri=s3://bda-output-cli-123456789012/data" \
> --data-automation-configuration "dataAutomationProjectArn='arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053',stage=LIVE" \
> --data-automation-profile-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-profile/us.data-automation-v1"
{
"invocationArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/2789aaa1-3f36-4f26-986d-7e754cec7c1b"
}
~ $
~ $ aws bedrock-data-automation-runtime invoke-data-automation-async \
> --region us-west-2 \
> --input-configuration "s3Uri=s3://bda-input-cli-123456789012/aws-caf-security-perspective.pdf" \
> --output-configuration "s3Uri=s3://bda-output-cli-123456789012/data" \
> --data-automation-configuration "dataAutomationProjectArn='arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053',stage=LIVE" \
> --data-automation-profile-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-profile/us.data-automation-v1"
{
"invocationArn": "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/8cd8c75d-859f-40a8-bcdd-ed0f36b962cc"
}
非同期(Async)で実行されるため、ステータスを確認するために GetDataAutomationStatus API が用意されています。
aws bedrock-data-automation-runtime get-data-automation-status \
--region us-west-2 \
--invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/2789aaa1-3f36-4f26-986d-7e754cec7c1b"
aws bedrock-data-automation-runtime get-data-automation-status \
--region us-west-2 \
--invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/8cd8c75d-859f-40a8-bcdd-ed0f36b962cc"
どちらも InProgress から Susscess となっていますね。
~ $ aws bedrock-data-automation-runtime get-data-automation-status \
> --region us-west-2 \
> --invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/2789aaa1-3f36-4f26-986d-7e754cec7c1b"
{
"status": "InProgress"
}
~ $ aws bedrock-data-automation-runtime get-data-automation-status \
> --region us-west-2 \
> --invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/8cd8c75d-859f-40a8-bcdd-ed0f36b962cc"
{
"status": "InProgress"
}
~ $ aws bedrock-data-automation-runtime get-data-automation-status --region us-west-2 --invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/2789aaa1-3f36-4f26-986d-7e754cec7c1b"
{
"status": "Success",
"outputConfiguration": {
"s3Uri": "s3://bda-output-cli-123456789012/data/2789aaa1-3f36-4f26-986d-7e754cec7c1b/job_metadata.json"
}
}
~ $ aws bedrock-data-automation-runtime get-data-automation-status --region us-west-2 --invocation-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-invocation/8cd8c75d-859f-40a8-bcdd-ed0f36b962cc"
{
"status": "Success",
"outputConfiguration": {
"s3Uri": "s3://bda-output-cli-123456789012/data/8cd8c75d-859f-40a8-bcdd-ed0f36b962cc/job_metadata.json"
}
}
当初次のように S3 バケット内の特定フォルダで InvokeDataAutomationAsync を実行できるものだと思っていましたが、どうやら1つ1つ実行する必要があるみたいでした。
つまりコンソールでは、For ループ的なことができないと言いたいのではないかと解釈しました。
~ $ aws bedrock-data-automation-runtime invoke-data-automation-async \
> --region us-west-2 \
> --input-configuration "s3Uri=s3://bda-input-cli-123456789012" \
> --output-configuration "s3Uri=s3://bda-output-cli-123456789012/data" \
> --data-automation-configuration "dataAutomationProjectArn='arn:aws:bedrock:us-west-2:123456789012:data-automation-project/6d2986332053',stage=LIVE" \
> --data-automation-profile-arn "arn:aws:bedrock:us-west-2:123456789012:data-automation-profile/us.data-automation-v1"
An error occurred (ValidationException) when calling the InvokeDataAutomationAsync operation: Unable to parse input S3 URI.
まとめ
以上、「Amazon Bedrock Data Automation の抽出処理を AWS CLI 経由で実行してみた」でした。
API 経由の場合、ドキュメントでサポートするファイルサイズ 500MB 以下と大きくなるため、その辺りも恩恵も受けられそうです。
このブログがどなたかの参考になれば幸いです。クラウド事業本部コンサルティング部のたかくに(@takakuni_)でした!