Loading
Een batchtoewijzingsbestand genereren voor extern opgeslagen bestanden

Een batchtoewijzingsbestand genereren voor extern opgeslagen bestanden

Bereid bestaande bestanden voor Amazon Bedrock of Amazon Kendra voor door een toewijzingsbestand te genereren dat Salesforce-bestanden koppelt aan hun Amazon S3-locaties. U moet deze taak alleen voltooien als u bestaande bestanden in Amazon S3 hebt waarin u wilt zoeken.

Vereiste editions

Vereiste gebruikersmachtigingen
Zoeken naar externe opslag inschakelen: Aanvraag aanpassen
Machtigingensets weergeven: Set-up en configuratie weergeven
Machtigingensets toewijzen: Machtigingensets toewijzen
Lokale externe clientapps maken: Externe clientapps maken, bewerken en verwijderen

Controleer voordat u begint of u het volgende hebt gedaan:

  • Een Salesforce-organisatie met een externe Amazon S3-gegevensbron van het type ContentHubAWSS3. Zie Semantisch zoeken instellen.
  • Een AWS-account met de machtiging om lambdafuncties, IAM-rollen en S3-buckets te maken.
  • Een Amazon S3-bucket waarin het toewijzingsbestand moet worden opgeslagen.

Een Salesforce Integration-gebruiker maken

  1. Maak vanuit Set-up van Salesforce een integratiegebruiker.
  2. Configureer de gebruiker met deze waarden.
    Veld Waarde
    Gebruikerslicentie Salesforce-integratie
    Profiel Minimale toegang - API Only-integraties
  3. Wijs de Salesforce API Integration-machtigingensetlicentie toe aan de gebruiker.
  4. Maak een machtigingenset die deze machtigingen verleent:
    • API ingeschakeld
    • Query uitvoeren op alle bestanden
  5. Wijs de machtigingenset toe aan de integratiegebruiker.

Zie Integratiegebruikers in Salesforce-ontwikkelaarsdocumentatie en Machtigingensets maken voor meer informatie.

Een externe clientapp maken

Maak een lokale externe clientapp die de OAuth 2.0-stroom voor clientinloggegevens gebruikt. Voeg in de OAuth-instellingen het bereik Gebruikersgegevens beheren via API's (Api) toe en configureer de Salesforce-integratiegebruiker als de run-as-gebruiker.

Zie Een externe clientapp maken en Een stroom Clientinloggegevens configureren voor gedetailleerde instructies.

Het toewijzingsbestand maken

Implementeer een AWS Lambda-functie die een query uitvoert op Salesforce voor extern opgeslagen bestanden en een toewijzing genereert tussen elke Salesforce ContentDocument-ID en de Amazon S3-locatie ervan.

Configureer de functie door middel van omgevingsvariabelen. Voeg een IAM-uitvoeringsrol bij met s3:PutObject die machtiging verleent om het toewijzingsbestand naar de aangewezen S3-bucket te schrijven en logboeken te verzenden naar Amazon CloudWatch.

Zie Python Lambda-functies implementeren, Lambda-omgevingsvariabelen gebruiken en Lambda-uitvoeringsrol in de AWS-documentatie voor instructies.

Hier is verwijzing Lambda-code:

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