导出 CRM 事件 (S3)
将 FlareLane 中产生的消息发送、送达、点击等 CRM 事件每日自动导出到客户的 Amazon S3 存储桶的功能。导出的数据以 Parquet 格式存储,因此您可以将其写入公司内部的数据仓库或 BI 工具,从而对营销活动效果进行精细分析。
设置只需最初进行一次即可。在客户的 AWS 账户中创建 IAM Role,将写入权限委托给 FlareLane,然后在 FlareLane 控制台中输入目标存储桶和权限信息,从次日起便会自动写入数据。
| 项目 | 内容 |
|---|---|
| 执行周期 | 每天 KST 03:00 自动执行(不支持手动执行) |
| 目标时段 | 以项目 timezone 为准的前一天 00:00 ~ 24:00(默认值 Asia/Seoul) |
| 目标存储 | Amazon S3(目前不支持 GCS、Azure Blob 等其他云) |
| 文件格式 | Parquet(snappy 压缩) |
| 认证方式 | AWS STS cross-account AssumeRole。通过 ExternalId 验证项目 ID,以防止 confused deputy 攻击。 |
导出的文件按以下路径规则存储。
s3://<bucket>/<prefix>/<YYYY-MM-DD>/<YYYYMMDDHHMMSS>_part_<NNN>.parquet
// e.g. s3://my-flarelane-export/crm/2026-05-14/20260515030412_part_001.parquet可对接的事件类型
Section titled “可对接的事件类型”设置时,您可以在以下列表中自由选择要导出的事件(至少需选择 1 个)。未选择类型的事件将被排除在导出对象之外。
| 类别 | 事件类型 |
|---|---|
| 推送 (Push) | push.sent, push.aborted, push.failed, push.clicked |
| 短信 (SMS) | sms.sent, sms.aborted, sms.failed, sms.delivered, sms.undelivered |
| KakaoTalk 通知消息 | kakaoalimtalk.sent, kakaoalimtalk.aborted, kakaoalimtalk.failed,kakaoalimtalk.delivered,kakaoalimtalk.undelivered |
| KakaoTalk 品牌消息 | kakaobrandmessage.sent,kakaobrandmessage.aborted,kakaobrandmessage.failed,kakaobrandmessage.delivered,kakaobrandmessage.undelivered |
| 电子邮件 (Email) | email.sent, email.aborted, email.failed, email.delivered, email.opened, email.clicked, email.complaint |
| 应用内消息 (In-App Message) | iam.displayed, iam.clicked, iam.closed |
在开始设置之前,请准备好以下项目。
| 项目 | 说明 |
|---|---|
| Amazon S3 存储桶 | 用于写入导出数据的存储桶。建议使用专用于 CRM 事件的单独存储桶。 |
| CloudFormation 堆栈 / IAM Role 创建权限 | 在客户 AWS 账户中执行第 2 步时需要。 |
| 项目 ID | 可在控制台的项目设置页面中查看。用作 IAM Role Trust Policy 的 ExternalId 条件值。 |
| FlareLane Glue Role ARN | 由 FlareLane 单独提供的值。用作 IAM Role Trust Policy 的 Principal。 |
| KMS 密钥 ARN | (可选)仅当目标存储桶使用 SSE-KMS(客户托管密钥)加密时才需要。若为 SSE-S3 默认加密则无需提供。 |
设置时使用的 CloudFormation 模板。请通过下方按钮下载,并在第 2 步中使用。
下载 iam-role.yaml
第 1 步:准备 S3 存储桶
Section titled “第 1 步:准备 S3 存储桶”在客户的 AWS 账户中准备导出目标 S3 存储桶。重复使用现有存储桶也无妨,但建议使用专用于 CRM 事件的单独存储桶。
第 2 步:创建 IAM Role · Policy
Section titled “第 2 步:创建 IAM Role · Policy”创建 IAM Role 和权限,使 FlareLane 的 Glue Job 能够向客户 S3 存储桶写入数据,并在写入后清理临时文件(rename·cleanup)。请从以下两种方法中选择一种。
方法 A — CloudFormation 模板(推荐)
Section titled “方法 A — CloudFormation 模板(推荐)”- 通过上方的
iam-role.yaml下载按钮下载模板。 - 进入 AWS 控制台的 CloudFormation → Create stack → With new resources (standard),通过 Upload a template file 上传
iam-role.yaml。 - 输入以下参数。
| 参数 | 说明 |
|---|---|
ProjectId | FlareLane 项目 ID。用作 Trust Policy 的 ExternalId。 |
DestinationBucketName | 第 1 步中准备的 S3 存储桶名称 |
FlarelaneGlueRoleArn | FlareLane 提供的 Glue Role ARN |
KmsKeyArn | (可选)仅当存储桶使用 SSE-KMS 加密时才输入。若为 SSE-S3 则留空。 |
- 在最后的检查步骤中勾选 "I acknowledge that AWS CloudFormation might create IAM resources with custom names" 复选框,然后创建堆栈。
- 堆栈创建完成后,在 Outputs 选项卡中复制
RoleArn值。该值将用于第 3 步的控制台输入。 - (仅限 SSE-KMS 存储桶) 复制 Outputs 选项卡中的
KmsKeyPolicyStatementJSON,将其作为 Statement 添加到该 KMS 密钥的 Key policy 中(KMS 控制台 → 客户托管密钥 → 选择密钥 → 编辑密钥策略)。跨账户 KMS 访问仅靠 IAM 权限不够,还必须在密钥策略中将该 Role 允许为Principal。
方法 B — 手动设置
Section titled “方法 B — 手动设置”如果不使用 CloudFormation,而是在控制台中直接配置,请按以下顺序操作。
(1) 创建 IAM Role
- 进入 AWS 控制台的 IAM → Roles → Create role。
- Trusted entity type 选择 Custom trust policy,并将以下 JSON 原样粘贴。请将两处占位符替换为实际值。
<FLARELANE_GLUE_ROLE_ARN>:FlareLane 提供的值<FLARELANE_PROJECT_ID>:FlareLane 项目 ID
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<FLARELANE_GLUE_ROLE_ARN>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<FLARELANE_PROJECT_ID>" } } } ]}- 自由输入 Role 名称(例如
flarelane-crm-export-role)并创建。
(2) 授予 S3 内联策略
- 在所创建 Role 的详情页面中选择 Add permissions → Create inline policy。
- 将策略编辑器切换为 JSON 模式并粘贴以下 JSON。请将
<DESTINATION_BUCKET>替换为第 1 步中准备的存储桶名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<DESTINATION_BUCKET>", "arn:aws:s3:::<DESTINATION_BUCKET>/*" ] } ]}- 自由输入策略名称(例如
flarelane-crm-export-policy)并保存。
(3) 授予 KMS 权限 — 仅限 SSE-KMS 存储桶
如果目标存储桶使用 KMS 客户托管密钥加密,那么除上述策略外,还需额外设置以下两项。
- 向 Role 授予 KMS 权限(
kms:GenerateDataKey、kms:Decrypt),并将Resource指定为该密钥 ARN。 - 在该 KMS 密钥的 Key policy 中也添加一条将该 Role 允许为
Principal的 Statement。跨账户 KMS 访问仅靠 IAM 权限不够,密钥策略的允许必须一并配置。
第 3 步:在 FlareLane 控制台中输入设置
Section titled “第 3 步:在 FlareLane 控制台中输入设置”在 FlareLane 控制台的 项目设置 → CRM 事件导出 页面中输入以下值。
| 字段 | 说明 |
|---|---|
| 是否启用 | 开启/关闭导出操作 |
| S3 存储桶名称 | 第 1 步中准备的存储桶名称 |
| S3 路径 prefix | 存储桶内的路径 prefix(可选) |
| IAM Role ARN | 第 2 步中创建的 Role 的 ARN(方法 A 为堆栈 Outputs 的 RoleArn) |
| 要导出的事件类型 | 从上述 可对接的事件类型 中选择 |
保存后开启启用开关,从下一次 KST 03:00 起便会自动开始导出。
第 4 步:确认运行
Section titled “第 4 步:确认运行”启用后的次日 KST 03:00 ~ 03:30 之间会进行首次执行。请在当天上午确认以下内容。
- 确认目标 S3 存储桶中是否已创建
<prefix>/<昨天日期>/目录。 - 确认目录中是否存在
<YYYYMMDDHHMMSS>_part_001.parquet格式的文件。 - 打开 Parquet 文件,检查前一天产生的事件是否已正常写入。
如果目录未创建,请确认以下项目。
- 前一天是否实际存在相应事件(若没有,则连空目录也不会创建)
- 所选 要导出的事件类型 筛选器中是否包含该事件
- IAM Role Trust Policy 的
sts:ExternalId值是否与本人的项目 ID 一致 - IAM Policy 的
ResourceARN 是否与实际存储桶名称一致 - (SSE-KMS 存储桶时)KMS 密钥的 Key policy 中是否已将 export Role 允许为
Principal
如果以上项目均正常但数据仍未写入,请联系 FlareLane 客户支持团队。
Q. 能否一次性获取功能启用之前的历史数据?
不支持。从启用时点之后的"前一天"数据开始,按每日单位写入。如果需要历史时段的数据,请联系 FlareLane 客户支持团队。
Q. 昨天的数据是空的。
很可能是以下两种情况之一。
- 该日期没有产生 CRM 事件(这种情况下连 S3 目录本身都不会创建)
- 产生的事件类型未包含在 要导出的事件类型 筛选器中
Q. 中途更改 S3 路径 prefix 会怎样?
从更改时点之后的数据开始写入新的 prefix 路径。存储在原 prefix 路径中的文件将原样保留,FlareLane 不会自动移动它们。
Q. 我输错了 IAM Role ARN。那一天的数据会自动重新写入吗?
不会自动恢复。将 ARN 修改为正确值并保存后,从次日起便会正常写入。如果需要缺失日期的数据,请联系 FlareLane 客户支持团队。
Q. 一个项目能否同时导出到多个 S3 存储桶?
目前每个项目只能设置 1 个目标存储桶。