Loading
Generazione di un file di mappatura batch per i file archiviati esternamente

Generazione di un file di mappatura batch per i file archiviati esternamente

Preparare i file esistenti per Amazon Bedrock o Amazon Kendra generando un file di mappatura che associa i file Salesforce alle rispettive posizioni Amazon S3. È necessario eseguire questa operazione solo se sono presenti file esistenti in Amazon S3 che si desidera cercare.

Versioni (Edition) richieste

Autorizzazioni utente necessarie
Per abilitare la ricerca nella memoria esterna: Personalizza applicazione
Per visualizzare gli insiemi di autorizzazioni: Visualizza impostazione e configurazione
Per assegnare gli insiemi di autorizzazioni: Assegna insiemi di autorizzazioni
Per creare app client esterne locali: Creazione, modifica ed eliminazione di app client esterne

Prima di iniziare, verificare di aver:

  • Un'organizzazione Salesforce con una fonte di dati esterna Amazon S3 di tipo ContentHubAWSS3. Vedere Impostazione della ricerca semantica.
  • Un account AWS autorizzato a creare funzioni Lambda, ruoli IAM e bucket S3.
  • bucket Amazon S3 in cui memorizzare il file di mappatura.

Creazione di un utente integrazione Salesforce

  1. Da Imposta di Salesforce, creare un utente integrazione.
  2. Configurare l'utente con questi valori.
    Campo Valore
    Licenza utente Integrazione Salesforce
    Profilo Accesso minimo - Integrazioni solo API
  3. Assegnare la licenza insieme di autorizzazioni Integrazione API Salesforce all'utente.
  4. Creare un insieme di autorizzazioni che conceda le seguenti autorizzazioni:
    • API abilitata
    • Esegui query in tutti i file
  5. Assegnare l'insieme di autorizzazioni all'utente integrazione.

Per ulteriori informazioni, vedere Utenti integrazione nella Salesforce Developer Documentation e Creazione di insiemi di autorizzazioni.

Creazione di un'app client esterna

Creare un'app client esterna locale che utilizza il flusso credenziali client OAuth 2.0. Nelle impostazioni OAuth, aggiungere l'ambito Gestisci dati utente tramite API (api) e configurare l'utente integrazione Salesforce come utente run-as.

Per istruzioni dettagliate, vedere Creazione di un'app client esterna e Configurazione di un flusso credenziali client.

Creazione del file di mappatura

Distribuire una funzione Lambda AWS che esegue query su Salesforce per i file archiviati esternamente e genera una mappatura tra ogni ID Salesforce ContentDocument e la relativa posizione Amazon S3.

Configurare la funzione tramite variabili di ambiente. Allegare un ruolo di esecuzione IAM con s3:PutObject che conceda l'autorizzazione a scrivere il file di mappatura nel bucket S3 designato e a inviare i registri ad Amazon CloudWatch.

Per istruzioni, vedere Distribuzione di funzioni Lambda Python, Utilizzo di variabili Lambda, Ruolo esecuzione Lambda nella documentazione AWS.

Ecco il codice Lambda di riferimento:

# 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")
 
Caricamento
Salesforce Help | Article