Loading
Gerar um arquivo de mapeamento em lote para arquivos armazenados externamente

Gerar um arquivo de mapeamento em lote para arquivos armazenados externamente

Prepare arquivos existentes para o Amazon Bedrock ou o Amazon Kendra gerando um arquivo de mapeamento que associa arquivos do Salesforce aos locais do Amazon S3. Você deve concluir essa tarefa apenas se tiver arquivos existentes no Amazon S3 que deseja pesquisar.

Edições obrigatórias

Permissões de usuário necessárias
Para habilitar a Pesquisa de armazenamento externo: Personalizar aplicativo
Para visualizar conjuntos de permissões: Exibir configuração
Para atribuir conjuntos de permissões: Atribuir conjuntos de permissões
Para criar aplicativos cliente externos locais: Criar, editar e excluir aplicativos cliente externos

Antes de começar, verifique se você tem:

  • Uma organização do Salesforce com uma origem de dados externa do Amazon S3 do tipo ContentHubAWSS3. Consulte Configurar pesquisa semântica.
  • Uma conta da AWS com permissão para criar funções Lambda, papéis IAM e buckets do S3.
  • Um bucket do Amazon S3 no qual armazenar o arquivo de mapeamento.

Criar um usuário de integração do Salesforce

  1. Em Configuração do Salesforce, crie um usuário de integração.
  2. Configure o usuário com estes valores.
    Campo Valor
    Licença de usuário Integração do Salesforce
    Perfil Acesso mínimo – Integrações apenas da API
  3. Atribua a licença do conjunto de permissões de Integração à API do Salesforce ao usuário.
  4. Crie um conjunto de permissões que conceda estas permissões:
    • API ativada
    • Consultar todos os arquivos
  5. Atribua o conjunto de permissões ao usuário de integração.

Para obter mais informações, consulte Usuários de integração na Documentação do desenvolvedor do Salesforce e Criar conjuntos de permissões.

Criar um aplicativo cliente externo

Crie um aplicativo cliente externo local que use o fluxo de credenciais do cliente do OAuth 2.0. Nas configurações do OAuth, adicione o escopo Gerenciar dados do usuário por meio de APIs (api) e configure o usuário de integração do Salesforce como o usuário de execução como.

Para obter instruções detalhadas, consulte Criar um aplicativo cliente externo e Configurar um fluxo de credenciais do cliente.

Criar o arquivo de mapeamento

Implemente uma função Lambda da AWS que consulte o Salesforce quanto a arquivos armazenados externamente e gere um mapeamento entre cada ID de ContentDocument do Salesforce e seu local do Amazon S3.

Configure a função por meio de variáveis de ambiente. Anexe um papel de execução do IAM com s3:PutObject que conceda permissão para gravar o arquivo de mapeamento no bucket do S3 designado e enviar logs para o Amazon CloudWatch.

Para obter instruções, consulte Implantar funções Lambda do Python, Usar variáveis de ambiente Lambda, papel de execução Lambda na documentação da AWS.

Aqui está o código Lambda de referência:

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