

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Marketplace Metering Service を使用したコンテナ製品のカスタム計測の設定
<a name="container-metering-meterusage"></a>

**注記**  
 Amazon EKS デプロイの場合、ソフトウェアは[サービスアカウントの IAM ロール (IRSA)](https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html)を使用して API オペレーションの [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) API コールに署名する必要があります。[EKS Pod Identity](https://docs.aws.amazon.com/eks/latest/userguide/pod-identities.html)、ノードロール、長期アクセスキーの使用はサポートされていません。  
Amazon ECS デプロイの場合、ソフトウェアは [Amazon ECS タスク IAM](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) ロールを使用して API オペレーションの [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) API コールに署名する必要があります。ノードロールまたは長期アクセスキーの使用はサポートされていません。  
Amazon Bedrock AgentCore Runtime デプロイの場合、ソフトウェアは [AgentCore Runtime 実行ロール](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-permissions.html#runtime-permissions-execution)を使用して [https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html](https://docs.aws.amazon.com/marketplace/latest/APIReference/API_marketplace-metering_MeterUsage.html) API オペレーションの API コールに署名する必要があります。長期アクセスキーはサポートされていません。

AWS Marketplace コンテナ製品では、製品ごとに最大 24 の異なる料金ディメンションでカスタム計測を行うことができます。各ディメンションには、長期契約料金を関連付けることができます。カスタム計測を有効にするには、コンテナ製品を AWS Marketplace Metering Service と統合してください。[https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html) API オペレーションを使用して、請求 AWS のために への使用量の独自の料金単位とカスタム計測を定義できます。以下のセクションでは、コンテナ製品のカスタム計測を設定する方法を示します。

料金ディメンションは 2 つの場所で定義されます。1 つは AWS Marketplace 管理ポータル (販売者ポータル) で製品を作成するとき、もう 1 つはソフトウェアで `MeterUsage` オペレーションを実行するときです。この 2 つの要素方法により、後続のオファーが一般公開される前に意図したとおりに作動することを確実にします。

カスタム計測を設定するには、使用カテゴリ、単位タイプ、料金ディメンションを選択する必要があります。
+ **使用カテゴリ** - 使用カテゴリは購入者が製品の内容とその使用方法を理解するために役立ちます。
+ **単位タイプ** - 単位タイプは請求の測定単位を定義します。例えば、GBps または MBps で測定された帯域幅、ホスト数、MB、GB、TB で測定されたデータなど。
+ **料金ディメンション** - 料金ディメンションは、個数ごとの料金を設定した機能またはサービス (ユーザー、スキャン、vCPU、デプロイされたエージェントなど) を表します。料金設定ディメンションは公開されています。ただし、公開されている製品については、引き続きプライベートオファーと Bring Your Own License (BYOL) を定義できます。計測レコードに料金設定を送信しないでください。単位の数量を計測すると、製品を作成するときに定義した料金と共にこれを使用して、購入者の請求書を計算します。

  製品の料金設定が事前定義されたカテゴリまたは単位タイプに適合しない場合は、汎用 **[単位]** カテゴリを選択できます。次に、ディメンションの説明を使用して単位が何であるかを説明します。

オプションで、追跡するプロパティごとに使用量を配分することもできます。割り当ては購入者にはタグとして表示されます。これらのタグにより、購入者はコストをタグ値別に使用量に分けて表示できます。例えば、ユーザーごとに課金し、ユーザーに「Department」プロパティがある場合、「Department」のキーを持つタグを使用して使用量の割り当てを作成し、値ごとに 1 つの割り当てを行うことができます。これによってレポートする料金、サイズ、総使用量は変更されませんが、顧客は製品に適したカテゴリ別にコストを確認できます。

1 時間ごとに計測レコードを送信することをお勧めします。ただし、日単位または月単位の使用量を集計することもできます。停止が発生した場合は、購入者ソフトウェアの使用を集約し、次の時間帯に送信できます。1 時間に複数のレコードを送信することはできません。

コンテナ製品の AWS Marketplace Metering Service API をカスタム計測料金と統合する方法の詳細については、*AWS Marketplace 販売者ワークショップ*の「カスタム[計測ラボとの統合](https://catalog.workshops.aws/mpseller/en-US/container/integrate-custom)」を参照してください。

**重要**  
無料トライアルと前払いの使用権限は、時間単位で追跡されます。その結果、これらのレコードを別々に送信すると、購入者に過大請求が発生する可能性があります。

**Topics**
+ [カスタム計測の前提条件](#custom-metering-prereqs)
+ [ECS と EKS の `MeterUsage` 統合のテスト](#testing-meterusage-integration)
+ [AgentCore の MeterUsage 統合のテスト](#testing-agentcore-metering)
+ [`MeterUsage` でのエラー処理](#custom-metering-entitlement-error-handling)
+ [(オプション) ベンダー計測タグ付け](#container-vendor-metered-tagging)
+ [コード例](#container-meter-code-example)
+ [カスタム計測を使用したコンテナ製品の AWS Marketplace Metering Service および との統合 AWS SDK for Java](java-integration-example-meterusage.md)

## カスタム計測の前提条件
<a name="custom-metering-prereqs"></a>

製品を公開する前に、次を行う必要があります。

1. で新しいコンテナ製品を作成し AWS Marketplace 管理ポータル、その製品コードを書き留めます。

1. を呼び出すために必要な IAM アクセス許可を持つアプリケーションを実行するタスク、ポッド、または AgentCore ランタイムエンドポイントに AWS Identity and Access Management (IAM) ロールを使用します`MeterUsage`。IAM マネージドポリシー `AWSMarketplaceMeteringRegisterUsage` には、これらのアクセス許可があります。このポリシーの詳細については、「*AWS マネージドポリシーリファレンス*」の「[AWSMarketplaceMeteringFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSMarketplaceMeteringFullAccess.html)」を参照してください。

1. (オプション) AWS CloudTrail ログ記録を表示するには、タスクまたはポッド定義のログ記録を有効にすることをお勧めします。

1. 定義したすべての料金ディメンションのレコードを使用して、`MeterUsage` API オペレーションをテストコールします。

## ECS と EKS の `MeterUsage` 統合のテスト
<a name="testing-meterusage-integration"></a>

にイメージを送信して公開する前に、 AWS Marketplace `MeterUsage`オペレーションを使用して統合をテストします。

で製品を一覧表示するために使用する AWS アカウント を使用して、Amazon Elastic Container Service (Amazon ECS) または Amazon Elastic Kubernetes Service (Amazon EKS) で製品を実行して、コンテナイメージ`MeterUsage`から を呼び出します AWS Marketplace。計測統合では、ハードコーディングではなく AWS リージョン、 を動的に設定する必要があります。ただし、テスト時に、米国東部 (バージニア北部) リージョンで有料コンテナを含む Amazon ECS タスクまたは Amazon EKS ポッドを少なくとも 1 つ起動して、 AWS Marketplace オペレーションチームがそのリージョンのログで作業を検証できるようにします。

**注記**  
製品が Amazon ECS と Amazon EKS の両方をサポートしている場合は、Amazon EKS を起動するだけで、統合が検証されます。
製品を一般公開する前に、および新しいディメンションを追加した後に、すべてのディメンションをテストします。コンテナ製品に関連付けられた各ディメンションの計測レコードを送信しない場合、リクエストが失敗するエラーが発生します。

製品および必要なすべてのメタデータと料金情報が公開されるまでは、統合を完全にテストすることはできません。リクエストされた場合、 AWS Marketplace カタログオペレーションチームは計測レコードの受信を確認できます。

## AgentCore の MeterUsage 統合のテスト
<a name="testing-agentcore-metering"></a>

にイメージを送信して公開する前に、 AWS Marketplace `MeterUsage`オペレーションを使用して統合をテストします。

Amazon Bedrock AgentCore で製品を一覧表示するために使用する AWS アカウントを使用して、コンテナイメージ`MeterUsage`から を呼び出します AWS Marketplace。計測統合では、ハードコーディングではなく、 AWS リージョンを動的に設定する必要があります。ただし、テスト時に、米国東部 (バージニア北部) リージョンで有料コンテナを含む Amazon Bedrock AgentCore エージェントを少なくとも 1 つ起動して、 AWS Marketplace オペレーションチームがそのリージョンのログで作業を検証できるようにします。

 時間単位の使用状況レコードを集計する必要はありません。すべてのエージェント呼び出しでその呼び出しの使用量で `MeterUsage` を呼び出します。

言語には、最新バージョンの AWS SDK を使用する必要があります。これにより、べき等性に役立つ自動生成された値が `ClientToken` パラメータに自動的に入力されます。このフィールドに入力しない SDK の以前のリリースは、Amazon Bedrock AgentCore 内からの `MeterUsage` 呼び出しでは機能しません。ネットワークの問題により、再試行時にまったく同じリクエストを再利用する必要があります。これにより、リクエストがべき等性的に扱われます。

Amazon Bedrock AgentCore と他のコンテナ製品の間で予想される計測動作が異なるため、Amazon Bedrock AgentCore と Amazon ECS または EKS で使用するために同じコンテナイメージを共有することはお勧めしません。

## `MeterUsage` でのエラー処理
<a name="custom-metering-entitlement-error-handling"></a>

コンテナの起動時に `DryRun` パラメータを true に設定する `MeterUsage` を呼び出して、計測統合が機能していることを検証します。コンテナ起動時にコンテナイメージが `MeterUsage` オペレーションを統合し、`ThrottlingException` 以外の例外を受け取る場合、コンテナイメージを終了して不正使用を防止する必要があります。

`ThrottlingException` 以外の例外は、`MeterUsage` への最初の呼び出しでのみスローされます。同じ Amazon ECS タスクまたは Amazon EKS ポッドまたは AgentCore Runtime エンドポイントからの以降の呼び出しでは、`CustomerNotSubscribedException` はスローされません。タスクまたはポッドが実行されている間に顧客がサブスクリプションを解除した場合でも同様です。これらのお客様は、サブスクリプションを解除した後で使用状況が追跡されると、実行中のコンテナに対して課金されます。

`MeterUsage` の一般的なエラーの詳細については、「AWS Marketplace Metering Service API リファレンス」の 「[MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)」を参照してください。**各 AWS SDK プログラミング言語には、追加情報を参照できる一連のエラー処理ガイドラインがあります。

## (オプション) ベンダー計測タグ付け
<a name="container-vendor-metered-tagging"></a>

ベンダー計測タグ付けは、独立系ソフトウェアベンダー (ISV) がソフトウェアの使用状況についてより詳細な情報を購入者に提供し、コスト配分を行うのに役立ちます。

**注記**  
ベンダー計測タグ付けは、Amazon Bedrock AgentCore 製品の計測リクエストではサポートされていません。

購入者のソフトウェアの使用にタグを付ける方法はいくつかあります。1 つには、コスト配分に何を期待するかを購入者にたずねます。次に、購入者のアカウントで追跡するプロパティ全体で使用量を分割できます。プロパティの例には、`AccountId`、`Business Unit`、`Cost Centers`、および商品に関連する他のメタデータが含まれます。これらのプロパティはタグとして購入者に公開されます。タグを使用すると、購入者は AWS 請求コンソール ([https://console.aws.amazon.com/costmanagement/](https://console.aws.amazon.com/costmanagement/)) のタグ値によってコストを使用量に分割して表示できます。ベンダー計測タグ付けでは、報告する価格、ディメンション、合計使用量は変わりません。お客様は商品に適したカテゴリ別にコストを確認できます。

一般的なユースケースでは、購入者が 1 つの AWS アカウントを使って商品を購読します。また、購入者には同じ製品サブスクリプションに関連するユーザーが多数います。`AccountId` のキーを持つタグを使用して使用量の割り当てを作成し、各ユーザーに使用量を割り当てることができます。この場合、購入者は Billing and Cost Management コンソールで `AccountId` タグを有効にして、個々のユーザーの使用状況を分析できます。

### 販売者のエクスペリエンス
<a name="container-vendor-metered-tag-seller"></a>

販売者は、すべてのリソースの使用量を集計する代わりに、同じタグセットを使用してリソースの計測レコードを集計できます。例えば、販売者は異なる `UsageAllocations` バケットを含む計測レコードを作成できます。各バケットは、`AccountId` や `BusinessUnit` などの、タグのセットの `UsageQuantity` を表します。

以下の図では、**[リソース 1]** には固有の `AccountId` と `BusinessUnit` タグセットがあり、**[計測レコード]** に 1 つのエントリとして表示されます。

**[リソース 2]** と **[リソース 3]** にはどちらも同じ `AccountId` タグ、`2222`、および同じ `BusinessUnit` タグ `Operations` があります。その結果、これらは **[計測レコード]** の 1 つの `UsageAllocations` エントリにまとめられます。

![ベンダーメータリングタグが使用状況データをどのように組み合わせるかを示す図。AccountIdsと BusinessUnits が異なる 3 つのリソース (リソース 1、2、3) は、AccountId と BusinessUnit 別にグループ化された UsageAllocations を含む単一の Metering Record に統合されてから、 AWS Marketplace Metering Service に送信されます。](http://docs.aws.amazon.com/ja_jp/marketplace/latest/userguide/images/seller-vendor-meter-tag.png)


また、販売者は、タグのないリソースを割り当てられた使用量の単一の `UsageAllocation` にまとめて、`UsageAllocations` のエントリの 1 つとして送信することもできます。

制限には以下が含まれます。
+ タグの数 - 5
+ `UsageAllocations` のサイズ (カーディナリティ) - 2,500

検証には次の項目が含まれます。
+ タグのキーと値に使用できる文字 - a-zA-Z0-9\+ -=.\_:\\/@
+ `UsageAllocation` リスト全体の最大タグ数 - 5
+ 2 つの `UsageAllocations` タグに同じタグ (つまり、同じタグキーと値の組み合わせ) を持つことはできません。その場合は、同じ `UsageAllocation` を使用する必要があります。
+ `UsageAllocation` の `AllocatedUsageQuantity` の合計は、総使用量である `UsageQuantity` と等しくなる必要があります。

### 購入者エクスペリエンス
<a name="container-vendor-metered-tag-buyer"></a>

次の表は、購入者が `AccountId` および `BusinessUnit` ベンダータグを有効化した後の購入者エクスペリエンスの例を示しています。

この例では、購入者は **[コスト使用状況レポート]** で割り当てられた使用量を確認できます。ベンダー計測タグにはプレフィックス `“aws:marketplace:isv”` が使用されます。購入者は、請求情報とコスト管理の、**[コスト配分タグ]**、**[AWS生成コスト配分タグ]** でそれらを有効化できます。

**[コスト使用状況レポート]** の最初と最後の行は、出品者が Metering Service に送信する内容に関係します ([販売者のエクスペリエンス](#container-vendor-metered-tag-seller) 例を参照)。


**コスト使用状況レポート (簡略版)**  

| ProductCode  | 購入者 | UsageDimension | UsageQuantity | `aws:marketplace:isv:AccountId ` | `aws:marketplace:isv:BusinessUnit` | 
| --- | --- | --- | --- | --- | --- | 
| xyz | 111122223333 | ネットワーク: 検査対象 (GB) あたり  | 70 | 2222 | オペレーション | 
| xyz | 111122223333 | ネットワーク: 検査対象 (GB) あたり  | 30 | 3333 | 財務 | 
| xyz | 111122223333 | ネットワーク: 検査対象 (GB) あたり  | 20 | 4444 | IT | 
| xyz | 111122223333 | ネットワーク: 検査対象 (GB) あたり  | 20 | 5555 | Marketing | 
| xyz | 111122223333 | ネットワーク: 検査対象 (GB) あたり  | 30 | 1111 | Marketing | 

コード例については、[使用量割り当てタグ付きの `MeterUsage` コード例 (オプション)](#container-meterusage-code-example) を参照してください。

## コード例
<a name="container-meter-code-example"></a>

次のコード例は、コンテナ製品を製品の公開と保守に必要な AWS Marketplace APIs と統合するのに役立ちます。

### 使用量割り当てタグ付きの `MeterUsage` コード例 (オプション)
<a name="container-meterusage-code-example"></a>

次のコード例は、消費料金モデルを持つコンテナ製品に関連しています。Python の例では、従量制料金を顧客に請求するために、適切な使用量割り当てタグを含む計測レコードを AWS Marketplace に送信します。

```
# NOTE: Your application will need to aggregate usage for the 
#       customer for the hour and set the quantity as seen below. 
# AWS Marketplace can only accept records for up to an hour in the past. 
#
# productCode is supplied after the AWS Marketplace Ops team has 
# published the product to limited

# Import AWS Python SDK
import boto3
import time

usageRecord = [
    { 
        "AllocatedUsageQuantity": 2, 
        "Tags": 
            [ 
                { "Key": "BusinessUnit", "Value": "IT" },
                { "Key": "AccountId", "Value": "123456789" },
            ]

    },
    { 
        "AllocatedUsageQuantity": 1, 
        "Tags": 
            [ 
                { "Key": "BusinessUnit", "Value": "Finance" },
                { "Key": "AccountId", "Value": "987654321" },
            ]

    }
]

marketplaceClient = boto3.client("meteringmarketplace")

response = marketplaceClient.meter_usage(
    ProductCode="testProduct",
    Timestamp=int(time.time()),
    UsageDimension="Dimension1",
    UsageQuantity=3,
    DryRun=False,
    UsageAllocations=usageRecord 
)
```

`MeterUsage` の詳細については、「AWS Marketplace Metering Service API リファレンス」の「[MeterUsage](https://docs.aws.amazon.com/marketplacemetering/latest/APIReference/API_MeterUsage.html)」を参照してください。**

### レスポンスの例
<a name="container-meterusage-code-response"></a>

```
{ "MeteringRecordId": "string" }
```