如何用CloudFormation配置AWS AppFlow同步指定Salesforce字段到S3?
AWS AppFlow Salesforce → S3 同步的 CloudFormation 模板(全字段/指定字段)
1. 全字段同步模板(已验证可用)
如果你的全字段同步模板已经正常工作,这里给出标准实现作为对比:
AWSTemplateFormatVersion: "2010-09-09" Resources: SalesforceToS3Flow: Type: AWS::AppFlow::Flow Properties: FlowName: "Salesforce-To-S3-Full-Sync" Description: "Sync all fields from Salesforce to S3" TriggerConfig: TriggerType: "ON_DEMAND" # 可改为 SCHEDULED 并配置 ScheduleExpression SourceFlowConfig: ConnectorType: "Salesforce" ConnectorProfileName: !Ref SalesforceConnectorProfileName # 替换为你的连接器配置名 SourceConnectorProperties: Salesforce: Object: "Account" # 替换为你要同步的Salesforce对象(比如Contact) EnableDynamicFieldUpdate: true IncludeDeletedRecords: false DestinationFlowConfigList: - ConnectorType: "S3" DestinationConnectorProperties: S3: BucketName: !Ref S3BucketName # 替换为你的S3桶名 BucketPrefix: "salesforce-sync/" S3OutputFormatConfig: FileType: "CSV" # 可改为 JSONPARQUET 等 Tasks: - TaskType: "MAP_ALL" ConnectorOperator: Salesforce: "NO_OP" SourceFields: [] DestinationField: "*" TaskProperties: [] KmsArn: !Ref KmsKeyArn # 可选,若无需加密可移除
2. 指定字段同步模板(修正版)
指定字段同步的核心是正确配置Tasks数组,需要通过PROJECTION任务筛选要同步的字段,再用MAP任务完成字段映射(若无需重命名,可保持源字段名与目标字段名一致)。以下是可直接使用的模板:
AWSTemplateFormatVersion: "2010-09-09" Parameters: SalesforceConnectorProfileName: Type: String Description: 已创建的Salesforce连接器配置名称 S3BucketName: Type: String Description: 目标S3桶名称 KmsKeyArn: Type: String Description: 用于加密的KMS密钥ARN(可选) Default: "" Resources: SalesforceToS3SelectedFieldsFlow: Type: AWS::AppFlow::Flow Properties: FlowName: "Salesforce-To-S3-Selected-Fields" Description: "Sync specified fields from Salesforce to S3" TriggerConfig: TriggerType: "ON_DEMAND" SourceFlowConfig: ConnectorType: "Salesforce" ConnectorProfileName: !Ref SalesforceConnectorProfileName SourceConnectorProperties: Salesforce: Object: "Account" # 替换为目标Salesforce对象 EnableDynamicFieldUpdate: false # 指定字段同步时建议关闭动态字段更新 IncludeDeletedRecords: false DestinationFlowConfigList: - ConnectorType: "S3" DestinationConnectorProperties: S3: BucketName: !Ref S3BucketName BucketPrefix: "salesforce-selected-fields/" S3OutputFormatConfig: FileType: "CSV" Tasks: # 第一步:筛选需要同步的字段(PROJECTION任务) - TaskType: "PROJECTION" ConnectorOperator: Salesforce: "PROJECTION" SourceFields: - "Id" - "Name" - "Email" - "CreatedDate" - "Industry" # 替换为你需要的实际字段名 TaskProperties: [] # 第二步:映射每个字段到目标(若无需重命名,DestinationField可与SourceField一致) - TaskType: "MAP" SourceField: "Id" DestinationField: "id" ConnectorOperator: Salesforce: "NO_OP" TaskProperties: [] - TaskType: "MAP" SourceField: "Name" DestinationField: "account_name" ConnectorOperator: Salesforce: "NO_OP" TaskProperties: [] - TaskType: "MAP" SourceField: "Email" DestinationField: "contact_email" ConnectorOperator: Salesforce: "NO_OP" TaskProperties: [] - TaskType: "MAP" SourceField: "CreatedDate" DestinationField: "created_date" ConnectorOperator: Salesforce: "NO_OP" TaskProperties: [] - TaskType: "MAP" SourceField: "Industry" DestinationField: "industry" ConnectorOperator: Salesforce: "NO_OP" TaskProperties: [] # 若无需加密,可移除KmsArn配置 KmsArn: !If [HasKmsKey, !Ref KmsKeyArn, !Ref "AWS::NoValue"] Conditions: HasKmsKey: !Not [!Equals [!Ref KmsKeyArn, ""]]
关键注意事项(避免创建失败)
- 字段名准确性:
SourceFields必须与Salesforce对象的实际字段名完全一致(区分大小写,比如Id而非id),拼写错误会导致栈创建失败。 - Tasks结构完整性:每个
MAP任务必须包含SourceField、DestinationField、ConnectorOperator和TaskProperties,缺一不可。 - 动态字段更新:指定字段同步时建议关闭
EnableDynamicFieldUpdate,避免自动添加未指定的字段。 - 连接器权限:确保你的Salesforce连接器配置有读取指定字段的权限(虽然全字段同步成功的话,权限通常没问题)。
内容的提问来源于stack exchange,提问作者chandu
相关产品推荐
相关产品推荐

