我正在头脑风暴一个新的SaaS架构,它需要处理来自每个客户一个Salesforce实例的事件。我将使用AWS AppFlow和Lambdas来处理事件。
基本流程是用户将通过web应用程序注册SaaS,在此基础上,我将需要为该特定用户创建AppFlow。用户需要在注册过程中登录到Salesforce for OAuth,这应该会给我用户的访问令牌。
我感到困惑的是如何使这个过程动态/自动化-我应该调用AWS api(例如CreateFlow, CreateConnectorProfile)吗?我以前只使用过AWS资源的静态资源YML文件,因为它是一次性设置,而不是多租户。显然,每次用户注册时都必须手动推送代码,这会很麻烦。
传递访问令牌是否足以(从AuthN/Z的角度来看)调用创建api ?
不,如果我没看错的话,比这简单多了。我个人很喜欢Salesforce Platform Events。
https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-saas-salesforce.html
总结:
- 创建一个"监听器";在Eventbridge/AppFlow中用于salesforce来源的事件。
- 将这些请求汇集到Eventbridge eventbus。s3可能溢出 事件总线然后被绑定到一个lambda,在那里你可以做出你的决定。
在平台事件中,您将定义一些字段,如访问令牌、名称、org id等。您可以定义一个简单的Apex文件,该文件在创建平台事件后发布该事件。我通常有一个Salesforce流调用这个Apex类的可调用函数来执行最后一秒的清理和发布。
https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_publish_apex.htm
List<Low_Ink__e> inkEvents = new List<Low_Ink__e>();
inkEvents.add(new Low_Ink__e(Printer_Model__c='XZO-5', Serial_Number__c='12345',
Ink_Percentage__c=0.2));
inkEvents.add(new Low_Ink__e(Printer_Model__c='MN-123', Serial_Number__c='10013',
Ink_Percentage__c=0.15));
// Call method to publish events
List<Database.SaveResult> results = EventBus.publish(inkEvents);
// Inspect publishing result for each event
for (Database.SaveResult sr : results) {
if (sr.isSuccess()) {
System.debug('Successfully published event.');
} else {
for(Database.Error err : sr.getErrors()) {
System.debug('Error returned: ' +
err.getStatusCode() +
' - ' +
err.getMessage());
}
}
}
当lambda触发时,它接收一条包含您正在查找的所有数据的记录。易于移动到任何存储块,如DynamoDB、S3等。或者直接使用。