Usted estĆ” aquĆ:
Generar un archivo de asignación por lotes para archivos almacenados de forma externa
Prepare archivos existentes para Amazon Bedrock o Amazon Kendra generando un archivo de asignación que asocie archivos de Salesforce con sus ubicaciones de Amazon S3. Debe completar esta tarea solo si tiene archivos existentes en Amazon S3 que desea buscar.
Ediciones necesarias
| Permisos de usuario necesarios | |
|---|---|
| Para activar Búsqueda de almacenamiento externo: | Personalizar aplicación |
| Para ver conjuntos de permisos: | Ver parÔmetros y configuración |
| Para asignar conjuntos de permisos: | Asignar conjuntos de permisos |
| Para crear aplicaciones cliente externas locales: | Crear, modificar y eliminar aplicaciones cliente externas |
Antes de empezar, verifique que tiene:
- Una organización de Salesforce con una fuente de datos externa de Amazon S3 del tipo ContentHubAWSS3. Consulte Configurar búsqueda semÔntica.
- Una cuenta de AWS con permiso para crear funciones Lambda, funciones IAM y depósitos S3.
- Un depósito de Amazon S3 en el que almacenar el archivo de asignación.
Crear un usuario de integración de Salesforce
- Desde Configuración de Salesforce, cree un usuario de integración.
-
Configure el usuario con estos valores.
Campo Valor Licencia de usuario Integración de Salesforce Perfil Acceso mĆnimo - Integraciones solo de API - Asigne la licencia de conjunto de permisos Integración de API de Salesforce al usuario.
-
Cree un conjunto de permisos que otorgue estos permisos:
- API activado
- Consultar todos los archivos
- Asigne el conjunto de permisos al usuario de integración.
Para obtener mÔs información, consulte Integración de usuarios en Documentación de desarrollador de Salesforce y Crear conjuntos de permisos.
Crear una aplicación cliente externa
Cree una aplicación cliente externa local que utilice el flujo de credenciales de cliente de OAuth 2.0. En la configuración de OAuth, agregue el Ômbito Gestionar datos de usuario a través de API (api) y configure el usuario de integración de Salesforce como el usuario que ejecuta.
Para obtener instrucciones detalladas, consulte Crear una aplicación cliente externa y Configurar un flujo de credenciales de cliente.
Crear el archivo de asignación
Implemente una función Lambda de AWS que consulte a Salesforce por archivos almacenados de forma externa y genere una asignación entre cada Id. de ContentDocument de Salesforce y su ubicación de Amazon S3.
Configure la función a través de variables de entorno. Adjunte una función de ejecución de IAM con s3:PutObject que otorgue permiso para redactar el archivo de asignación en el depósito de S3 designado y enviar registros a Amazon CloudWatch.
Para obtener instrucciones, consulte Implementar funciones Lambda Python, Uso de variables de entorno Lambda, Función de ejecución Lambda en la documentación de AWS.
Este es el código Lambda de referencia:
# 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")