powered by TechFeed
表示モード
ハウツー

複数部門で共用するAIのコストを部門別に分離する — Amazon Bedrockの推論プロファイルでチャージバックを実現する方法

8月14日、AWSが「Track generative AI costs with Amazon Bedrock inference profiles」と題した記事を公開した。Amazon Bedrockの推論プロファイル(inference profile)を使って複数部門の生成AIコストを部門別に可視化・管理する方法について詳しく紹介されている。「同じモデルを複数部門が使っているのに請求書には1行しか現れない」という構造的な問題を、アプリ側の変更を最小限に抑えながら解決する手法だ。課題:同一モデルを複数部門で共用するとコストが「ひとまとめ」になるHR部門がポリシー確認に使い、経理部門が財務書類の分析に使い、IT部門がインフラのトラブルシューティングに使う。同じ基盤モデルを3部門が共用しているのに、AWS請求書には1行しか現れない。これでは部門ごとのチャージバック(コスト配賦)も予算管理もできない。この問題を解決するのが Amazon Bedrock アプリケーション推論プロファイル だ。推論プロファイルは、基盤モデルにタグを付けたラッパーとして機能する。これを部門ごとに作成し、AW...

8月14日、AWSが「Track generative AI costs with Amazon Bedrock inference profiles」と題した記事を公開した。Amazon Bedrockの推論プロファイル(inference profile)を使って複数部門の生成AIコストを部門別に可視化・管理する方法について詳しく紹介されている。「同じモデルを複数部門が使っているのに請求書には1行しか現れない」という構造的な問題を、アプリ側の変更を最小限に抑えながら解決する手法だ。

課題:同一モデルを複数部門で共用するとコストが「ひとまとめ」になる

HR部門がポリシー確認に使い、経理部門が財務書類の分析に使い、IT部門がインフラのトラブルシューティングに使う。同じ基盤モデルを3部門が共用しているのに、AWS請求書には1行しか現れない。これでは部門ごとのチャージバック(コスト配賦)も予算管理もできない。

この問題を解決するのが Amazon Bedrock アプリケーション推論プロファイル だ。推論プロファイルは、基盤モデルにタグを付けたラッパーとして機能する。これを部門ごとに作成し、AWSコスト配分タグと組み合わせることで、AWS Cost Explorerに部門別のコストを独立した行として表示できる。なお、推論プロファイル経由での呼び出しでも、直接モデルを呼び出す場合とトークン単価は同一であり、コスト配賦のための追加料金は発生しない。

アーキテクチャの肝:IAMロールは1つ、コスト帰属はタグで分離

一般的な代替手法として、IAMプリンシパル(呼び出し元のIAM IDごと)にコストを帰属させる方法もある。ただしこれは、部門ごとに異なるIAM IDでBedrockを呼び出す構成が前提だ。1つのアプリケーションが全部門からのリクエストを処理する構成では、ユーザーセッション管理を部門単位で行わない限り分離できない。

推論プロファイルを使えば、単一IAMロールで運用しながら、部門ごとにタグ付きプロファイルへルーティングするだけでコスト分離が実現できる。

アプリ → ユーザーの部門を特定 → 該当部門の推論プロファイルARNにルーティング → Bedrock

ユーザー個人のIDはAWSには渡されない。コスト帰属はあくまでプロファイルのTeamタグから来る。

実装手順

必要な環境は、AWS アカウント、Bedrockのモデルアクセス許可、および Python 3.12 + boto3 1.35.7以降だ。コストデータがCost Explorerに反映されるまで24〜48時間かかる点は注意が必要。

1. 部門ごとに推論プロファイルを作成・タグ付け

Bedrockコンソールの「Inference profiles」→「Application」タブから作成する。HR・経理・ITの3部門それぞれに対して、同じ基盤モデルを指定しつつ Team=HRTeam=AccountingTeam=IT のタグを付与する。

大量のチームへ展開する場合は、AWS::Bedrock::ApplicationInferenceProfile CloudFormationリソースを使えばスケールしやすい。

2. コスト配分タグを有効化

AWS Billing and Cost Managementコンソールで Team タグをアクティブ化する。タグは大文字小文字を区別するTeamteam は別物)。マルチアカウント構成(AWS Organizations)の場合は管理(支払い)アカウントで有効化する。

3. アプリ側の変更:modelIdを推論プロファイルARNに差し替えるだけ

APIの呼び出し方は変わらない。modelIdパラメータに基盤モデルIDの代わりに推論プロファイルのARNを渡すだけだ。

import boto3
from botocore.exceptions import ClientError

client = boto3.client('bedrock-runtime', region_name='us-east-1')

DEPARTMENT_PROFILES = {
    'HR':         'arn:aws:bedrock:us-east-1:111122223333:application-inference-profile/abc123',
    'Accounting': 'arn:aws:bedrock:us-east-1:111122223333:application-inference-profile/def456',
    'IT':         'arn:aws:bedrock:us-east-1:111122223333:application-inference-profile/ghi789',
}

# 認証レイヤー(OIDC/SAMLクレーム、DBルックアップ、セッション等)から部門を取得
department = get_department_from_user_session()

if department not in DEPARTMENT_PROFILES:
    raise ValueError(f"Unknown department: {department}")

try:
    response = client.converse(
        modelId=DEPARTMENT_PROFILES[department],
        messages=[{'role': 'user', 'content': [{'text': 'Your prompt here'}]}],
        inferenceConfig={'maxTokens': 300}
    )
except ClientError as e:
    print(f"Error invoking model: {e}")
    raise

4. IAMポリシー:プロファイルと基盤モデルの両方に権限が必要

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "InvokeDepartmentInferenceProfiles",
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock:InvokeModelWithResponseStream"
      ],
      "Resource": [
        "arn:aws:bedrock:us-east-1:111122223333:application-inference-profile/*",
        "arn:aws:bedrock:us-east-1::foundation-model/<your-in-region-model-id>"
      ]
    }
  ]
}

推論プロファイル経由で呼び出す場合、プロファイルARNと基盤モデルARNの両方に権限が必要な点が見落としやすいポイントだ。プロファイルARNにワイルドカード(*)を使えば、新しい部門を追加してもIAMポリシーの変更は不要になる。

Cost Explorerでの確認

Cost Explorerで「Group by: Tag → Team」を選択すると、HR・経理・ITそれぞれのBedrockコストが色分けされた棒グラフと金額表で確認できる。

コストが48時間後も表示されない場合は、コスト配分タグがアクティブになっているか、および呼び出しが推論プロファイルのARNを通じて行われているかを確認する。

さらなる活用

記事では以下の組み合わせも紹介されている。

  • AWS Budgets による部門別の支出アラートと上限管理
  • AWS Cost Anomaly Detection による異常支出の検知
  • Amazon CloudWatch によるトークン使用量のモニタリング

新しい部門を追加する際は、タグ付きプロファイルをもう1つ作成してアプリのARNマッピングに追加するだけでよい。ワイルドカードポリシーを採用していればIAM変更も不要だ。

詳細はTrack generative AI costs with Amazon Bedrock inference profilesを参照していただきたい。