

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 集装箱产品的合同定价 AWS License Manager
<a name="container-license-manager-integration"></a>

对于采用合同定价的基于容器的产品，您可以使用 AWS License Manager 将许可证与您的产品相关联。 AWS License Manager 是一种许可证管理工具，可让您的应用程序跟踪和更新客户购买的许可证（也称为授权）。本节提供有关如何将您的产品与集成的信息 AWS License Manager。集成完成后，您可以在 AWS Marketplace上发布您的产品清单。

如果你要将 License Manager 与 AWS Marketplace 适用于亚马逊 EKS Anywhere、Amazon ECS Anywhere、Amazon Elastic Compute Cloud (Amazon EC2) 或本地基础设施的 For Containers Anywhere 产品集成，请按照中的说明进行操作。[AWS Marketplace 使用 License Manager 集成 for Container](container-anywhere-license-manager-integration.md)

有关的更多信息 AWS License Manager，请参阅《[AWS License Manager 用户指南》和《AWS CLI](https://docs.aws.amazon.com/license-manager/latest/userguide/license-manager.html)*命令参考*》一[AWS License Manager](https://docs.aws.amazon.com/cli/latest/reference/license-manager/index.html)节。

有关通过合同定价 AWS License Manager 与集装箱产品集成的更多信息，请参阅*AWS Marketplace 卖方研讨*会的 “[与前期付款集成](https://catalog.workshops.aws/mpseller/en-US/container/integrate-contract)” 实验室。

**Topics**
+ [容器产品的合同定价](#container-contracts)
+ [许可模式](#container-LM-license-models)
+ [AWS License Manager 集成先决条件](#container-LM-prereqs)
+ [将容器产品与 License Manager 集成](#container-integrate-with-LM)
+ [License Manager API 操作](#container-LM-API-calls)
+ [许可证续订和升级](#container-LM-lic-renew-upgrade)
+ [AWS Marketplace 使用 License Manager 集成 for Container](container-anywhere-license-manager-integration.md)

## 容器产品的合同定价
<a name="container-contracts"></a>

对于采用合同定价的基于集装箱的产品，根据您与客户之间的合同，提前或按照您定义的付款时间表向客户开具 AWS Marketplace 账单。之后，客户将有权使用那些资源。

要设置您的定价，请选择您向客户提供的一个或多个合同期限。您可以为每个合同期限输入不同的价格。您可以选择 1 个月、12 个月、24 个月和 36 个月的合同期限。对于私人优惠，您可以指定以月为单位的自定义持续时间（最多 144 个月）。

选择最能描述您的产品定价的类别。定价类别会显示在 AWS Marketplace 网站上。您可以选择**带宽** (GB/s, MB/s)、**数据**（GB、MB、TB）、**主机**、**请求**、**层**或**用户**。如果所有预定义的类别均无法满足您的需求，您可以选择更通用的**单位**类别。

该优惠允许向其中添加多达 24 个维度。


**示例：数据存储应用程序**  

|   | 1 个月价格 | 12 个月价格  | 24 个月价格  | 36 个月价格  | 
| --- | --- | --- | --- | --- | 
|  未加密的数据 (GB)  |  1.50 美元/GB  |  16.00 美元/GB  |  30.00 美元/GB  |  60.00 美元/GB  | 
|  加密的数据 (GB)  |  1.55 美元/GB  |  16.60 美元/GB  |  31.20 美元/GB  |  61.20 美元/GB  | 


**示例：日志监控产品**  

|   | 1 个月价格 | 12 个月价格  | 24 个月价格 | 36 个月价格 | 
| --- | --- | --- | --- | --- | 
|  基本（监控 10 台主机，监控 5 个容器）  |  100 USD  |  1000 美元  | 2000 美元  | 4000 美元 | 
|  标准（监控 20 台主机，监控 10 个容器）  |  $200  |  2000 美元  | 4000 美元  | 8000 美元 | 
|  专业（监控 40 台主机，监控 20 个容器）  |  400 美元  |  4000 美元  | 8000 美元  | 16,000 美元 | 
|  额外主机的每小时监控成本  | 10 美元  | 100 USD  |  $200 | 400 美元 | 
|  额外容器的每小时监控成本  | 10 美元  | 100 USD  |  $200 | 400 美元 | 

**注意**  
价格可以采用以下期限：1 个月、12 个月、24 个月或 36 个月。可以选择为产品提供这些选项中的一个或多个选项。期限对于每个维度都必须相同。  

**Example**  
例如，在您有`ReadOnlyUsers`和`AdminUsers`维度的情况下，如果您为其提供年度价格 ReadOnlyUsers，则还必须为`AdminUsers`其提供年度价格。


### 自动续订
<a name="ami-contracts-automatic-renewals"></a>

 当客户 AWS Marketplace 使用集装箱合同购买您的产品时，他们可以同意自动续订合同条款。客户继续按每月或按 1 年、2 年或 3 年期限支付权利费用。

客户可以随时修改续订设置。有关更多信息，请参阅《AWS Marketplace 买家指南》**中的[修改现有合同](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-container-contracts.html#modify-existing-contract)。

## 许可模式
<a name="container-LM-license-models"></a>

AWS Marketplace 与集成 AWS License Manager 支持两种许可模式：
+ [可配置许可模式](#container-LM-config-lic-model)
+ [分层许可模式](#container-LM-tiered-lic-model)

### 可配置许可模式
<a name="container-LM-config-lic-model"></a>

可配置许可证模型（也称为可量化许可证模型）在买家获得许可证后授权买家获得特定数量的资源。

您可以设置定价维度和每单位价格。然后，买家可以选择他们想要购买的资源数量。

**Example 定价维度和每单位价格**  
您可以设置定价维度（例如数据备份）和每单位价格（例如每单位 30 美元）  
买家可以选择购买 5、10 或 20 个单位。  
您的产品会跟踪和计量使用情况，以衡量消耗的资源数量。

在配置模式下，权利将通过以下两种方式之一进行计数：
+ [消耗许可证](#container-floating-lic)
+ [浮动许可证](#container-floating-lic) 

#### 消耗许可证
<a name="container-drawndown-lic"></a>

 在使用时，许可证是从允许数量的许可证池中消耗。该权利已永久签出，无法返回到许可证池。

**Example 处理有限数量的数据示例**  
用户有权处理 500 GB 的数据。当他们继续处理数据时，系统会从 500 GB 的池中消耗数量，直到所有 500 GB 的许可证都用完为止。

对于扣除许可证，您可以使用 `CheckoutLicense` API 操作来查看已消耗的许可证单位（权利）。

**Example 每年备份到 Amazon S3 的多个单位示例**  
您拥有的存储产品允许将多达 1,024 个单位的数据备份到 Amazon Simple Storage Service 中以存储一年的数据。您的应用程序可以通过使用多个 Amazon EC2 实例启动。您的应用程序具有跟踪和聚合数据的机制。您的软件在每次备份时或以固定的时间间隔使用产品 ID 调用 `CheckoutLicense` API 操作来更新消耗的数量。  
在此示例中，您的软件调用 `CheckoutLicense` API 操作以签出 10 个单位的数据。当总容量达到客户购买的备份限制时，API 调用失败。

**请求**

```
linux-machine ~]$ aws license-manager checkout-license\
--product-sku "2205b290-19e6-4c76-9eea-377d6bf7la47" \
--checkout-type "PERPETUAL" \
--key-fingerprint "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements "Name=DataConsumption, Value=l0, Unit=Count" \
--client-token "AKIAIOSFODNN7EXAMPLE"
```

**响应**

```
{"CheckoutType": "PERPETUAL",
"EntitlementsAllowed": [{
"Name": "IntermediateTier",
"Units": "None"
}],
"Expiration": "2021-04-22Tl9:02:36",
"IssuedAt": "2021-04-22Tl8:02:36",
"LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
"LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

#### 浮动许可证
<a name="container-floating-lic"></a>

 使用后，许可证将返回到允许数量的许可证池中。

对于浮动许可证，在使用资源时，应用程序使用 `CheckoutLicense` API 操作从权利池中签出权利。`CheckoutLicense` API 操作的响应包括许可证消耗令牌，该令牌是签出的唯一标识符。许可证消耗令牌可用于对已签出的权利执行其他操作，例如将其签回许可证池或延长签出时间。

在不再使用资源时，要将权利签回池中，请使用 `CheckInLicense` API 操作。

```
aws license-manager check-in-license --license-consumption-token "f1603b3c1f574b7284db84..."
```

如果未能签入权利（比如应用程序崩溃），则权利将在 60 分钟后自动签回池中。如果资源的使用时间超过 60 分钟，则只要资源在使用中，最佳实操是使用 `ExtendLicenseConsumption` API 操作保持权利从池中签出。

```
aws license-manager extend-license-consumption --license-consumption-token "f1603b3c1f574b7284..."
```

**Example 固定上限的用户数示例**  
某用户被授予应用程序 500 个并发用户的权利。当用户登录和注销时，用户会被消耗并返回到 500 个用户的池中。但是，应用程序无法从池中消耗超过 500 个用户，因为 500 个并发用户是固定上限。

对于浮动权利，您可以使用 `CheckInLicense` API 操作将许可证单位返回到权利池。

**Example 一年的并发用户数示例**  
您的产品根据并发用户数量定价。客户为 10 个用户购买了一份为期一年的许可证。客户通过提供 AWS Identity and Access Management (IAM) 权限来启动软件。当用户登录时，您的应用程序会调用 `CheckoutLicense` API 操作将数量减少 1。当用户注销时，应用程序会通过调用 `CheckInLicense` API 操作将该许可证返回到池中。如果您不调用 `CheckInLicense`，则许可证单位将在 1 小时后自动签入。

**注意**  
在以下请求中，`key-fingerprint` 不是占位符值，而是发布所有许可证时使用的指纹的实际值。

**请求**

```
aws license-manager checkout-license\
--product-sku "2205b290-19e6-4c76-9eea-377d6bf7la47" \
--checkout-type "PROVISIONAL" \
--key-fingerprint "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements "Name=ReadOnlyUSers, Value=l0, Unit=Count" \
--client-token "AKIAIOSFODNN7EXAMPLE"
```

**响应**

```
{
  "CheckoutType": "PROVISIONAL",
  "EntitlementsAllowed": [
    {
      "Name": "ReadOnlyUsers", 
      "Count": 10,
      "Units": "Count",
      "Value": "Enabled"
    }
},
  "Expiration": "2021-04-22Tl9:02: 36",
  "IssuedAt": "2021-04-22Tl8:02:36",
  "LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
  "LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

### 分层许可模式
<a name="container-LM-tiered-lic-model"></a>

分层许可模式在买家获得许可后，使买家有权使用特定级别或层的应用程序特征。

您可以为产品创建层，例如基本、中级和高级。然后，买家选择一个预定义的层。

应用程序无需跟踪或计量应用程序的使用情况。

在分层许可模式下，权利不计算在内，而是表示客户购买的服务层。

如果您想提供捆绑特征，则最好使用层。

**Example 基本、中级和高级层**  
客户可以签署软件三个可能层之一的合同：基础、中级或高级。每个层都有自己的定价。您的软件可以通过调用 `CheckoutLicense` API 操作并在请求中指定所有可能的层来识别客户已注册的层。  
请求响应包含与客户购买的层相对应的权利。基于这些信息，该软件可以预置适当的客户体验。

#### 请求
<a name="container-LM-tiered-request"></a>

```
linux-machine  ~]$ aws  license-manager   checkout-license\
--product-sku  "2205b290-19e6-4c76-9eea-377d6bf7la47"  \
--checkout-type  "PROVISIONAL"  \
--key-fingerprint  "aws:294406891311:AWS/Marketplace:issuer-fingerprint" \
--entitlements  "Name=BasicTier,  Unit=None"   "Name=IntermediateTier,  Unit=None"	\ "Name=PremiumTier, Unit=None"
```

#### 响应
<a name="container-LM-tiered-response"></a>

```
{
  "CheckoutType": "PROVISIONAL",
  "EntitlementsAllowed": [
    {
      "Name": "IntermediateTier", 
      "Units": "None"
    }
},
  "Expiration": "2021-04-22Tl9:02:36",
  "IssuedAt": "2021-04-22Tl8:02:36",
  "LicenseArn": "arn:aws:license-manager::294406891311:license:l-16bf01b...",
  "LicenseConsumptionToken": "AKIAIOSFODNN7EXAMPLE"
}
```

## AWS License Manager 集成先决条件
<a name="container-LM-prereqs"></a>

发布产品之前，您必须首先完成以下操作：

1. 在中创建新的容器产品 AWS Marketplace 管理门户，并记下其产品代码。

   有关更多信息，请参阅 [概述：创建容器产品](container-product-getting-started.md#create-container-product)。

1. 将用于运行应用程序的任务或容器组 (pod) 的IAM 角色与调用 `CheckoutLicense`、`ExtendLicenseConsumption` 和 `CheckInLicense` API 操作所需的 IAM 权限搭配使用。

   以下 IAM 策略中详细介绍了所需的 IAM 权限。

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Sid":"VisualEditorO",
            "Effect":"Allow",
            "Action":[
               "license-manager:CheckoutLicense",
               "license-manager:GetLicense",
               "license-manager:CheckInLicense",
               "license-manager:ExtendLicenseConsumption",
               "license-manager:ListReceivedLicenses"
            ],
            "Resource":"*"
         }
      ]
   }
   ```

------

1. 使用您定义的所有定价维度的记录对 `RegisterUsage` API 操作进行测试调用。

## 将容器产品与 License Manager 集成
<a name="container-integrate-with-LM"></a>

**要将基于容器的产品与 License Manager 集成，请执行以下操作：**

1. 设置 IAM 权限以调用 License Manager。有关更多信息，请参阅 [AWS License Manager 集成先决条件](#container-LM-prereqs)。

1. 下载 AWS 软件开发工具包。
**注意**  
不要在软件中配置 AWS 凭据。 AWS 当您的容器在 Amazon EC2 实例、亚马逊 ECS 任务或 Amazon EKS 容器中运行时，系统会在运行时自动获取买家证书。

1. 向您的产品添加许可证检查。

   无论在何处执行许可证检查，您的产品都可以调用 `CheckoutLicense` API 操作。要查看许可证，您的产品必须了解：

   1. 许可证的可信颁发者 (AWS Marketplace)

   1. 应用程序的产品 SKU（产品 ID）

   1. 查看此应用程序的权利

   根据您设置的定价许可证类型，API 调用会有所不同。

1. 在上发布您的产品清单 AWS Marketplace。

## License Manager API 操作
<a name="container-LM-API-calls"></a>

要管理存储在客户 License Manager 帐户中的许可证，您的软件可以使用以下 API 操作：
+ `GetLicense` – 软件可以查询的 API。它会检索已购买许可证的状态（即已过期或即将到期），并向客户发送状态通知。
+ `CheckoutLicense` – 发现用户已购买的许可证。当用户使用了一定数量的许可证时，您还可以使用 `CheckoutLicense` API 操作来更新许可证数量。使用 `CheckoutLicense`，您可以继续签出客户使用的许可证数量。当客户耗尽所有许可证时，此调用将返回错误。有关建议运行 `CheckoutLicense` 的节奏的信息，请参阅[许可证续订和升级](#container-LM-lic-renew-upgrade)。
+ `ExtendLicenseConsumption` – 如果是浮动维度，当软件签出许可证时，许可证会在 60 分钟后自动返回到池中。如果您想延长许可证的签出时间，可以使用 `ExtendLicenseConsumption` API 操作将许可证再延长 60 分钟。
+ `CheckInLicense` – 如果是浮动维度，则要将许可证返回到权利池时，请使用 `CheckInLicense` 操作。
+ `ListReceivedLicenses` API – 列出买家购买的许可证。

## 许可证续订和升级
<a name="container-LM-lic-renew-upgrade"></a>

客户可以在 AWS Marketplace 管理门户上续订或升级许可证。在他们进行额外购买后， AWS Marketplace 会生成反映新权利的新版本的许可证。您的软件使用相同的 API 操作读取新的权利。您不必在 License Manager 集成方面执行任何不同的操作即可处理续订和升级。

由于许可证续订、升级、取消等，我们建议在使用产品时该产品按固定节奏调用 `CheckoutLicense` API 操作。通过定期使用 `CheckoutLicense` API 操作，产品可以检测权利的变化，例如升级和到期。

我们建议您每 15 分钟执行一次 `CheckoutLicense` API 调用。