AWS AppFlow Salesforce 到 Lambda 不完整事件

AWS AppFlow Salesforce to Lambda incomplete events

我有一个 AWS AppFlow 流程设置,目的是接收 Salesforce 更改事件并在 Redshift table 上进行处理,以便在 Salesforce 全天发生更改时保持 Redshift table 最新.

仅使用 AppFlow 并将源映射到 Redshift 中的目标字段似乎并没有达到我想要的效果,因为它似乎只是将更改附加到目标 Redshift table - 没有更新、删除等

我认为解决这个问题的方法是将 AppFlow 的目标更改为 Amazon EventBridge,设置规则以侦听更改,以 Lambda 函数为目标,并在适当的 tables 上执行 Redshift 操作根据活动详情。

但是,在 Lambda 中进行这些更改和测试后,我 运行 遇到了事件问题。根据 Salesforce 的说法,Change Event Message 应该如下所示:

{
  "data": {
    "schema": "<schema_ID>", 
    "payload": {
      "ChangeEventHeader": {
         "entityName" : "...",
         "recordIds" : "...",
         "changeType" : "...",
         "changedFields": [...],
         "changeOrigin" : "...",
         "transactionKey" : "...",
         "sequenceNumber" : "...",
         "commitTimestamp" : "...",
         "commitUser" : "...",
         "commitNumber" : "..."
      }, 
     "field1":"...",
     "field2":"...",
     . . .
    }, 
    "event": {
      "replayId": <replayID>
    }
  }, 
  "channel": "/data/<channel>"
}

当我进入 Salesforce 并更新记录时,发送到 Lambda 的事件如下所示:

{
    'account': '111111111111',
    'detail': {'my_custom_field__c': 'my updated text'},
    'detail-type': 'AccountChangeEvent',
    'id': '7b205b55-879a-1wt2-br8d-227da614b205',
    'region': 'my-region',
    'resources': [],
    'source': 'aws.partner/appflow/salesforce.com/111111111111/aws.partner/appflow/salesforce.com/222222222222',
    'time': '2021-07-09T15:29:21Z',
    'version': '0',
}

detail 键中唯一与 Salesforce 相关的信息,它们只是没有任何 ChangeEventHeader 信息的字段。只是字段本身没有用,我需要 ID 才能知道在 Redshift 中更新哪一行。

是否在某处过滤掉了字段?关于从哪里获取整个事件负载的任何想法?我期待整个有效载荷,而不仅仅是部分有效载荷。

-update- 我将流的目标更改为 S3 并检查 JSON 输出,它完全符合我的需要。所以问题似乎是从 EventBridge 收到事件时:

{
    'ChangeEventHeader': {
        'changeOrigin': 'com/salesforce/api/soap/52.0;client=SfdcInternalAPI/',
        'changeType': 'UPDATE',
        'changedFields': ['LastModifiedDate', 'my_custom_field__c'],
        'commitNumber': 34143472625437,
        'commitTimestamp': 1655870833010,
        'commitUser': '0044r00000a5VaPcdv',
        'entityName': 'Account',
        'recordIds': ['0034t00003bOPtuSJs'],
        'sequenceNumber': 1,
        'transactionKey': '02030d57-6dd7-82f8-482r-7pou3bb58769',
    },
    'my_custom_field__c': 'my updated text',
    'LastModifiedDate': '2021-07-09T17:02:13.000Z',
}

在 AppFlow 的 源到目标字段映射 部分中,此处列出了事件的键。我检查了 ChangeEventHeader 以包含在流程中,现在我已将完整事件传递给 EventBridge 和 Lambda。