您在此处:
为外部存储的文件生成批处理映射文件
通过生成将 Salesforce 文件与其 Amazon S3 位置关联的映射文件,为 Amazon Bedrock 或 Amazon Kendra 准备现有文件。只有在 Amazon S3 中有您想要搜索的现有文件时,您才能完成此任务。
所需的 Edition
| 所需用户权限 | |
|---|---|
| 启用外部存储搜索: | 自定义应用程序 |
| 要查看权限集: | 查看设置和配置 |
| 分配权限集: | 分配权限集 |
| 创建本地外部客户端应用程序: | 创建、编辑和删除外部客户端应用程序 |
开始之前,请确认您拥有:
- 具有类型 ContentHubAWSS3 的 Amazon S3 外部数据源的 Salesforce 组织。请参阅设置语义搜索。
- 具有创建 Lambda 函数、IAM 角色和 S3 存储桶权限的 AWS 帐户。
- Amazon S3 存储桶,用于存储映射文件。
创建 Salesforce 集成用户
- 从 Salesforce 设置中,创建集成用户。
-
使用这些值配置用户。
字段 值 用户许可证 Salesforce 集成 简档 最小访问权限 — 仅 API 集成 - 将 Salesforce API 集成权限集许可证分配给用户。
-
创建授予这些权限的权限集:
- 已启用 API
- 查询所有文件
- 将权限集分配给集成用户。
创建映射文件
部署 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")本文章是否解决您的问题?
请与我们共享您的想法,以便我们进行改进!
