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。
我有一个 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。