Salesforce (SFDC) 통합

이 페이지에서는 Cortex Framework Data Foundation에서 Salesforce (SFDC) 운영 워크로드를 통합하는 단계를 설명합니다. Cortex Framework는 Salesforce의 데이터를 BigQuery를 통해 Dataflow 파이프라인과 통합하는 반면 Cloud Composer는 이러한 Dataflow 파이프라인을 예약하고 모니터링하여 데이터에서 유용한 정보를 얻습니다.

구성 파일

Cortex Framework Data Foundation 저장소config.json 파일은 Salesforce를 비롯한 모든 데이터 소스에서 데이터를 전송하는 데 필요한 설정을 구성합니다. 이 파일에는 운영 Salesforce 워크로드에 관한 다음 매개변수가 포함됩니다.

    "SFDC": {
        "deployCDC": true,
        "createMappingViews": true,
        "createPlaceholders": true,
        "datasets": {
            "cdc": "",
            "raw": "",
            "reporting": "REPORTING_SFDC"
        }
    }

다음 표에는 각 SFDC 운영 매개변수의 값이 나와 있습니다.

매개변수 의미 기본값 설명
SFDC.deployCDC CDC 배포 true Cloud Composer에서 DAG로 실행할 CDC 처리 스크립트를 생성합니다. Salesforce Sales Cloud의 다양한 처리 옵션에 관한 문서를 참고하세요.
SFDC.createMappingViews 매핑 뷰 만들기 true 제공된 DAG는 Salesforce API에서 새 레코드를 가져와 방문 시 레코드를 업데이트합니다. 이 값을 true로 설정하면 CDC 처리 데이터 세트에서 뷰가 생성되어 원시 데이터 세트의 '최신 버전의 진실'이 포함된 테이블이 노출됩니다. false이고 SFDC.deployCDCtrue인 경우 SystemModstamp를 기반으로 변경 데이터 캡처 (CDC) 처리를 통해 DAG가 생성됩니다. Salesforce의 CDC 처리에 관한 세부정보를 참고하세요.
SFDC.createPlaceholders 자리표시자 만들기 true 다운스트림 보고 배포가 실패 없이 실행될 수 있도록 처리 프로세스에서 생성되지 않은 경우 빈 자리표시자 테이블을 만듭니다.
SFDC.datasets.raw 원시 방문 데이터 세트 - CDC 프로세스에서 사용하며 복제 도구가 Salesforce의 데이터를 가져오는 위치입니다. 테스트 데이터를 사용하는 경우 빈 데이터 세트를 만듭니다.
SFDC.datasets.cdc CDC 처리 데이터 세트 - 보고 뷰의 소스 및 DAG 처리 레코드의 대상으로 작동하는 데이터 세트입니다. 테스트 데이터를 사용하는 경우 빈 데이터 세트를 만듭니다.
SFDC.datasets.reporting 보고 데이터 세트 SFDC "REPORTING_SFDC" 최종 사용자가 보고용으로 액세스할 수 있는 데이터 세트의 이름으로, 뷰와 사용자 대상 테이블이 배포됩니다.
SFDC.currencies 통화 필터링 [ "USD" ] 테스트 데이터를 사용하지 않는 경우 비즈니스와 관련된 단일 통화 (예: [ "USD" ]) 또는 여러 통화(예: [ "USD", "CAD" ])를 입력합니다. 이러한 값은 가능한 경우 분석 모델의 SQL에서 자리표시자를 대체하는 데 사용됩니다.

데이터 모델

이 섹션에서는 항목 관계 다이어그램 (ERD)을 사용하여 Salesforce (SFDC) 데이터 모델을 설명합니다.

SFDC의 항목 관계 다이어그램

그림 2 Salesforce (SFDC): 항목 관계 다이어그램

기본 조회수

ERD의 파란색 객체이며 일부 열 이름 별칭 외에 변환이 없는 CDC 테이블의 뷰입니다. src/SFDC/src/reporting/ddls에서 스크립트를 확인하세요.

보고 보기

ERD의 녹색 객체이며 보고 테이블에서 사용하는 관련 측정기준 속성이 포함되어 있습니다. src/SFDC/src/reporting/ddls에서 스크립트를 확인하세요.

Salesforce 데이터 요구사항

이 섹션에서는 Cortex Framework에서 사용할 수 있도록 Salesforce 데이터를 구성하는 방법을 간략히 설명합니다.

  • 표 구조:
    • 이름 지정: 테이블 이름은 snake_case (밑줄로 구분된 소문자 단어)를 사용하며 복수형입니다. 예를 들면 some_objects입니다.
    • 데이터 유형: 열은 Salesforce 내에서 표시되는 것과 동일한 데이터 유형을 유지합니다.
    • 가독성: 보고 레이어의 명확성을 높이기 위해 일부 필드 이름이 약간 조정될 수 있습니다.
  • 빈 테이블 및 배포: 원시 데이터 세트에 누락된 필수 테이블은 배포 프로세스 중에 자동으로 빈 테이블로 생성됩니다. 이렇게 하면 CDC 배포 단계가 원활하게 실행됩니다.
  • CDC 요구사항: IdSystemModstamp 필드는 CDC 스크립트가 데이터의 변경사항을 추적하는 데 중요합니다. 이러한 정확한 이름을 사용하거나 다른 이름을 사용할 수 있습니다. 제공된 원시 처리 스크립트는 API에서 이러한 필드를 자동으로 가져와 대상 복제 테이블을 업데이트합니다.
    • Id: 각 레코드의 고유 식별자로 사용됩니다.
    • SystemModstamp: 이 필드는 레코드가 마지막으로 수정된 시간을 나타내는 타임스탬프를 저장합니다.
  • 원시 처리 스크립트:제공된 원시 처리 스크립트에는 추가 (CDC) 처리가 필요하지 않습니다. 이 동작은 기본적으로 배포 중에 설정됩니다.

통화 변환의 소스 테이블

Salesforce에서는 다음 두 가지 방법으로 통화를 관리할 수 있습니다.

  • 기본: 모든 데이터가 단일 통화를 사용하는 기본값입니다.
  • 고급: 환율을 기반으로 여러 통화를 변환합니다 (고급 통화 관리 사용 설정 필요).

고급 통화 관리를 사용하는 경우 Salesforce에서는 다음 두 가지 특수 테이블을 사용합니다.

  • CurrencyTypes: 이 표에는 사용하는 다양한 통화 (예: USD, EUR 등)에 관한 정보가 저장됩니다.
  • DatedConversionRates: 이 표에는 시간 경과에 따른 통화 간 환율이 포함되어 있습니다.

Cortex Framework는 고급 통화 관리를 사용하는 경우 이러한 테이블이 있어야 한다고 예상합니다. 고급 통화 관리를 사용하지 않는 경우 구성 파일(src/SFDC/config/ingestion_settings.yaml)에서 이러한 테이블과 관련된 항목을 삭제할 수 있습니다. 이 단계를 수행하면 존재하지 않는 테이블에서 데이터를 추출하려는 불필요한 시도가 방지됩니다.

BigQuery에 SFDC 데이터 로드

Cortex Framework는 Apache AirflowSalesforce Bulk API 2.0에서 예약된 Python 스크립트를 기반으로 하는 복제 솔루션을 제공합니다. 이러한 Python 스크립트는 원하는 도구에서 조정하고 예약할 수 있습니다. 자세한 내용은 SFDC 추출 모듈을 참고하세요.

또한 Cortex Framework는 데이터 소스와 데이터 관리 방식에 따라 데이터를 통합하는 세 가지 방법을 제공합니다.

  1. API 호출: 이 옵션은 API를 통해 직접 액세스할 수 있는 데이터에 사용됩니다. Cortex Framework는 API를 호출하고 데이터를 가져와 BigQuery 내 '원시' 데이터 세트에 저장할 수 있습니다. 데이터 세트에 기존 레코드가 있는 경우 Cortex Framework에서 새 데이터로 업데이트할 수 있습니다.
  2. 구조 매핑 뷰: 이 방법은 다른 도구를 통해 이미 데이터를 BigQuery에 로드했지만 데이터 구조가 Cortex Framework에 필요한 것과 일치하지 않는 경우에 유용합니다. Cortex Framework는 '뷰' (예: 가상 테이블)를 사용하여 기존 데이터 구조를 Cortex Framework의 보고 기능에서 예상하는 형식으로 변환합니다.
  3. CDC (변경 데이터 캡처) 처리 스크립트: 이 옵션은 지속적으로 변경되는 데이터에 맞게 설계되었습니다. CDC 스크립트는 이러한 변경사항을 추적하고 BigQuery에서 데이터를 적절하게 업데이트합니다. 이러한 스크립트는 데이터의 두 가지 특수 필드를 사용합니다.

    • Id: 각 레코드의 고유 식별자입니다.
    • SystemModstamp: 레코드가 변경된 시간을 나타내는 타임스탬프입니다.

    데이터에 이러한 정확한 이름이 없는 경우 스크립트를 조정하여 다른 이름으로 인식하도록 할 수 있습니다. 이 과정에서 데이터 스키마에 맞춤 필드를 추가할 수도 있습니다. 예를 들어 계정 객체의 데이터가 포함된 소스 테이블에는 원래 IdSystemModstamp 필드가 있어야 합니다. 이러한 필드의 이름이 다른 경우 src/SFDC/src/table_schema/accounts.csv 파일을 업데이트하여 Id 필드의 이름을 AccountId에 매핑하고 시스템 수정 타임스탬프 필드를 SystemModstamp에 매핑해야 합니다. 자세한 내용은 SystemModStamp 문서를 참고하세요.

이미 다른 도구를 통해 데이터를 로드했으며 데이터가 지속적으로 업데이트되는 경우 Cortex에서 계속 사용할 수 있습니다. CDC 스크립트에는 기존 데이터 구조를 Cortex Framework에 필요한 형식으로 변환할 수 있는 매핑 파일이 함께 제공됩니다. 이 과정에서 데이터에 맞춤 필드를 추가할 수도 있습니다.

API 통합 및 CDC 구성

Salesforce 데이터를 BigQuery로 가져오려면 다음 방법을 사용할 수 있습니다.

  1. API 호출을 위한 Cortex 스크립트: Salesforce 또는 원하는 데이터 복제 도구의 복제 스크립트를 제공합니다.가져오는 데이터가 Salesforce API에서 가져온 것처럼 보이게 하는 것이 중요합니다.
  2. 복제 도구 및 항상 추가 : 복제 도구를 사용하는 경우 이 방법은 새 데이터 레코드(_appendalways_pattern)를 추가하거나 기존 레코드를 업데이트할 수 있는 도구에 적합합니다.
  3. 복제 도구 및 새 레코드 추가: 도구가 레코드를 업데이트하지 않고 변경사항을 새 레코드로 대상 (원시) 테이블에 복제하는 경우 Cortex Data Foundation은 CDC 처리 스크립트를 만드는 옵션을 제공합니다. 자세한 내용은 CDC 프로세스를 참고하세요.

Salesforce 워크로드: 데이터 통합 옵션

그림 1 Salesforce 워크로드: 데이터 통합 옵션

데이터가 Cortex Framework에서 예상하는 것과 일치하도록 하려면 매핑 구성을 조정하여 복제 도구 또는 기존 스키마를 매핑할 수 있습니다. 이렇게 하면 Cortex Framework Data Foundation에서 예상하는 구조와 호환되는 매핑 뷰가 생성됩니다.

ingestion_settings.yaml 파일을 사용하여 Salesforce API를 호출하고 데이터를 원시 데이터 세트로 복제하는 스크립트 생성 (salesforce_to_raw_tables 섹션)과 원시 데이터 세트와 CDC 처리 데이터 세트로 들어오는 변경사항을 처리하는 스크립트 생성 (raw_to_cdc_tables 섹션)을 구성합니다.

기본적으로 API에서 읽기 위해 제공된 스크립트는 변경사항을 원시 데이터 세트로 업데이트하므로 CDC 처리 스크립트는 필요하지 않으며 소스 스키마를 예상 스키마에 맞추기 위한 매핑 뷰가 대신 생성됩니다.

config.jsonSFDC.createMappingViews=true가 있는 경우 CDC 처리 스크립트 생성이 실행되지 않습니다 (기본 동작). CDC 스크립트가 필요한 경우 SFDC.createMappingViews=false를 설정합니다. 이 두 번째 단계에서는 Cortex Framework Data Foundation에서 요구하는 대로 소스 스키마를 필수 스키마에 매핑할 수도 있습니다.

다음 setting.yaml 구성 파일 예는 복제 도구가 데이터를 복제된 데이터 세트로 직접 업데이트할 때 매핑 뷰가 생성되는 것을 보여줍니다 (option 3 참고). 즉, CDC가 필요하지 않으며 테이블 및 필드 이름만 다시 매핑하면 됩니다. CDC가 필요하지 않으므로 config.json 파일의 매개변수 SFDC.createMappingViewstrue로 유지되는 한 이 옵션이 실행됩니다.

  salesforce_to_raw_tables:
  - base_table: accounts
    raw_table: Accounts
    api_name: Account
      load_frequency: "@daily"
  - base_table: cases
    raw_table: cases2
    api_name: Case
    load_frequency: "@daily"

이 예에서는 섹션에서 기본 테이블의 구성 또는 모든 구성을 삭제하면 salesforce_to_raw_tables에 표시된 것처럼 해당 기본 테이블 또는 전체 섹션의 DAG 생성이 건너뜁니다. 이 시나리오에서는 CDC 처리 스크립트를 생성할 필요가 없으므로 매개변수 deployCDC : False를 설정해도 동일한 효과가 있습니다.

데이터 매핑

수신되는 데이터 필드를 Cortex Data Foundation에서 예상하는 형식에 매핑해야 합니다. 예를 들어 소스 데이터 시스템의 unicornId라는 필드의 이름을 바꾸고 Cortex Data Foundation 내에서 AccountId (문자열 데이터 유형)으로 인식해야 합니다.

  • 소스 필드: unicornId (소스 시스템에서 사용되는 이름)
  • Cortex 필드: AccountId (Cortex에서 예상하는 이름)
  • 데이터 유형: String (Cortex에서 예상하는 데이터 유형)

다형성 필드 매핑

Cortex Framework Data Foundation은 이름은 다를 수 있지만 구조는 일관된 다형 필드 매핑을 지원합니다. 다형식 필드 유형 이름(예: Who.Type)은 각 매핑 CSV 파일(src/SFDC/src/table_schema/tasks.csv)에 [Field Name]_Type 항목을 추가하여 복제할 수 있습니다. 예를 들어 Task 객체의 Who.Type 필드를 복제해야 하는 경우 Who_Type,Who_Type,STRING 선을 추가합니다. 이렇게 하면 자체에 매핑되고 (동일한 이름을 유지함) 문자열 데이터 유형인 Who.Type라는 새 필드가 정의됩니다.

DAG 템플릿 수정

Airflow 또는 Cloud Composer 인스턴스의 요구사항에 따라 CDC용 DAG 템플릿 또는 원시 데이터 처리용 템플릿을 조정해야 할 수 있습니다. 자세한 내용은 Cloud Composer 설정 수집을 참고하세요.

API 호출에서 CDC 또는 원시 데이터 생성이 필요하지 않은 경우 deployCDC=false를 설정합니다. 또는 ingestion_settings.yaml에서 섹션의 콘텐츠를 삭제할 수 있습니다. 데이터 구조가 Cortex Framework Data Foundation에서 예상하는 구조와 일치하는 것으로 알려진 경우 SFDC.createMappingViews=false를 설정하여 매핑 뷰 생성을 건너뛸 수 있습니다.

추출 모듈 구성

이 섹션에서는 Data Foundation에서 제공하는 Salesforce to BigQuery 추출 모듈을 사용하는 단계를 설명합니다. 요구사항과 흐름은 시스템 및 기존 구성에 따라 다를 수 있습니다. 또는 사용 가능한 다른 도구를 사용할 수 있습니다.

사용자 인증 정보 및 연결된 앱 설정

Salesforce 인스턴스에 관리자로 로그인하여 다음을 완료합니다.

  1. 다음 요구사항을 충족하는 프로필을 Salesforce에서 만들거나 식별합니다.
    1. Permission for Apex REST Services and API Enabled시스템 권한에 따라 부여됩니다.
    2. 복제하려는 모든 객체에 View All 권한이 부여됩니다. 예를 들어 계정, Cases를 들 수 있습니다. 보안 관리자에게 제한사항이나 문제가 있는지 확인하세요.
    3. Lightning Experience의 Salesforce Anywhere, 모바일의 Salesforce Anywhere, Lightning Experience 사용자, Lightning 로그인 사용자와 같이 사용자 인터페이스 로그인과 관련된 권한이 부여되지 않았습니다. 보안 관리자의 제한사항 또는 문제가 있는지 확인하세요.
  2. Salesforce에서 기존 사용자를 만들거나 식별합니다. 사용자의 사용자 이름, 비밀번호, 보안 토큰을 알아야 합니다. 다음을 고려하세요.
    • 이 복제를 실행하는 전담 사용자가 이상적입니다.
    • 1단계에서 만들거나 식별한 프로필에 사용자가 할당되어야 합니다.
    • 여기에서 사용자 이름을 확인하고 비밀번호를 재설정할 수 있습니다.
    • 보안 토큰이 없거나 다른 프로세스에서 사용하지 않는 경우 보안 토큰을 재설정할 수 있습니다.
  3. 연결된 앱을 만듭니다. 연결된 앱은 프로필, Salesforce API, 표준 사용자 인증 정보, 보안 토큰을 사용하여 외부에서 Salesforce에 연결하는 유일한 커뮤니케이션 채널입니다.
    1. 안내에 따라 API 통합을 위한 OAuth 설정을 사용 설정합니다.
    2. API (사용 설정된 OAuth 설정) 섹션에서 Require Secret for Web Server FlowRequire Secretfor Refresh Token Flow가 사용 설정되어 있는지 확인합니다.
    3. 나중에 클라이언트 ID로 사용되는 소비자 키를 가져오는 방법은 문서를 참고하세요. 보안 관리자에게 문제 또는 제한사항이 있는지 확인하세요.
  4. 생성된 프로필에 연결된 앱을 할당합니다.
    1. Salesforce 홈 화면의 오른쪽 상단에서 설정을 선택합니다.
    2. 빠른 찾기 상자에 profile를 입력한 다음 프로필을 선택합니다. 1단계에서 만든 프로필을 검색합니다.
    3. 프로필을 엽니다.
    4. 할당된 연결된 앱 링크를 클릭합니다.
    5. 수정을 클릭합니다.
    6. 새로 만든 커넥티드 앱을 추가합니다.
    7. 저장 버튼을 클릭합니다.

Secret Manager 설정

연결 세부정보를 저장하도록 Secret Manager를 구성합니다. Salesforce-to-BigQuery 모듈은 Secret Manager를 사용하여 Salesforce 및 BigQuery에 연결하는 데 필요한 사용자 인증 정보를 안전하게 저장합니다. 이 접근 방식을 사용하면 비밀번호와 같은 민감한 정보가 코드나 구성 파일에 직접 노출되지 않아 보안이 강화됩니다.

다음 사양으로 보안 비밀을 만듭니다. 자세한 내용은 보안 비밀 만들기를 참고하세요.

  • 보안 비밀 이름: airflow-connections-salesforce-conn
  • 보안 비밀 값:

    http://USERNAME:PASSWORD@https%3A%2F%2FINSTANCE_NAME.lightning.force.com?client_id=CLIENT_ID&security_token=SECRET_TOKEN`
    

    다음을 바꿉니다.

    • USERNAME을 사용자 이름으로 바꿉니다.
    • PASSWORD을 비밀번호로 바꿉니다.
    • INSTANCE_NAME을 인스턴스 이름으로 바꿉니다.
    • CLIENT_ID를 클라이언트 ID로 바꿉니다.
    • SECRET_TOKEN을 보안 토큰으로 바꿉니다.

자세한 내용은 인스턴스 이름을 찾는 방법을 참고하세요.

복제용 Cloud Composer 라이브러리

Cortex Framework Data Foundation에서 제공하는 DAG에서 Python 스크립트를 실행하려면 일부 종속 항목을 설치해야 합니다. Airflow 버전 1.10의 경우 Cloud Composer 1용 Python 종속 항목 설치 문서에 따라 다음 패키지를 순서대로 설치합니다.

tableauserverclient==0.17
apache-airflow-backport-providers-salesforce==2021.3.3

Airflow 버전 2.x의 경우 apache-airflow-providers-salesforce~=5.2.0를 설치하려면 Cloud Composer 2용 Python 종속 항목 설치 문서를 참고하세요.

다음 명령어를 사용하여 필수 패키지를 설치합니다.

  gcloud composer environments update ENVIRONMENT_NAME \
  --location LOCATION \
   --update-pypi-package PACKAGE_NAME EXTRAS_AND_VERSION

다음을 바꿉니다.

  • ENVIRONMENT_NAME을 할당된 환경 이름으로 바꿉니다.
  • LOCATION을 위치로 바꿉니다.
  • PACKAGE_NAME을 선택한 패키지 이름으로 바꿉니다.
  • EXTRAS_AND_VERSION: 추가 항목 및 버전의 사양

다음 명령어는 필수 패키지 설치의 예입니다.

gcloud composer environments update my-composer-instance \
  --location us-central1 \
  --update-pypi-package apache-airflow-backport-providers-salesforce>=2021.3.3

Secret Manager를 백엔드로 사용 설정

Google Secret Manager를 보안 백엔드로 사용 설정합니다. 이 단계에서는 Cloud Composer 환경에서 사용하는 비밀번호 및 API 키와 같은 민감한 정보의 기본 저장소 위치로 Secret Manager를 활성화하는 방법을 설명합니다. 이렇게 하면 전용 서비스에서 사용자 인증 정보를 중앙 집중화하고 관리하여 보안이 강화됩니다. 자세한 내용은 Secret Manager를 참고하세요.

Composer 서비스 계정이 보안 비밀에 액세스하도록 허용

이 단계를 통해 Cloud Composer와 연결된 서비스 계정에 Secret Manager에 저장된 보안 비밀에 액세스하는 데 필요한 권한이 부여됩니다. 기본적으로 Cloud Composer는 Compute Engine 서비스 계정을 사용합니다. 필요한 권한은 Secret Manager Secret Accessor입니다. 이 권한을 사용하면 서비스 계정이 Secret Manager에 저장된 보안 비밀을 검색하고 사용할 수 있습니다.Secret Manager에서 액세스 제어를 구성하는 방법에 관한 포괄적인 가이드는 액세스 제어 문서를 참고하세요.

Airflow의 BigQuery 연결

Cloud Composer 설정 수집에 따라 연결 sfdc_cdc_bq를 만들어야 합니다. 이 연결은 Salesforce-to-BigQuery 모듈에서 BigQuery와의 통신을 설정하는 데 사용될 수 있습니다.

다음 단계