使用 設定 AMI 產品的自訂計量 AWS Marketplace Metering Service - AWS Marketplace

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 設定 AMI 產品的自訂計量 AWS Marketplace Metering Service

AWS Marketplace Metering Service 是一項定價和計量功能,可用來依用量類別直接收取軟體費用。有五個用量類別:使用者、資料、頻寬、主機或單位。您可以使用 計量服務搭配 Amazon Machine Image (AMI) 型、容器型和軟體型服務 (SaaS) 型產品。下列各節提供如何使用 AWS Marketplace Metering Service 設定自訂計量的詳細資訊。

AWS Marketplace Metering Service 可啟用數個新案例。例如,如果您的軟體監控主機,您可以針對每個受監控主機收取費用。您可以根據主機大小有不同的價格,並按每小時監控的並行主機數量收費。同樣地,如果您的軟體允許組織中的許多使用者登入,您可以按使用者數量收費。每小時會向客戶收取佈建使用者總數的費用。

如需詳細資訊,請參閱 AWS Marketplace 計量服務 API 參考

如需整合 AWS Marketplace Metering Service API for AMI 型產品與自訂計量定價的詳細資訊,請參閱AWS Marketplace 賣方研討會自訂單位實驗室定價的列出 AMI 產品

要求

所有使用 計量服務的 AMI 型軟體都必須符合下列要求:

  • 您的軟體必須透過 Amazon Machine Image (AMI) AWS Marketplace 從 啟動。

  • 如果您有現有的產品 AWS Marketplace,則必須提交新的 AMI 並建立新的產品,才能啟用此功能。

  • 所有軟體都必須使用 AWS Identity and Access Management (IAM) 角色佈建。最終客戶必須將 IAM 角色新增至使用者使用 軟體佈建的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。當您透過 部署軟體時,可選擇是否使用 IAM 角色 AWS Marketplace。部署 AWS Marketplace Metering Service 軟體時,這是必要的。

  • 您的軟體必須能夠以某種方式判斷消耗量。

呼叫 AWS Marketplace Metering Service

您的軟體必須每小時呼叫 計量服務,並記錄該小時的耗用值。

當軟體啟動時,它應該記錄啟動時間minute-of-the-hour數。這稱為開始分鐘。每隔一小時,您的軟體必須判斷該小時的耗用值,並呼叫計量服務。如需如何取得此值的資訊,請參閱修改您的軟體以使用計量服務

若要在啟動分鐘每小時喚醒一次,您的軟體必須使用下列其中一種方法:

  • 軟體中的執行緒。

  • 以執行個體或軟體啟動的協助程式程序。

  • 應用程式啟動期間設定的 Cron 任務。

    注意

    您的軟體必須使用客戶執行個體上設定的 IAM 角色呼叫 AWS Marketplace Metering Service,並指定耗用維度和數量。

您的軟體可以使用 AWS SDK 呼叫 AWS Marketplace Metering Service,類似下列範例實作:

  1. 使用執行個體描述檔來建立服務用戶端。這需要為 EC2 執行個體設定的角色。開發套件會自動重新整理角色登入資料。

  2. 每小時讀取您的軟體組態和狀態,以判斷該小時的耗用值。這可能包括收集value-per-dimension。

  3. 使用下列參數在 SDK 用戶端上呼叫 meterUsage方法 (針對每個具有用量的維度另外呼叫 ):

    • timestamp – 記錄小時的時間戳記 (UTC)。

    • productCode – 指派給軟體的產品程式碼。

    • dimension – 指派給軟體的維度 (或維度)。

    • quantity – 小時的耗用值。

    • allocations – (選用) 您可以針對所追蹤屬性的用量提供配置。這些配置必須加總至記錄中的總耗用量。對於買方,這些會在其帳單工具 (例如 AWS Billing and Cost Management 主控台) 中顯示為潛在的成本分配標籤。買方必須在其帳戶中啟用標籤,以便使用這些標籤追蹤其成本。

此外,您的軟體必須呼叫區域內的 AWS Marketplace Metering Service 端點。您的產品必須設定正確的區域端點,因此 us-east-1 會將記錄傳送至us-east-1端點,並將記錄us-west-2傳送至us-west-2端點。進行區域內呼叫可為買方提供更穩定的體驗,並防止不相關的區域可用性可能影響在另一個區域中執行的軟體的情況。

當您將計量記錄傳送至 服務時,您必須連線到您區域中的 AWS Marketplace Metering Service。使用 getCurrentRegion() 協助程式方法來判斷 EC2 MeteringServiceClient 執行個體執行所在的區域,然後將此區域資訊傳遞給建構器。如果您未在 SDK 建構函式 AWS 區域 中指定 ,則會使用預設us-east-1區域。如果您的應用程式嘗試對服務進行跨區域呼叫,則呼叫會遭到拒絕。如需詳細資訊,請參閱判斷應用程式的目前區域getCurrentRegion()

失敗處理

您的產品必須將計量記錄傳送至公有網際網路端點服務,以便擷取用量並進行計費。由於客戶可以修改網路設定,以防止您的計量記錄交付,因此您的產品應該選擇失敗模式來考慮這一點。

注意

某些計量失敗可能是連線至 時的暫時性問題 AWS Marketplace Metering Service。 AWS Marketplace 強烈建議在指數關閉的情況下,實作重試最多 30 分鐘,以避免短期中斷或網路問題。

一般而言,軟體可能會無法開啟 (提供警告訊息,但維持完整功能) 或無法關閉 (停用應用程式中的所有功能,直到重新建立連線為止)。您可以選擇失敗開啟、關閉或特定於您應用程式的特定項目。強烈建議您避免在計量失敗不到兩個小時後關閉。

作為部分開啟失敗的範例,您可以繼續允許存取軟體,但不允許買方修改軟體設定。或者,買方仍然可以存取軟體,但無法建立其他使用者。您的軟體負責定義和強制執行此失敗模式。提交 AMI 時,必須包含您軟體的失敗模式,之後無法變更。

限制

在設計和提交啟用計量服務的軟體時,請記住這些限制:

  • 您客戶的 IAM 角色和網際網路閘道需求 – 您的客戶必須具有網際網路閘道,且必須使用具有特定許可的 IAM 角色來啟動您的軟體。如需詳細資訊,請參閱AWS Marketplace 計量和權益 API 權限。如果不符合這兩個條件,您的軟體就無法連線至 計量服務。

  • 無法新增或變更現有 Metering Service 產品的用量類別 – 當客戶訂閱您的軟體產品時,表示他們同意條款與條件。使用計量服務變更產品中的用量類別需要新的產品和新的訂閱。

  • 無法將維度變更為現有的計量服務產品 – 當客戶訂閱您的軟體產品時,表示他們同意條款與條件。使用計量服務變更產品中的維度需要新的產品和新的訂閱。您可以將新維度新增至現有產品,上限為 24。

  • 缺少免費試用和年度訂閱 – 計量服務產品不支援啟動時的免費試用和年度訂閱。

  • 多執行個體或叢集型部署考量 – 有些軟體是做為多執行個體部署的一部分進行部署。當您設計軟體時,請考慮如何測量消耗量以及發出計量記錄的位置。

程式碼範例

以下程式碼範例可協助您整合 AMI 產品與發佈和維護產品所需的 AWS Marketplace APIs。

MeterUsage 使用用量分配標記 (選用)

下列程式碼範例適用於具有耗用定價模型的 AMI 產品。Python 範例會傳送含有適當用量分配標籤的計量記錄給 AWS Marketplace ,以向您的客戶收取pay-as-you-go費用。

# 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 計量服務 API 參考》中的 MeterUsage

回應範例

{ "MeteringRecordId": "string" }