

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

# 实施 Amazon Cognito Sync 流
<a name="cognito-streams"></a>

****  
如果您是 Amazon Cognito Sync 的新用户，请使用 [Amazon AppSync](https://www.amazonaws.cn/appsync/)。与 Amazon Cognito Sync 一样， Amazon AppSync 它是一项用于跨设备同步应用程序数据的服务。  
它允许同步用户数据，如应用程序首选项或游戏状态。它还通过允许多个用户实时同步和协作处理共享的数据，来扩展这些功能。

Amazon Cognito Streams 让开发人员能够控制和了解他们存储在 Amazon Cognito 中的数据。现在，开发人员可以配置 Kinesis 流，以便在数据更新和同步时接收事件。Amazon Cognito 可以实时向您拥有的 Kinesis 流推送每个数据集更改。

使用 Amazon Cognito Streams，您可以将所有的同步数据移动到 Kinesis，然后将其流式传输到数据仓库工具（如 Amazon Redshift），供进一步分析。要了解有关 Kinesis 的更多信息，请参阅 [Amazon Kinesis 入门](https://docs.amazonaws.cn/kinesis/latest/dev/getting-started.html)。

**配置流**

您可以在 Amazon Cognito 控制台中设置 Amazon Cognito Streams。要在 Amazon Cognito 控制台中启用 Amazon Cognito Streams，您需要选择要将它发布到哪个 Kinesis 流，以及授权 Amazon Cognito 将事件放入选定流中的 IAM 角色。

从[控制台主页](https://console.amazonaws.cn/cognito/home)：

1. 单击要为其设置 Amazon Cognito 流的身份池的名称。此时将显示身份池的 **Dashboard**（控制面板）页。

1. 在 **Dashboard**（控制面板）页的右上角，单击 **Manage Identity Pools**（管理身份池）。出现“Manage Federated Identities”（管理联合身份）页。

1. 向下滚动，并单击 **Cognito Streams**（Cognito 流），以将其展开。

1. 在 **Stream name**（流名称）下拉菜单中，选择一个现有 Kinesis 流的名称。或者，单击 **Create stream**（创建流）以创建一个流，输入流的名称和分片数量。要了解分片，以及获取有关如何估算流需要的分片数的帮助，请参阅 [Kinesis 开发人员指南](https://docs.amazonaws.cn/kinesis/latest/dev/amazon-kinesis-streams.html)。

1. 在 **Publish role (发布角色)** 下拉菜单中，选择授予 Amazon Cognito 发布流的权限的 IAM 角色。在 [Amazon IAM 控制台](https://console.amazonaws.cn/iam/home)中，单击 **Create role (创建角色)** 以创建或修改与您身份池关联的角色。

1. 在 **Stream status**（流状态）下拉菜单中，选择 **Enabled**（启用）以启用流更新。单击 **Save Changes**（保存更改）。

成功配置 Amazon Cognito Streams 之后，此身份池中数据集的所有后续更新都会发送到此流中。

**流内容**

发送到流的每个记录都代表一次同步。以下是一个发送到流的记录示例：

```
{
    "identityPoolId": "Pool Id",
    "identityId": "Identity Id",
    "dataSetName": "Dataset Name",
    "operation": "(replace|remove)",
    "kinesisSyncRecords": [
        {
            "key": "Key",
            "value": "Value",
            "syncCount": 1,
            "lastModifiedDate": 1424801824343,
            "deviceLastModifiedDate": 1424801824343,
            "op": "(replace|remove)"
        },
        ...
    ],
    "lastModifiedDate": 1424801824343,
    "kinesisSyncRecordsURL": "S3Url",
    "payloadType": "(S3Url|Inline)",
    "syncCount": 1
}
```

对大于 Kinesis 最大有效载荷大小 (1 MB) 的更新，Amazon Cognito 将包括预签名 Amazon S3 URL，其中包含更新的完整内容。

配置 Amazon Cognito Streams 之后，如果您删除 Kinesis 流或更改角色信任权限，使得 Amazon Cognito Sync 不再代入该角色，则您将禁用 Amazon Cognito 流。您必须重新创建 Kinesis 流或修复角色，然后必须重新启用此流。

**批量发布**

配置 Amazon Cognito Streams 之后，您能够对身份池中的现有数据执行批量发布操作。通过控制台或直接通过 API 启动批量发布操作之后，Amazon Cognito 会开始将此数据发布到接收更新的同一流中。

Amazon Cognito 不保证在使用批量发布操作时发送到流的数据具有唯一性。您可能会收到两个相同的更新，一个来自更新操作，一个属于批量发布。在处理来自流的记录时，请记住这一点。

要批量发布所有流，请执行“配置流”下的步骤 1-6，然后单击“Start bulk publish”（开始批量发布）。任何特定时间都只能有一个正在进行的批量发布操作，且每 24 小时只能有一次成功的批量发布请求。