设置 Amazon Pinpoint 以通过 Amazon Kinesis 或 Amazon Data Firehose 流式传输应用程序事件数据
您可以配置 Amazon Pinpoint 以将事件数据发送到 Amazon Kinesis 流或 Amazon Data Firehose 传输流。Amazon Pinpoint 可以发送活动、旅程以及事务性电子邮件和短信的事件数据。
此部分包含有关以编程方式设置事件流式传输的信息。您也可以使用 Amazon Pinpoint 控制台来设置事件流式传输。有关使用 Amazon Pinpoint 控制台设置事件流的信息,请参阅《Amazon Pinpoint 用户指南》中的事件流设置。
先决条件
本节中的示例需要以下输入:
-
与 Amazon Pinpoint 集成并报告事件的应用程序的应用程序 ID。有关如何集成的信息,请参阅将 Amazon Pinpoint 与您的应用程序集成。
-
您的 AWS 账户中的 Kinesis 流或 Firehose 传输流的 Amazon 资源名称(ARN)。有关创建这些资源的信息,请参阅《Amazon Kinesis Data Streams 开发人员指南》中的创建和管理数据流,或者《Amazon Data Firehose 开发人员指南》中的创建 Amazon Data Firehose 传输流。
-
授权 Amazon Pinpoint 将数据发送到流的 AWS Identity and Access Management (IAM) 角色的 ARN。有关创建角色的信息,请参阅用于将事件流式传输到 Kinesis 的 IAM 角色。
AWS CLI
以下 AWS CLI 示例使用 put-event-stream 命令。此命令配置 Amazon Pinpoint 将事件发送到 Kinesis 流:
aws pinpoint put-event-stream \ --application-id
projectId
\ --write-event-stream DestinationStreamArn=streamArn
,RoleArn=roleArn
AWS SDK for Java
以下 Java 示例配置 Amazon Pinpoint 向 Kinesis 流发送事件:
public PutEventStreamResult createEventStream(AmazonPinpoint pinClient, String appId, String streamArn, String roleArn) { WriteEventStream stream = new WriteEventStream() .withDestinationStreamArn(streamArn) .withRoleArn(roleArn); PutEventStreamRequest request = new PutEventStreamRequest() .withApplicationId(appId) .withWriteEventStream(stream); return pinClient.putEventStream(request); }
此示例构建了一个 WriteEventStream
对象,它存储 Kinesis 流和 IAM 角色的 ARN。WriteEventStream
对象会传递给 PutEventStreamRequest
对象,用于将 Amazon Pinpoint 配置为流式传输特定应用程序的事件。PutEventStreamRequest
对象会传递给 Amazon Pinpoint 客户端的 putEventStream
方法。
您可以将 Kinesis 流分配给多个应用程序。如果您执行此操作,Amazon Pinpoint 从每个应用程序将使用 base64 编码的事件数据发送到流中,这使您能够将数据作为集合进行分析。以下示例方法接受应用程序 ID 的列表,它使用上一个示例方法 createEventStream
将流分配给每个应用程序:
public List<PutEventStreamResult> createEventStreamFromAppList( AmazonPinpoint pinClient, List<String> appIDs, String streamArn, String roleArn) { return appIDs.stream() .map(appId -> createEventStream(pinClient, appId, streamArn, roleArn)) .collect(Collectors.toList()); }
虽然您可以将一个流分配给多个应用程序,但不能将多个流分配给一个应用程序。