為使用 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參考

要求

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

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

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

  • 所有軟體都必須使用 AWS Identity and Access Management (IAM) 角色佈建。最終客戶必須將IAM角色新增至使用者使用 軟體佈建的 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體。當您透過 部署軟體時,角色的使用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執行個體設定的角色。角色登入資料會自動由 重新整理SDK。

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

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

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

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

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

    • quantity – 小時的消耗值。

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

此外,您的軟體必須呼叫區域內 AWS Marketplace 計量服務端點。您的產品必須設定正確的區域端點,因此 us-east-1 會將記錄傳送至us-east-1端點,並將記錄us-west-2傳送至us-west-2端點。進行區域內呼叫可讓買方獲得更穩定的體驗,並防止不相關的區域可用性可能影響在其他區域中執行的軟體的情況。

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

失敗處理

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

注意

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

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

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

限制

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

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

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

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

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

  • 多執行個體或叢集型部署考量 – 部分軟體會作為多執行個體部署的一部分進行部署。當您設計軟體時,請考慮如何測量耗用,以及在何處發出計量記錄。

程式碼範例

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

MeterUsage 使用用量配置標籤 (選用)

下列程式碼範例適用於具有耗用定價模型AMI的產品。Python 範例會傳送具有適當用量分配標籤的 pay-as-you-go計量記錄給 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,請參閱 計量服務參考 MeterUsage中的 。 AWS Marketplace API

回應範例

{ "MeteringRecordId": "string" }