You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:36:35