AMI 產品的定制計量AWS Marketplace Metering Service - AWS Marketplace

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

AMI 產品的定制計量AWS Marketplace Metering Service

AWS Marketplace 計量服務是一項定價和計量功能,賣家可以使用這項功能,依用量類別直接向軟體收費。有五種使用類別:使用者、資料、頻寬、主機或單位。您可以將計量服務與以 Amazon 機器映像 (AMI) 為基礎、以容器為基礎的軟體即服務 (SaaS) 產品搭配使用。如需詳細資訊,請參閱 AWS Marketplace 計量服務 API 參考

使用 Metering Service 的 AMI 軟體必須符合以下要求:

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

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

  • 所有軟體都必須以AWS Identity and Access Management (IAM) 角色佈建。最終客戶必須將 IAM 角色新增到使用者透過軟體佈建的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。透過部署軟體時,您可以選擇使用 IAM 角色AWS Marketplace。部署 AWS Marketplace 計量服務軟體時需要此功能。

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

使用計量服務的產品必須按照單一用量類別向客戶收費,但您最多可以定義單一類別的 24 個維度。視類別而定,軟體可依佈建的資源、並行資源或累積的資源使用量來定價。所有費用仍然由客戶每小時收取。所有使用量均使用與現有AWS Marketplace軟件相同的機制,每月計算和計費。

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

呼叫 AWS Marketplace Metering Service

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

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

若要在開始分鐘每小時醒來,您的軟體必須使用下列其中一種方法:

  • 軟體中的執行緒。

  • 隨執行個體或軟體啟動的精靈程序。

  • 在應用程式啟動期間設定的 Cron 工作。

    注意

    您的軟體必須使用在客戶執行個體上設定的 IAM 角色呼叫 AWS Marketplace 計量服務,並指定使用維度和金額。

您的軟體可以使用AWS開發套件呼叫 AWS Marketplace 計量服務,類似下列範例實作:

  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 計量服務。使用getCurrentRegion() Helper 方法判斷 EC2 執行個體執行所在的區域,然後將此區域資訊傳遞給MeteringServiceClient建構函式。如不在 SDK 建構函式AWS 區域中指定,則會使用預設值us-east-1區域。如果您的應用程式嘗試對服務進行跨區域呼叫,通話就會遭到拒絕。如需詳細資訊,請參閱決定應用程式的目前區域getCurrentRegion()

失敗處理

您的產品必須將計量記錄傳送至服務 (公用網際網路端點),以便擷取用量並計費。由於客戶可能會以防止計量記錄傳送的方式修改網路設定,因此您的產品應該透過選擇失敗模式來考慮此問題。

注意

某些計量失敗可能是連接到AWS Marketplace Metering Service. AWS Marketplace強烈建議實施最多 30 分鐘的重試,而指數退回,以避免短期中斷或網絡問題。

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

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

限制

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

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

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

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

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

  • 多執行個體或叢集型部署考量 — 部分軟體會部署為多執行個體部署的一部分。設計軟體時,請考慮測量耗用量的方式和位置,以及計量記錄的發射位置。

代碼範例

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

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" }