

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

# 监控和管理成本
<a name="tracking-cost"></a>

与其他任何方法一样 AWS 服务，了解您的 Amazon Cognito 配置和使用对账 AWS 单的影响非常重要。在将用户池部署到生产环境的准备过程中，为活动和资源消耗设置监控和安全防护措施。如果您知道去哪里查看费用以及哪些操作会产生额外费用，那么您就可以设置预防措施，避免账单中出现意外费用。

Amazon Cognito 会根据以下几个方面的使用情况来收费。
+ 用户池每月活跃用户数 (MAUs)-比率因[功能](cognito-sign-in-feature-plans.md)计划而异
+ 使用 OIDC 或 SAML 联合身份验证 MAUs 登录的用户池
+ 使用客户端凭证进行机器到机器 (M2M) 授权的请求量
+ 某些类别的用户池的购买使用量超过了默认配额 APIs

此外，用户池的特征（例如，电子邮件消息、短信消息和 Lambda 触发器）可能会在依赖服务中产生费用。有关完整概述，请参阅 [Amazon Cognito 定价](https://aws.amazon.com/cognito/pricing)。

## 查看和预测成本
<a name="tracking-cost-monitoring"></a>

产品发布和拓展新用户池等大批量活动会增加 MAU 计数，并对成本产生影响。提前估算新增用户数量，并实时监控活动情况。您可能会发现需要通过购买额外的配额容量来应对用户数量的增长，或者需要通过额外的安全措施来控制新增用户量。

您可以在[AWS 账单与成本管理 控制台](https://console.aws.amazon.com/billing/home)中查看和报告您的 AWS 成本。您可以在**账单和付款**部分找到最近的 Amazon Cognito 费用。在**账单**、**按服务计费**下面，筛选 `Cognito` 以查看您的使用情况。有关更多信息，请参阅 *AWS Billing 用户指南*中的[查看您的账单](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/getting-viewing-bill.html)。

要监控 API 请求速率，请在“服务配额”控制台中查看**利用率**指标。例如，客户端凭证请求显示**为 ClientAuthentication 请求率**。在您的账单中，这些请求与生成这些请求的应用程序客户端相关联。有了这些信息，您就可以在[多租户架构中](multi-tenant-application-best-practices.md)公平地将费用分摊给租户。

要获取一段时间内的 M2M 请求数量，您还可以将[AWS CloudTrail 事件发送到 CloudWatch Logs 进行](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/send-cloudtrail-events-to-cloudwatch-logs.html)分析。使用客户端凭证授予 CloudTrail `Token_POST`的事件查询您的事件。以下 CloudWatch Insights 查询返回此计数。

```
filter eventName = "Token_POST" and @message like '"grant_type":["client_credentials"]' | stats count(*)
```

## 管理 成本
<a name="tracking-cost-managing"></a>

Amazon Cognito 根据用户数量、特征使用情况和请求量来计费。以下是在 Amazon Cognito 中管理成本的一些技巧，

**不要激活不活跃的用户**  
让用户活跃的典型操作是登录、注册和密码重置。有关更详尽的列表，请参阅[每月活跃用户](quotas.md#monthly-active-users)。Amazon Cognito 不会将不活跃用户的费用计入您的账单。避免执行任何会让用户处于活动状态的操作。不[AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html)使用 API 操作，而是使用该[ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)操作查询用户。不要对包含非活跃用户的用户池进行大规模的管理操作测试。

**链接联合用户**  
与[本地用户](cognito-terms.md#terms-localuser)相比，使用 SAML 2.0 或 OpenID Connect（OIDC）身份提供者登录的用户费用更高。您可以[将这些用户链接到本地用户配置文件](cognito-user-pools-identity-federation-consolidate-users.md)。关联用户可以作为本地用户登录，并享有联合用户附带的属性和访问权限。来自 SAML 或 OIDC IdPs 的用户在一个月内仅使用关联的本地账户登录，则按本地用户计费。

**管理请求速率**  
如果您的用户池已接近配额上限，则可以考虑购买额外的容量来处理增加的请求量。您或许可以减少应用程序中的请求量。有关更多信息，请参阅 [优化请求速率以避免达到配额限制](quotas.md#optimize-quotas)。

**仅在需要新令牌时才申请新令牌**  
使用客户端凭证授予的机器对机器（M2M）授权可以应对大量令牌请求。每个新的令牌请求都会影响您的请求速率配额和账单大小。为了优化成本，请在应用程序设计中包括令牌到期设置和令牌处理。
+ [缓存访问令牌](amazon-cognito-user-pools-using-tokens-caching-tokens.md)，以便当您的应用程序请求新令牌时，它会收到先前颁发的令牌的缓存版本。实施此方法时，缓存代理充当了防护机制，防止应用程序在未意识到先前获取的令牌已过期的情况下请求访问令牌。缓存令牌非常适合 Lambda 函数和 Docker 容器等短期微服务。
+ 在您的应用程序中实施令牌处理机制，从而考虑到令牌到期情况。不要等到先前的令牌即将到期时才请求新令牌。更好的做法是，在令牌生命周期达到大约 75% 时刷新令牌。这种做法可以更大限度地延长令牌持续时间，同时确保应用程序中的用户连续性。

  评估每个应用程序的机密性和可用性需求，并将用户池应用程序客户端配置为颁发具有适当有效期的访问令牌。自定义令牌持续时间最适合使用寿命较长的服务器 APIs 以及能够持续管理凭证请求频率的服务器。

**ListUsers，不是 AdminGetUser**  
要查询用户池中用户的属性，请尽可能使用 [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)API 操作和关联的 [SDK](https://aws.amazon.com/developer/tools/) 方法。 [AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html)将用户标记为当月活跃用户，并向用于计算用户池账单的每月活跃用户 (MAUs) 做出贡献。

**管理功能计划**  
当您在用户池中选择[功能计划](cognito-sign-in-feature-plans.md)时，计费率适用于用户池 MAUs 中的所有人。如果您有部分用户不需要较高级功能计划所提供的功能，建议将他们划分到另一个用户池中。