외부에 저장된 파일에 대한 배치 매핑 파일 생성
Salesforce 파일을 Amazon S3 위치와 연결하는 매핑 파일을 생성하여 Amazon Bedrock 또는 Amazon Kendra용 기존 파일을 준비합니다. 검색하려는 Amazon S3에 기존 파일이 있는 경우에만 이 과업을 완료해야 합니다.
필수 Edition
| 필요한 사용자 권한 | |
|---|---|
| 외부 저장소 검색 활성화: | 애플리케이션 사용자 정의 |
| 권한 집합 보기: | 설정 및 구성 보기 |
| 권한 집합 할당 | 권한 집합 할당 |
| 로컬 외부 클라이언트 앱 만들기: | 외부 클라이언트 앱 만들기, 편집 및 삭제 |
시작하기 전에 다음을 확인하십시오.
- ContentHubAWSS3 유형의 Amazon S3 외부 데이터 소스가 있는 Salesforce 조직입니다. 시맨틱 검색 설정을 참조하십시오.
- 람다 함수, IAM 역할 및 S3 버킷을 만들 수 있는 권한이 있는 AWS 계정입니다.
- 매핑 파일을 저장하는 Amazon S3 버킷입니다.
Salesforce 통합 사용자 만들기
- Salesforce 설정에서 통합 사용자를 만듭니다.
-
다음 값을 사용하여 사용자를 구성합니다.
필드 값 사용자 라이선스 Salesforce 통합 프로필 최소 액세스 - API 전용 통합 - 사용자에게 Salesforce API 통합 권한 집합 라이센스를 할당합니다.
-
다음 권한을 부여하는 권한 집합을 만듭니다.
- API 사용 가능
- 모든 파일을 쿼리합니다.
- 통합 사용자에게 권한 집합을 할당합니다.
외부 클라이언트 앱 만들기
OAuth 2.0 클라이언트 자격 증명 플로를 사용하는 로컬 외부 클라이언트 앱을 만듭니다. OAuth 설정에서 API를 통한 사용자 데이터 관리(api) 범위를 추가하고 Salesforce 통합 사용자를 다음으로 실행 사용자로 구성합니다.
자세한 지침은 외부 클라이언트 앱 만들기 및 클라이언트 자격 증명 플로 구성을 참조하십시오.
매핑 파일 만들기
Salesforce에서 외부에 저장된 파일을 쿼리하고 각 Salesforce ContentDocument ID와 Amazon S3 위치 간 매핑을 생성하는 AWS 람다 함수를 배포합니다.
환경 변수를 통해 함수를 구성합니다. 지정된 S3 버킷에 매핑 파일을 작성하고 Amazon CloudWatch로 로그를 보내는 권한을 부여하는 s3:PutObject을 사용하여 IAM 실행 역할을 첨부합니다.
지침은 AWS 설명서의 Python 람다 함수 배포, 람다 환경 변수 사용, 람다 실행 역할을 참조하십시오.
다음은 참조 람다 코드입니다.
# 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")이 기사를 통해 문제를 해결했습니까?
개선을 위한 의견을 보내주세요.
