AWS Machine Learning

マネージドエンタイトルメントを使用した Amazon Bedrock のプライベート価格オファーの管理

数十から数百の AWS アカウントにわたって AI モデルへのアクセスを管理する場合、各アカウントが個別に AWS Marketplace プライベート価格オファーを承諾する必要があると、摩擦が生じます。この記事では、AWS License Manager で MPPO エンタイトルメントをアクティブ化する 2 つの方法を紹介します。1 回限りの修正に使える軽量スクリプトと、継続的なイベントドリブン処理のための CDK 自動化です。

Sequence diagram showing AWS Marketplace sending a Purchase Agreement Created - Acceptor event to Amazon EventBridge, which invokes an AWS Lambda function. The function verifies the seller, discovers the received license, creates a distributed grant, requests activation with CreateGrantVersion(Status=ACTIVE), and writes the outcome to Amazon CloudWatch Logs.
画像の出典 · AWS Machine Learning

数十から数百の AWS アカウントにわたって AI モデルへのアクセスを管理する場合、各ワークロードアカウントが個別に AWS Marketplace プライベート価格オファー (MPPO) をサブスクライブして承諾する必要があるため、運用上の摩擦が生じます。 マネージドエンタイトルメントを使用した Amazon Bedrock は、 サードパーティーの AI モデルへのマルチアカウントアクセスを簡素化し、中央のアカウントから 1 回サブスクライブするだけで、組織全体にアクセスを配布できます。

この記事では、AWS License Manager で AWS Marketplace プライベート価格オファー (MPPO) のエンタイトルメントをアクティブ化する 2 つの方法を紹介します。すでに信頼できる受信済みライセンスに対して、インフラなしで 1 回限りの修正を行いたい場合は軽量スクリプトを、seller の検証、分散グラントの作成とアクティブ化を継続的に行うイベントドリブン処理が必要な場合は CDK 自動化を使用してください。

なぜグラントのアクティブ化を自動化するのか

AWS Marketplace プライベート価格オファーを使用すると、Amazon Bedrock 上のサードパーティーモデルについてカスタムレートを交渉できます。対象となるプライベートオファーを承諾すると、AWS Marketplace は AWS License Manager にライセンスを作成します。全機能が有効化された AWS Organizations では、組織レベルのグラントは自動承諾されますが、アクティブ化するまで Disabled のままになります。

チームは多くの場合、AWS License Manager コンソールを確認し、グラントを手動でアクティブ化することでこれに対応しています。手動チェックでも機能しますが、手間がかかり見落としやすくなります。誰かがグラントをアクティブ化するまで、交渉した価格は適用されません。チームが新しいモデルを採用したり契約条件を更新したりするたびに、同じ手間が発生します。

ソリューションの概要

サンプルリポジトリには 2 つのパスが用意されています。

  • パス 1 – 軽量パス は、受信済みライセンスを一覧表示し、ドライランの計画を出力するスタンドアロンスクリプトです。 --apply --confirm-account-idを付けて再実行した場合にのみ、組織全体のグラントを作成してアクティブ化します。seller の許可リストはないため、管理アカウント内のすべての受信済みライセンスを信頼できる場合にのみ使用してください。
  • パス 2 – イベントドリブンパス は、AWS Cloud Development Kit (AWS CDK) を使用して、AWS 管理アカウントに継続的な自動化をデプロイします。

以下の実装パスのいずれかを選択してください。CDK を使わずに 1 回限りのアクティブ化を行うにはパス 1 を、継続的なイベントドリブン自動化にはパス 2 を使用します。

パス 1: 軽量スクリプト (1 回限りのアクティブ化)

CDK をデプロイせずに 1 回限りのアクティブ化が必要な場合は、このパスを使用します。このスクリプトは管理アカウント内のすべての受信済みライセンスを一覧表示するため、変更を適用する前にドライランを確認のゲートとして使用してください。

  1. サンプルリポジトリをローカルにクローンし、プロジェクトディレクトリに移動します。
    git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git
    cd sample-bedrock-managed-entitlements
  2. 軽量スクリプトをドライランモードで実行します。
    python3 lightweight/distribute_licenses.py
  3. 一覧表示されたすべてのライセンスを確認し、ISV Partner の issuer とアカウントスコープが期待どおりのプライベートオファーと一致していることを確認します。
  4. 同じ AWS Organizations 管理アカウントから、確認済みの計画を適用します。
    python3 lightweight/distribute_licenses.py --apply --confirm-account-id ACCOUNT_ID
  5. グラントがアクティブになったら、本番環境でプライベートオファーに依存する前に、請求パスを検証してください。AWS Cost Explorer の請求データには遅延が生じる可能性があるため、請求が表示された後に、対象の Amazon Bedrock 使用に対する実効課金を比較するために使用してください。繰り返し可能なチェックのためには、サンプルの scripts/bedrock_discount_check.py ユーティリティを自分の ISV Partner の issuer に合わせて調整し、期待どおりの割引パスが適用されていることを確認してください。

パス 2: CDK 自動化 (継続的なアクティブ化)

新しいプライベート価格契約を自動的に処理したい場合は、このパスを使用します。CDK スタックは、対象となる AWS Marketplace アグリーメントイベントをリッスンし、seller の許可リストを確認し、分散グラントを作成し、License Manager により多くの時間が必要な場合にはアクティブ化を再試行します。このソリューションは 3 つのコンポーネントで構成されています。

  • Amazon EventBridge ルール: スタックは、 us-east-1のデフォルトイベントバス上の AWS Marketplace アグリーメントイベントをリッスンします。ルールは source に一致します aws.agreement-marketplace 「および詳細タイプ」 Purchase Agreement Created - Acceptorその後、AWS Lambda関数を呼び出します。
  • AWS Lambda 関数「この関数はAWS Marketplaceの契約イベントを受け取り、販売者の許可リストを検証し、ライセンスを検出して、分散グラントを作成し、続いてアクティベーションを要求します。」 CreateGrantVersion(Status=ACTIVE)結果をログに記録する関数です。出力先: Amazon CloudWatch Logs 監査可能性のためです。
  • AWS License Manager のエンタイトルメント: このグラントは、あなたの組織、選択された組織単位(OU)、または特定のアカウントを対象とします。交渉された価格は、グラントがアクティブ化されて到達した後にのみ適用されます。 ACTIVE または WORKFLOW_COMPLETED.

以下の図は、イベント駆動のフローを示しています。

Sequence diagram showing AWS Marketplace sending a Purchase Agreement Created - Acceptor event to Amazon EventBridge, which invokes an AWS Lambda function. The function verifies the seller, discovers the received license, creates a distributed grant, requests activation with CreateGrantVersion(Status=ACTIVE), and writes the outcome to Amazon CloudWatch Logs.

図1: AWS Marketplace が Purchase Agreement Created – Acceptor イベントを Amazon EventBridge に送信し、EventBridge が AWS Lambda 関数を起動する様子を示すシーケンス図。この関数は販売者を検証し、受信したライセンスを検出し、分散グラントを作成し、CreateGrantVersion(Status=ACTIVE) でアクティベーションを要求し、その結果を Amazon CloudWatch Logs に書き込みます。

このアプローチの主な利点:

  • 交渉価格に至るまでの時間の短縮。 交渉されたレートは、付与された助成金が分配されて届いた後に適用されます。 ACTIVE または WORKFLOW_COMPLETED手動のコンソール確認を待たずに、。
  • アカウント全体で一貫した対応。 サードパーティのモデル付与を受け取る各組織に対して、同じAWS Lambda関数とAmazon EventBridgeルールのパターンをデプロイできるため、アクティベーションのロジックがオペレーターによって変わることはありません。
  • 監査証跡を内蔵。 すべてのアクティベーション試行やスキップ判断は CloudWatch Logs に記録され、各グラントがいつアクティブ化、延期、または無視されたかの記録を確認できます。

前提条件

このパスをデプロイする前に、次の前提条件を確認してください:

  • 次のように、AWS Organizationsの管理アカウントを使用して、 us-east-1 Python 3.12以上、AWS Command Line Interface(AWS CLI)、およびAWS CDK v2が設定されていること。
  • AWS Organizations がすべての機能を有効にしていること、およびプライベートオファーが License Manager 対応の Bedrock モデル向けであることを確認してください。Software as a service(SaaS)製品はこの自動化の対象外です。

実装手順

  1. サンプルリポジトリをローカルにクローンし、プロジェクトディレクトリに移動します。
    git clone https://github.com/aws-samples/sample-bedrock-managed-entitlements.git
    cd sample-bedrock-managed-entitlements
  2. 組織の前提条件を確認または有効にします。
    python3 scripts/bootstrap_prereqs.py --check --region us-east-1

    レビュー 任意の APPLY または MANUAL 変更を加える前に項目を確認してください。ブートストラップスクリプトは、License Manager の組織統合、License Manager の信頼されたアクセス、AWS Marketplace のライセンス管理の信頼されたアクセス、および必要なサービスリンクロールを有効にできます。

    python3 scripts/bootstrap_prereqs.py --apply --region us-east-1 --confirm-account-id ACCOUNT_ID
  3. 配置の入力を設定します。
    python3 scripts/setup_config.py

    レビュー config/sellers.json「. 組織ID、販売者の許可リスト、通知、およびオプションの付与ターゲットを設定してください。デフォルトでは、付与は組織全体がターゲットになります。Use」 grantTargets 選択した OU または AWS アカウントに許可をスコープするため。

  4. CDKスタックをデプロイします。
    cd cdk
    pip install -r requirements.txt
    cdk bootstrap aws://ACCOUNT_ID/us-east-1
    cdk deploy
  5. Amazon DynamoDB の販売者許可リストを以下からシードする: config/sellers.json.
    cd ..
    python scripts/seed_sellers.py --config config/sellers.json

    販売者許可リストはセキュリティ境界として扱ってください。テーブルにデータを投入する前に、各販売者アカウントIDを、承認済みのAWS Marketplaceプライベートオファーまたは受領したLicense Managerライセンスと照合して検証してください。幅広い、あるいは未検証の販売者エントリを追加しないでください。一致した販売者により、設定されたグラントターゲット全体でグラントの作成とアクティベーションがトリガーされる可能性があるためです。

    デプロイと sellers のシード処理が完了すると、スタックは対象の AWS Marketplace 契約イベントを処理できる状態になります。グラントの作成とアクティベーションは、許可リストに登録された検証済みの seller についてのみ実行され、アクティベーションは License Manager がグラントワークフローの処理を完了するまで延期される場合があります。

  6. デプロイされたオートメーションを検証します。
    python scripts/e2e_validate.py --org-id o-xxxxxxxxxx --seller-account SELLER_ACCOUNT_ID --simulate
  7. 対象となるAWS Marketplace契約イベントの後に、グラントの有効化を確認します。
    aws logs tail /aws/lambda/mppo-grants-handler --follow --region us-east-1
    python scripts/bedrock_discount_check.py --issuer "ISV Partner"

    有効化と請求の可視化には数時間から数日かかる場合があります。イベント駆動ワークフローがグラントを受け付けて有効化した後、AWS License Manager でグラントの状態を確認し、請求データが表示された後に AWS Cost Explorer で対象の Amazon Bedrock の使用状況を検証してください。繰り返し可能なチェックのためには、サンプルを адапadaptして scripts/bedrock_discount_check.py ISVパートナーのissuerと対象の連結アカウントに一致させるユーティリティです。

クリーンアップ

このスタックをテスト目的でデプロイした場合は、Lambda と Amazon EventBridge の少額の継続課金を避けるため、削除してください。

cdk destroy

顧客の声

「毎週数百万件の臨床医のコンサルテーションを支援する AI Care Partner として、Heidi Health はサードパーティの基盤モデルを本格的なスケールで利用しています。AWS Marketplace のプライベート料金設定により、その成長をコスト効率よく管理できるようになりました。AWS アカウントや組織単位ごとに利用量と料金を詳細に帰属させることができ、新しいモデルを導入する際にはグラント管理を自動化できます。これにより、プラットフォームチームは手作業を増やすことなくコストガバナンスをスケールできます。」

— Marcus Lau、Heidi Health プラットフォームエンジニアリング責任者

まとめ

この記事では、Amazon Bedrock のプライベート料金オファーに対してマネージドエンタイトルメントを有効化する2つの方法を紹介しました。信頼された受け入れ済みライセンスを1回だけ有効化する場合は軽量スクリプトを使用し、新しい AWS Marketplace 契約に対して継続的なイベント駆動処理が必要な場合は CDK オートメーションをデプロイしてください。どちらのアプローチも手作業を削減し、分散されたグラントが有効化された後に交渉済みの料金が適用されるようにします。

始めるには、AWS 管理アカウントで コードサンプル を試して、モデルサブスクリプションを自動化してください。

リソース


著者について

原文の出典

AWS Machine Learning

内容について

原文の公開と権利は出典元に帰属します。

機械翻訳 · 原文をご参照ください