Sie befinden sich hier:
Generieren einer Batch-Zuordnungsdatei für extern gespeicherte Dateien
Bereiten Sie vorhandene Dateien für Amazon Bedrock oder Amazon Kendra vor, indem Sie eine Zuordnungsdatei generieren, die Salesforce-Dateien ihren Amazon S3-Speicherorten zuordnet. Sie müssen diese Aufgabe nur ausführen, wenn Sie über vorhandene Dateien in Amazon S3 verfügen, die Sie durchsuchen möchten.
Erforderliche Editionen
| Erforderliche Benutzerberechtigungen | |
|---|---|
| Aktivieren der Suche nach externem Speicher: | Anwendung anpassen |
| Anzeigen von Berechtigungssätzen: | Setup und Konfiguration anzeigen |
| Zuweisen von Berechtigungssätzen: | Berechtigungssätze zuweisen |
| Erstellen von lokalen externen Client-Anwendungen: | Erstellen, Bearbeiten und Löschen von externen Client-Anwendungen |
Überprüfen Sie zunächst, ob Sie über Folgendes verfügen:
- Eine Salesforce-Organisation mit einer externen Amazon S3-Datenquelle vom Typ ContentHubAWSS3. Siehe Einrichten der semantischen Suche.
- Ein AWS-Account mit der Berechtigung zum Erstellen von Lambda-Funktionen, IAM-Rollen und S3-Buckets.
- Ein Amazon S3-Bucket, in dem die Zuordnungsdatei gespeichert werden soll.
Erstellen eines Salesforce-Integrationsbenutzers
- Erstellen Sie im Salesforce-Setup einen Integrationsbenutzer.
-
Konfigurieren Sie den Benutzer mit diesen Werten.
Feld Wert Benutzerlizenz Salesforce-Integration Profil Mindestzugriffswert – reine API-Integrationen - Weisen Sie dem Benutzer die Berechtigungssatz-Lizenz "Salesforce-API-Integration" zu.
-
Erstellen Sie einen Berechtigungssatz, der die folgenden Berechtigungen gewährt:
- API aktiviert
- Alle Dateien durchsuchen
- Weisen Sie den Berechtigungssatz dem Integrationsbenutzer zu.
Weitere Informationen finden Sie unter Integrationsbenutzer in der Salesforce-Entwicklerdokumentation und Erstellen von Berechtigungssätzen.
Erstellen einer externen Client-Anwendung
Erstellen Sie eine lokale externe Client-Anwendung, die den OAuth 2.0-Flow für Client-Anmeldeinformationen verwendet. Fügen Sie in den OAuth-Einstellungen den Umfang "Benutzerdaten über APIs verwalten" (api) hinzu und konfigurieren Sie den Salesforce-Integrationsbenutzer als aktuellen Benutzer.
Detaillierte Anweisungen finden Sie unter Erstellen einer externen Clientanwendung und Konfigurieren eines Flows für Client-Anmeldeinformationen.
Erstellen der Zuordnungsdatei
Stellen Sie eine AWS Lambda-Funktion bereit, die Salesforce nach extern gespeicherten Dateien abfragt und eine Zuordnung zwischen jeder Salesforce ContentDocument-ID und ihrem Amazon S3-Speicherort generiert.
Konfigurieren Sie die Funktion über Umgebungsvariablen. Hängen Sie eine IAM-Ausführungsrolle mit s3:PutObject an, die die Berechtigung zum Schreiben der Zuordnungsdatei in den angegebenen S3-Bucket und zum Senden von Protokollen an Amazon CloudWatch erteilt.
Anweisungen finden Sie in der AWS-Dokumentation unter Bereitstellen von Python Lambda-Funktionen, Verwenden von Lambda-Umgebungsvariablen und Lambda-Ausführungsrolle.
Hier ist der Lambda-Referenzcode:
# 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")