共用方式為


使用商業市集計量服務的 Azure 容器計量計費

透過商業市集計量服務,您可以建立根據非標準單位收費的 Azure Container 供應專案。 將供應專案發佈至商業市集之前,您可以定義計費維度,例如頻寬、分區、記錄檔、掃描、已處理的電子郵件等。客戶接著會根據這些維度的耗用量付費,您的應用程式會在發生時透過 商業市集計量服務 API 通知Microsoft可計費事件。

計量計費的必要條件

若要讓 Azure 容器供應專案使用計量付費,您必須先檢閱規劃 Azure 容器供應專案中所述的授權選項,並確定您有六個現有預先定義計費模型之一不符合的自定義計費需求。

然後,Azure Container 供應專案可以與商業市集計量服務 API 整合,以通知Microsoft可計費的事件。

重要

您的應用程式必須呼叫商業市集計量服務 API。 目前沒有選項可讓您的託管服務(應用程式外部)呼叫計量服務 API。

注意

Marketplace 計量服務僅適用於自定義計費模型,不適用於每個使用者的計費模型。

計量付費與定價的搭配方式

瞭解供應專案階層對於定義供應專案及其定價模式而言非常重要。

  • 每個供應項目都會設定為透過Microsoft銷售。 發佈供應項目之後,就無法變更此選項。
  • 每個供應項目,設定為透過Microsoft銷售,可以有一或多個方案。
  • 每個方案都有與其相關聯的定價模式: 以使用量為基礎的每月計費方案自備授權 (BYOL) 。 針對以使用量為基礎的每月計費方案,您可以選擇免費、六個預先定義的計費選項之一或自定義。
  • 發行之後,就無法更新定價模式和價格輸入選項。
  • 每個方案都必須有完整的定價方案。
  • 您可以選擇使用自定義維度來收取客戶費用,以協助滿足您的計費需求。 每個維度都代表服務使用 商業市集計量服務 API 與Microsoft通訊的計費單位。

重要

您必須追蹤程序代碼中的使用量,並只將使用量事件傳送至Microsoft,以取得您想要客戶開立發票的使用量。

注意

使用在建立供應專案時發佈的當地市場價格,以客戶的合約貨幣向客戶收取供應項目費用。 客戶支付的金額和ISV的付費金額取決於客戶交易供應專案時的外匯匯率。 深入瞭解 「我們如何轉換貨幣?」

自訂定價選項範例

例如,Contoso 是發行者,其 IP 位於其 Kubernetes 應用程式的分區化邏輯中。 Contoso 想要根據使用的分區數目向客戶收取費用。 它們也會探索其他方便且具競爭力的計費選項。 Contoso 在商業市集計劃的合作夥伴中心註冊為發行者,並想要將容器供應專案發佈給 Azure 客戶。 Contoso 有四個相關計劃,如下所述:

  • 依每小時使用的分區收費,例如 $1,000/shard/hour

    描繪每小時所使用分區費用的螢幕快照。

  • 建立一次性付款或週期性計費模型:假設 Contoso 想要向客戶收取 $449/mo 的費用,以從其應用程式使用最多 100 個記錄檔。 Contoso 的應用程式邏輯會追蹤月份的使用事件,並在 100 個記錄檔使用量的月底觸發費用。

    描繪模型化一次性付款或週期性計費的螢幕快照。

  • 模型化階層式計費:假設 Contoso 想要針對最多 100 個分區收取 $449/mo 的費用,然後針對任何超額進行分層定價。 其應用程式邏輯會追蹤月份的使用量、據此分割使用量,並在期間結束時使用以下的計量 API 報告它:

    描繪模型化階層式計費的螢幕快照。

  • 多維度計費:Contoso 也可以使用自定義計量,以符合使用多個維度進行進階計費的需求

    描繪多維度計費的螢幕快照。

根據選取的方案,取得 Contoso 容器供應專案的 Azure 客戶會根據其使用量收費。 Contoso 會計算使用量,而不傳送任何使用事件至Microsoft。 當客戶取用足夠的金額或定期使用時,Contoso 會報告使用量。 客戶不需要變更方案或執行任何不同動作。 Contoso 會測量使用量,並開始發出使用量事件,以Microsoft,以使用 商業市集計量服務 API 向超額使用量收費。 Microsoft接著向客戶收取自定義維度中發行者所指定使用量的費用。 計費會在下一個每月計費週期完成。

計費維度

每個計費維度都會定義自定義單位,ISV 可以發出使用量事件。 計費維度也可用來與客戶溝通如何使用軟體來計費。 其定義如下:

  • 標識碼:發出使用事件時所參考的不可變維度標識碼。
  • 顯示名稱:與維度相關聯的顯示名稱,例如「已傳送的簡訊」。
  • 量值單位:計費單位的描述,例如「每一簡訊」或「每 100 封電子郵件」。
  • 每單位以美元為單位的價格:維度一個單位的價格。 它可以是 0。

重要

您必須追蹤應用程式程式代碼中的使用量,並根據帳單需求將使用量事件傳送至Microsoft。

計費維度會跨供應專案的所有方案共用。 某些屬性會套用至所有計劃的維度,而其他屬性則為計劃專屬。

定義維度本身的屬性會跨供應專案的所有方案共用。 發佈供應專案之前,從任何方案的內容變更這些屬性會影響所有方案的維度定義。 發佈供應項目之後,就無法再編輯這些屬性。 這些屬性包括:

  • 識別碼
  • 顯示名稱
  • 衡量單位

維度的其他屬性是每個計劃特有的屬性,而且可以有不同的值,從計劃到計劃。 發佈計劃之前,您可以編輯這些值,而且只會影響此方案。 發佈計劃之後,這些屬性將無法再編輯。 這些屬性包括:

  • 每單位以美元為單位的價格

維度也有稱為「已啟用」的特殊概念:

  • Enabled 表示此方案參與此維度。 如果您要建立未根據這個維度傳送使用事件的新方案,您可能會想要讓此選項保持未核取狀態。 此外,第一次發行計劃之後新增的任何新維度,都會在已發行的計劃上顯示為「未啟用」。 停用的維度不會顯示在客戶看到之方案的任何維度清單中。

注意

明確支援下列案例:

  • 您可以將新的維度新增至新的計劃。 新的維度將不會針對任何已發行的計劃啟用。

設定每個支持市場每個單位的維度價格

如同其他以使用量為基礎的定價,計費維度價格可以針對每個支援的國家/地區設定。 您必須在合作夥伴中心使用定價數據匯入和導出功能,如下所示。

  1. 定義所需的維度,並標示支援哪些市場。
  2. 將此數據匯出至檔案。
  3. 新增每個國家/地區的正確價格,並在合作夥伴中心匯入檔案。

計量的使用者介面會變更,以反映維度的價格只能在檔案中看到。

描繪計量使用者介面的螢幕快照。

私人方案

如同預先定義的使用量型計費方案,具有自定義維度的方案可以設定為私人方案,只能由方案定義的物件存取。

限制

鎖定行為

由於與商業市集計量服務搭配使用的維度代表客戶如何支付服務費用,因此在您發佈維度之後,維度的所有詳細數據都無法再編輯。 請務必在發佈之前,針對計劃完整定義維度。

一旦以維度發佈供應項目之後,就無法再變更該維度的供應專案層級詳細數據:

  • 識別碼
  • 顯示名稱
  • 衡量單位

發行方案之後,就無法再變更此計劃層級的詳細數據:

  • 是否為計劃啟用維度

上限

單一供應項目可設定的維度數目上限為30個唯一維度。

Azure 容器計量計費

當發行者建立自定義計量維度以供合作夥伴中心發佈的供應專案時,應該使用計量計費 API。 對於具有自定義維度的一或多個方案來發出使用量事件的任何已購買供應專案,都需要與計量計費 API 整合。

重要

如需為 Kubernetes Apps 建立自定義計量維度的詳細資訊,請參閱 建立 Azure 容器供應專案

強制執行 TLS 1.2 附注

TLS 1.2 版會強制執行為 HTTPS 通訊的最低版本。 請確定您在程式代碼中使用這個 TLS 版本。 TLS 1.0 和 1.1 版已被取代,且拒絕連線嘗試。

計量計費單一使用量事件

發行者應該呼叫使用量事件 API,針對特定客戶購買的方案發出使用中資源使用量事件(已訂閱)。 發行供應專案時,發行者所定義之方案的每個自定義維度都會個別發出使用量事件。

每個資源和維度的行事曆日每小時只能發出一個使用量事件。 如果在一小時內取用一個以上的單位,則累積一小時內取用的所有單位,然後在單一事件中發出。 過去24小時內只能發出使用量事件。 如果您在 8:00 到 8:59:59 之間發出使用事件,並在 8:00 到 8:59:59 之間傳送另一個事件,則會拒絕為重複事件。

POSThttps://marketplaceapi.microsoft.com/api/usageEvent?api-version=<ApiVersion>

查詢參數

參數 建議
ApiVersion 使用 2018-08-31。

要求標頭:

Content-type 使用 application/json
x-ms-requestid 從客戶端追蹤要求的唯一字串值,最好是 GUID。 如果未提供此值,則會在響應標頭中產生並提供一個值。
x-ms-correlationid 用戶端上作業的唯一字串值。 此參數會將來自用戶端作業的所有事件與伺服器端上的事件相互關聯。 如果未提供此值,則會在響應標頭中產生並提供一個值。
authorization 識別進行此 API 呼叫之 ISV 的唯一存取令牌。 格式是"Bearer <access_token>"發行者擷取令牌值時,如驗證策略中的 Kubernetes 應用程式中所述。

要求本文範例:

{
  "resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted. 
  "quantity": 5.0, // how many units were consumed for the date and hour specified in effectiveStartTime, must be greater than 0 or a double integer
  "dimension": "dim1", // custom dimension identifier
  "effectiveStartTime": "2018-12-01T08:30:14", // time in UTC when the usage event occurred, from now and until 24 hours back
  "planId": "plan1", // id of the plan purchased for the offer
}

注意

針對 Kubernetes 應用程式, resourceUri 是 Kubernetes 應用程式實例的 ARM 資源 URI。

回覆

程序代碼:200
OK。 已接受使用量排放,並記錄在Microsoft端以進行進一步處理和計費。

響應承載範例:

{
  "usageEventId": <guid>, // unique identifier associated with the usage event in Microsoft records
  "status": "Accepted" // this is the only value in case of single usage event
  "messageTime": "2020-01-12T13:19:35.3458658Z", // time in UTC this event was accepted
  "resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted. For SaaS it's the subscriptionId.
  "quantity": 5.0, // amount of emitted units as recorded by Microsoft
  "dimension": "dim1", // custom dimension identifier
  "effectiveStartTime": "2018-12-01T08:30:14", // time in UTC when the usage event occurred, as sent by the ISV
  "planId": "plan1", // id of the plan purchased for the offer
}

程序代碼:400
不正確的要求。

  • 提供遺失或無效的要求數據。
  • effectiveStartTime 過去超過24小時。 事件已過期。

響應承載範例:

{
  "message": "One or more errors have occurred.",
  "target": "usageEventRequest",
  "details": [
    {
      "message": "The resourceUri is required.",
      "target": "ResourceUri",
      "code": "BadArgument"
    }
  ],
  "code": "BadArgument"
}

程序代碼:400
不正確的要求。

  • 資源 URI 先前已註冊,需要等候 24 小時再提交使用量。

響應承載範例:

{
  "message": "One or more errors have occurred.",
  "target": "usageEventRequest",
  "details": [
    {
      "message": "Invalid usage state.",
      "target": "ResourceUri",
      "code": "BadArgument"
    }
  ],
  "code": "BadArgument"
}

程序代碼:403

禁止: 未提供授權令牌、無效或已過期。

程序代碼:409
衝突。 已針對指定的資源標識碼、有效的使用日期與小時成功報告使用量事件。

響應承載範例:

{
  "additionalInfo": {
    "acceptedMessage": {
      "usageEventId": "<guid>", //unique identifier associated with the usage event in Microsoft records
      "status": "Duplicate",
      "messageTime": "2020-01-12T13:19:35.3458658Z",
      "resourceUri": "<ARM resource URI of the Kubernetes app instance>", //unique identifier of the resource against which usage is emitted.
      "quantity": 1.0,
      "dimension": "dim1",
      "effectiveStartTime": "2020-01-12T11:03:28.14Z",
      "planId": "plan1"
    }
  },
  "message": "This usage event already exist.",
  "code": "Conflict"
}

計量計費批次使用量事件

批次使用量事件 API 可讓您一次發出多個已購買資源的使用量事件。 它也可讓您發出相同資源的數個使用量事件,只要它們適用於不同的行事歷時數。 單一批次中事件的最大數目為25。

發佈: https://marketplaceapi.microsoft.com/api/batchUsageEvent?api-version=<ApiVersion>

查詢參數

參數 建議
ApiVersion 使用 2018-08-31。

要求標頭:

Content-type 使用 application/json
x-ms-requestid 從客戶端追蹤要求的唯一字串值,最好是 GUID。 如果未提供此值,則會產生一個值,並在響應標頭中提供。
x-ms-correlationid 用戶端上作業的唯一字串值。 此參數會將來自用戶端作業的所有事件與伺服器端上的事件相互關聯。 如果未提供此值,則會產生並在響應標頭中提供。
authorization 識別進行此 API 呼叫之 ISV 的唯一存取令牌。 格式是Bearer <access_token>發行者擷取令牌值時,如驗證策略中的 Kubernetes 應用程式中所述。

注意

在要求主體中,Kubernetes 應用程式的資源識別碼為 resourceUri

Kubernetes 應用程式的要求本文範例:

{
  "request": [ // list of usage events for the same or different resources of the publisher
    { // first event
      "resourceUri": "<ARM resource URI of the Kubernetes app instance>", // Unique identifier of the resource against which usage is emitted. 
      "quantity": 5.0, // how many units were consumed for the date and hour specified in effectiveStartTime, must be greater than 0 or a double integer
      "dimension": "dim1", //Custom dimension identifier
      "effectiveStartTime": "2018-12-01T08:30:14",//Time in UTC when the usage event occurred, from now and until 24 hours back
      "planId": "plan1", // id of the plan purchased for the offer
    },
    { // next event
      "resourceUri": "<ARM resource URI of the Kubernetes app instance>", 
      "quantity": 39.0, 
      "dimension": "email", 
      "effectiveStartTime": "2018-11-01T23:33:10
      "planId": "gold", // id of the plan purchased for the offer
    }
  ]
}

回覆

程序代碼:200
OK。 批次使用量排放已接受並記錄在Microsoft端,以便進一步處理和計費。 回應清單會傳回批次中每個個別事件的狀態。 您應該逐一查看響應承載,以瞭解在批次事件中傳送的每個個別使用事件回應。

響應承載範例:

{
  "count": 2, // number of records in the response
  "result": [
    { // first response
      "usageEventId": "<guid>", // unique identifier associated with the usage event in Microsoft records
      "status": "Accepted" // see list of possible statuses below,
      "messageTime": "2020-01-12T13:19:35.3458658Z", // Time in UTC this event was accepted by Microsoft,
      "resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted.
      "quantity": 5.0, // amount of emitted units as recorded by Microsoft 
      "dimension": "dim1", // custom dimension identifier
      "effectiveStartTime": "2018-12-01T08:30:14",// time in UTC when the usage event occurred, as sent by the ISV
      "planId": "plan1", // id of the plan purchased for the offer
    },
    { // second response
      "status": "Duplicate",
      "messageTime": "0001-01-01T00:00:00",
      "error": {
        "additionalInfo": {
          "acceptedMessage": {
            "usageEventId": "<guid>",
            "status": "Duplicate",
            "messageTime": "2020-01-12T13:19:35.3458658Z",
            "resourceUri": "<ARM resource URI of the Kubernetes app instance>",
            "quantity": 1.0,
            "dimension": "email",
            "effectiveStartTime": "2020-01-12T11:03:28.14Z",
            "planId": "gold"
          }
        },
        "message": "This usage event already exist.",
        "code": "Conflict"
      },
      "resourceId": "<guid2>",
      "quantity": 1.0,
      "dimension": "email",
      "effectiveStartTime": "2020-01-12T11:03:28.14Z",
      "planId": "gold"
    }
  ]
}

API 回應中 BatchUsageEvent 參考的狀態代碼描述:

狀態碼 描述
Accepted 接受。
Expired 使用量已過期。
Duplicate 提供的使用量重複。
Error 錯誤碼。
ResourceNotFound 提供的使用量資源無效。
ResourceNotAuthorized 您無權提供此資源的使用量。
ResourceNotActive 資源已暫停或從未啟用。
InvalidDimension 傳遞使用量的維度對於此供應專案/方案而言無效。
InvalidQuantity 傳遞的數量較低或等於 0。
BadArgument 輸入遺失或格式不正確。

程序代碼:400
不正確的要求。 批次包含超過25個使用事件。

程序代碼:403
禁止: 未提供授權令牌、無效或已過期。

計量計費擷取使用量事件

您可以呼叫使用量事件 API 來取得使用事件清單。 ISV 可以使用此 API 查看在特定可設定期間內張貼的使用事件,以及這些事件在呼叫 API 時的狀態。

取得: https://marketplaceapi.microsoft.com/api/usageEvents

查詢參數

參數 建議
ApiVersion 使用 2018-08-31。
usageStartDate ISO8601格式的 DateTime。 例如,2020-12-03T15:00 或 2020-12-03
UsageEndDate (選擇性) ISO8601格式的 DateTime。 預設值 = 目前日期
offerId (選擇性) 預設值 = 所有可用
planId (選擇性) 預設值 = 所有可用
維度 (選擇性) 預設值 = 所有可用
azureSubscriptionId (選擇性) 預設值 = 所有可用
reconStatus (選擇性) 預設值 = 所有可用

對帳狀態的可能值:

ReconStatus 描述
已提交 計算機分析尚未處理
已接受 與電腦分析相符
已拒絕 管線中遭到拒絕。 請連絡Microsoft支持人員以調查原因。
不相符 MarketplaceAPI 和合作夥伴中心分析數量都是非零的,但不符合
TestHeaders 以測試標頭列出的訂用帳戶,因此不在計算機分析中
DryRun 使用 SessionMode=DryRun 提交,因此不在 PC 中

要求標頭

內容類型 使用 application/json
x-ms-requestid 唯一字串值(最好是 GUID),用來追蹤來自用戶端的要求。 如果未提供此值,則會在響應標頭中產生並提供一個值。
x-ms-correlationid 用戶端上作業的唯一字串值。 此參數會將來自用戶端作業的所有事件與伺服器端上的事件相互關聯。 如果未提供此值,則會在響應標頭中產生並提供一個值。
授權 識別進行此 API 呼叫之 ISV 的唯一存取令牌。 格式是 Bearer <access_token> 發行者擷取令牌值時。
- 驗證策略中的 Kubernetes 應用程式

回覆

響應承載範例:

接受

[
  {
    "usageDate": "2020-11-30T00:00:00Z",
    "usageResourceId": "11111111-2222-3333-4444-555555555555",
    "dimension": "tokens",
    "planId": "silver",
    "planName": "Silver",
    "offerId": "mycooloffer",
    "offerName": "My Cool Offer",
    "offerType": "SaaS",
    "azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
    "reconStatus": "Accepted",
    "submittedQuantity": 17.0,
    "processedQuantity": 17.0,
    "submittedCount": 17
  }
]

已送出

[
  {
    "usageDate": "2020-11-30T00:00:00Z",
    "usageResourceId": "11111111-2222-3333-4444-555555555555",
    "dimension": "tokens",
    "planId": "silver",
    "planName": "",
    "offerId": "mycooloffer",
    "offerName": "",
    "offerType": "SaaS",
    "azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
    "reconStatus": "Submitted",
    "submittedQuantity": 17.0,
    "processedQuantity": 0.0,
    "submittedCount": 17
  }
]

失 配

[
  {
    "usageDate": "2020-11-30T00:00:00Z",
    "usageResourceId": "11111111-2222-3333-4444-555555555555",
    "dimension": "tokens",
    "planId": "silver",
    "planName": "Silver",
    "offerId": "mycooloffer",
    "offerName": "My Cool Offer",
    "offerType": "SaaS",
    "azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
    "reconStatus": "Mismatch",
    "submittedQuantity": 17.0,
    "processedQuantity": 16.0,
    "submittedCount": 17
  }
]

已拒絕

[
  {
    "usageDate": "2020-11-30T00:00:00Z",
    "usageResourceId": "11111111-2222-3333-4444-555555555555",
    "dimension": "tokens",
    "planId": "silver",
    "planName": "",
    "offerId": "mycooloffer",
    "offerName": "",
    "offerType": "SaaS",
    "azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
    "reconStatus": "Rejected",
    "submittedQuantity": 17.0,
    "processedQuantity": 0.0,
    "submittedCount": 17
  }
]

狀態代碼

代碼:403 禁止。 未提供授權令牌、無效或已過期。

開發和測試最佳做法

若要測試自定義計量排放,請實作與計量 API 的整合,為已發佈的 Kubernetes Apps 供應專案建立方案,其中包含以每個單位零價格定義的自定義維度。 並將此供應專案發佈為預覽版,因此只有有限的使用者才能存取及測試整合。

您也可以針對現有的即時供應專案使用私人方案,將測試期間此方案的存取限制為有限的物件。

取得支援

如果您有下列其中一個問題,您可以開啟支援票證。

  • 市集計量服務 API 的技術問題。
  • 由於您端發生錯誤或錯誤而需要呈報的問題(例如錯誤使用事件)。
  • 與計量計費相關的任何其他問題。

若要了解發行者支持選項,並使用 Microsoft開啟支援票證,請遵循合作夥伴中心商業市集計劃支援中的指示。