Loading
为外部存储的文件生成批处理映射文件

为外部存储的文件生成批处理映射文件

通过生成将 Salesforce 文件与其 Amazon S3 位置关联的映射文件,为 Amazon Bedrock 或 Amazon Kendra 准备现有文件。只有在 Amazon S3 中有您想要搜索的现有文件时,您才能完成此任务。

所需的 Edition

所需用户权限
启用外部存储搜索: 自定义应用程序
要查看权限集: 查看设置和配置
分配权限集: 分配权限集
创建本地外部客户端应用程序: 创建、编辑和删除外部客户端应用程序

开始之前,请确认您拥有:

  • 具有类型 ContentHubAWSS3 的 Amazon S3 外部数据源的 Salesforce 组织。请参阅设置语义搜索。
  • 具有创建 Lambda 函数、IAM 角色和 S3 存储桶权限的 AWS 帐户。
  • Amazon S3 存储桶,用于存储映射文件。

创建 Salesforce 集成用户

  1. 从 Salesforce 设置中,创建集成用户。
  2. 使用这些值配置用户。
    字段 值
    用户许可证 Salesforce 集成
    简档 最小访问权限 — 仅 API 集成
  3. 将 Salesforce API 集成权限集许可证分配给用户。
  4. 创建授予这些权限的权限集:
    • 已启用 API
    • 查询所有文件
  5. 将权限集分配给集成用户。

有关更多信息,请查看 Salesforce 开发人员文档中的集成用户和创建权限集。

创建外部客户端应用程序

创建使用 OAuth 2.0 客户端凭据流的本地外部客户端应用程序。在 OAuth 设置中,添加通过 API 管理用户数据 (api) 范围,并将 Salesforce 集成用户配置为运行身份用户。

有关详细说明,请查看创建外部客户端和配置客户端凭据流。

创建映射文件

部署 AWS Lambda 函数,该函数查询 Salesforce 外部存储的文件,并生成每个 Salesforce ContentDocument ID 与其 Amazon S3 位置之间的映射。

通过环境变量配置函数。将 IAM 执行角色附加到授予将映射文件写入指定 S3 存储桶并将日志发送到 Amazon CloudWatch 的权限的s3:PutObject。

有关说明,请查看 AWS 文档中的部署 Python Lambda 函数、使用 Lambda 环境变量、Lambda 执行角色。

以下是参考 Lambda 代码:

# 1. Authenticate to Salesforce (OAuth 2.0 Client Credentials)
token = sf_oauth_token(SF_INSTANCE_URL, SF_CLIENT_ID, SF_CLIENT_SECRET)

# 2. Query ContentVersion -> ContentDocumentId, ExternalDocumentInfo2, ExternalDataSource
soql = ("SELECT ContentDocumentId, ExternalDocumentInfo2, "
        "ExternalDataSource.NamedCredentialId, ExternalDataSource.MasterLabel "
        "FROM ContentVersion WHERE IsLatest=true AND ExternalDocumentInfo2!=null "
        "AND ExternalDataSource.Type='ContentHubAWSS3'")
records = sf_query_all(token, soql)

# 3. Resolve each Named Credential's S3 endpoint URL (Tooling API)
nc_url = {nc_id: sf_named_credential_url(token, nc_id)
          for nc_id in {r["ExternalDataSource"]["NamedCredentialId"] for r in records}}

# 4. Build the mapping keyed by the external document id
mapping = defaultdict(list)
for r in records:
    nc_id = r["ExternalDataSource"]["NamedCredentialId"]
    mapping[r["ExternalDocumentInfo2"]].append({
        "ContentDocumentId": r["ContentDocumentId"],
        "DataSourceLabel": r["ExternalDataSource"]["MasterLabel"],
        "NamedCredentialId": nc_id,
        "S3_Endpoint_URL": nc_url.get(nc_id),
    })

# 5. Upload the mapping JSON to S3
boto3.client("s3").put_object(
    Bucket=S3_BUCKET_NAME, Key=S3_FILE_NAME,
    Body=json.dumps(mapping, indent=4), ContentType="application/json")
 
正在加载
Salesforce Help | Article