Du är här:
Skapa en satsmappningsfil för externt lagrade filer
Förbered befintliga filer för Amazon Bedrock eller Amazon Kendra genom att skapa en mappningsfil som associerar Salesforce-filer med deras Amazon S3-platser. Du måste endast utföra denna uppgift om du har befintliga filer i Amazon S3 som du vill söka i.
Versioner som krävs
| Användarbehörigheter som krävs | |
|---|---|
| Aktivera sökning efter extern lagring: | Anpassa applikation |
| Visa behörighetsuppsättningar: | Visa inställningar och konfigurering |
| Så här tilldelar du behörighetsuppsättningar: | Tilldela behörighetsuppsättningar |
| Skapa lokala externa klientappar: | Skapa, redigera och ta bort externa klientappar |
Innan du börjar, kontrollera att du har:
- En Salesforce-organisation med en extern Amazon S3-datakälla av typen ContentHubAWSS3. Se Konfigurera semantisk sökning.
- Ett AWS-konto med behörighet att skapa Lambda-funktioner, IAM-roller och S3-hinkar.
- En Amazon S3-hink där mappningsfilen ska lagras.
Skapa en Salesforce-integreringsanvändare
- Från Salesforces inställningar, skapa en integreringsanvändare.
-
Konfigurera användaren med dessa värden.
Fält Värde Användarlicens Salesforce-integrering Profil Minsta åtkomst - Endast API-integreringar - Tilldela behörighetsuppsättningslicensen Salesforce API-integrering till användaren.
-
Skapa en behörighetsuppsättning som beviljar dessa behörigheter:
- API aktiverat
- Fråga alla filer
- Tilldela behörighetsuppsättningen till integreringsanvändaren.
Mer information finns i Integreringsanvändare i Salesforce Developer-dokumentation och skapa behörighetsuppsättningar.
Skapa en extern klientapp
Skapa en lokal extern klientapp som använder OAuth 2.0-klientinloggningsuppgifterflödet. I OAuth-inställningarna, lägg till omfattningen Hantera användardata via APIs (api) och konfigurera Salesforce-integreringsanvändaren som körningsanvändare.
Detaljerade instruktioner finns i Skapa en extern klientapp och konfigurera ett klientinloggningsuppgifterflöde.
Skapa mappningsfilen
Distribuera en AWS Lambda-funktion som frågar Salesforce efter externt lagrade filer och skapar en mappning mellan varje Salesforce ContentDocument-ID och dess Amazon S3-plats.
Konfigurera funktionen genom miljövariabler. Bifoga en IAM-körningsroll med s3:PutObject som beviljar behörighet att skriva mappningsfilen till den utsedda S3-hinken och skicka loggar till Amazon CloudWatch.
För instruktioner, se Distribuera Python Lambda-funktioner, Använda Lambda-miljövariabler, Lambda-körningsroll i AWS-dokumentationen.
Här är referens Lambda-kod:
# 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")