Loading
Generieren einer Batch-Zuordnungsdatei für extern gespeicherte Dateien

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

  1. Erstellen Sie im Salesforce-Setup einen Integrationsbenutzer.
  2. Konfigurieren Sie den Benutzer mit diesen Werten.
    Feld Wert
    Benutzerlizenz Salesforce-Integration
    Profil Mindestzugriffswert – reine API-Integrationen
  3. Weisen Sie dem Benutzer die Berechtigungssatz-Lizenz "Salesforce-API-Integration" zu.
  4. Erstellen Sie einen Berechtigungssatz, der die folgenden Berechtigungen gewährt:
    • API aktiviert
    • Alle Dateien durchsuchen
  5. 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")
 
Laden
Salesforce Help | Article