Вы находитесь здесь:
Создание файла пакетного соотнесения для файлов, хранящихся во внешних источниках
Подготовьте существующие файлы для Amazon Bedrock или Amazon Kendra, создав файл соотнесения, связывающий файлы Salesforce с расположениями Amazon S3. Эту задачу нужно выполнить только при наличии существующих файлов в Amazon S3, которые нужно искать.
Требуемые версии
| Необходимые полномочия пользователя | |
|---|---|
| Для включения поиска внешнего хранилища: | Настройка приложения |
| Для просмотра наборов полномочий: | Просмотр настройки и конфигурации |
| Для назначения наборов полномочий: | Назначение наборов полномочий |
| Для создания локальных приложений внешних клиентов: | Создание, редактирование и удаление приложений внешних клиентов |
Прежде чем начать, проверьте наличие:
- Организация Salesforce с внешним источником данных Amazon S3 типа ContentHubAWSS3. См. Настройка семантического поиска.
- Организация AWS с полномочием на создание лямбда-функций, ролей IAM и областей S3.
- Область Amazon S3 для хранения файла соотнесения.
Создание пользователя интеграции Salesforce
- В настройках Salesforce создайте пользователя интеграции.
-
Настройте пользователя с данными значениями.
Поле Значение Лицензия пользователя Интеграция Salesforce Профиль Минимальный доступ - интеграции только API - Назначьте пользователю лицензию набора полномочий интеграции Salesforce API.
-
Создайте набор полномочий, предоставляющий данные полномочия:
- API включен
- Запрос всех файлов
- Назначьте набор полномочий пользователю интеграции.
Дополнительную информацию см. в разделе «Пользователи интеграции в документации разработчика Salesforce и создание наборов полномочий».
Создание приложения внешнего клиента
Создайте локальное приложение внешнего клиента, использующее поток регистрационных данных клиента OAuth 2.0. В параметрах OAuth добавьте область «Управление данными пользователей посредством API (api)» и настройте пользователя интеграции Salesforce в качестве выполняемого пользователя.
Подробные инструкции см. в разделах Создание приложения внешнего клиента и Настройка потока регистрационных данных клиента.
Создание файла соотнесения
Разверните лямбда-функцию AWS, которая запрашивает Salesforce для внешних сохраненных файлов и создает соотнесение между каждым кодом Salesforce ContentDocument и его расположением Amazon S3.
Настройте функцию посредством переменных среды. Вложите роль выполнения IAM посредством s3:PutObject, предоставляющего полномочие на запись файла соотнесения в указанный сегмент S3 и отправку журналов в Amazon CloudWatch.
Инструкции см. в разделе Развертывание лямбда-функций Python, Использование переменных лямбда-среды, роль лямбда- выполнения в документации AWS.
Ниже указан справочный лямбда-код:
# 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")