Loading
Создание файла пакетного соотнесения для файлов, хранящихся во внешних источниках

Создание файла пакетного соотнесения для файлов, хранящихся во внешних источниках

Подготовьте существующие файлы для Amazon Bedrock или Amazon Kendra, создав файл соотнесения, связывающий файлы Salesforce с расположениями Amazon S3. Эту задачу нужно выполнить только при наличии существующих файлов в Amazon S3, которые нужно искать.

Требуемые версии

Необходимые полномочия пользователя
Для включения поиска внешнего хранилища: Настройка приложения
Для просмотра наборов полномочий: Просмотр настройки и конфигурации
Для назначения наборов полномочий: Назначение наборов полномочий
Для создания локальных приложений внешних клиентов: Создание, редактирование и удаление приложений внешних клиентов

Прежде чем начать, проверьте наличие:

  • Организация Salesforce с внешним источником данных Amazon S3 типа ContentHubAWSS3. См. Настройка семантического поиска.
  • Организация AWS с полномочием на создание лямбда-функций, ролей IAM и областей S3.
  • Область Amazon S3 для хранения файла соотнесения.

Создание пользователя интеграции Salesforce

  1. В настройках Salesforce создайте пользователя интеграции.
  2. Настройте пользователя с данными значениями.
    Поле Значение
    Лицензия пользователя Интеграция Salesforce
    Профиль Минимальный доступ - интеграции только API
  3. Назначьте пользователю лицензию набора полномочий интеграции Salesforce API.
  4. Создайте набор полномочий, предоставляющий данные полномочия:
    • API включен
    • Запрос всех файлов
  5. Назначьте набор полномочий пользователю интеграции.

Дополнительную информацию см. в разделе «Пользователи интеграции в документации разработчика 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")
 
Загрузка
Salesforce Help | Article