Amazon Bedrock Data Automation の抽出処理を AWS CLI 経由で実行してみた

Amazon Bedrock Data Automation の抽出処理を AWS CLI 経由で実行してみた

Clock Icon2025.03.15

こんにちは!クラウド事業本部コンサルティング部のたかくに(@takakuni_)です。

みなさん Amazon Bedrock Data Automation(以後、BDA)使っていますでしょうか。

今回は API を利用して BDA のプロジェクトの作成から、データの抽出まで行ってみたいと思います。

マネジメントコンソールとの違い

BDA は AWS マネジメントコンソール経由でも、データを抽出できます。

ただし、データを抽出するドキュメントは 1 ドキュメントずつのみで、複数のドキュメントのデータを並列で抽出できないのが特徴的です。(意訳すると InvokeDataAutomationAsync を何度も

BDA コンソールでは、非構造化コンテンツから BDA が抽出できるインサイトを簡単にテストおよびプレビューすることもできます。これらのテストは、一度に 1 つのドキュメントしか実行できません。複数のドキュメントを処理するには、「 API の使用」を参照してください。サンプルドキュメント、イメージ、動画、またはオーディオファイルをアップロードできます。コンソールには、BDA が生成できるデフォルトのインサイトと、作成したカスタムブループリントを適用するオプションが表示されます。

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bda-blueprints-console.html

そのためなのか、コンソールの画面では テスト といった表現がされています。

2025-03-15 at 16.54.12-データオートメーション プロジェクトの詳細  Amazon Bedrock  us-east-1.png

やってみる

それでは今回は 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ポイントのフォントに該当する

https://docs.aws.amazon.com/bedrock/latest/userguide/bda-output-documents.html#bda-document-limits

上記のうちの 1 つのドキュメントは 20 ページ以内であること。 に対して BDA では、ドキュメント分割機能というものがサポートされています。(名前の通り、自動でドキュメントを分割する機能です)

https://docs.aws.amazon.com/bedrock/latest/userguide/bda-document-splitting.html

今回はこのドキュメント分割機能を有効にしてみます。

有効化はプロジェクトの作成(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}}

https://docs.aws.amazon.com/cli/latest/reference/bedrock-data-automation/update-data-automation-project.html

~ $ 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"

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bda-cris.html

~ $ 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_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.