Openflow Connector for Salesforce Bulk API 문제 해결하기¶
참고
이 커넥터에는 `Snowflake Connector 약관<https://www.snowflake.com/legal/snowflake-connector-terms/>`_이 적용됩니다.
이 항목에서는 Openflow Connector for Salesforce Bulk API 문제를 해결하는 방법에 대해 설명합니다.
모니터링¶
Salesforce에서 Snowflake로 동기화되는 데이터의 양을 추적하려면 이벤트 테이블을 쿼리합니다. 다음 쿼리 예제에서는 지난 30분 동안의 관련 로그를 검색합니다.
문제 해결하기¶
커넥터 관련 문제를 해결하려면 다음 정보를 사용합니다.
인증 및 OAuth 오류¶
커넥터는 OAuth 2.0 JWT 전달자 흐름을 사용하여 Salesforce에 인증합니다. 인증 오류는 일반적으로 초기 설정 중에 발생하며 커넥터를 시작하기 전에 컨트롤러 서비스의 검증 기능 을 사용하여 진단할 수 있습니다.
invalid_grant 오류¶
invalid_grant 오류는 Salesforce가 OAuth 토큰 요청을 거부했음을 나타냅니다. 일반적인 원인은 다음과 같습니다.
잘못된 OAuth 흐름 유형. Salesforce의 외부 클라이언트 앱에 Enable JWT Bearer Flow 확인란이 선택되어 있지 않습니다. 커넥터에는 이 특정 흐름이 필요합니다. 기타 OAuth 흐름(예: 인증 코드 흐름)은 지원되지 않습니다. Salesforce에서 외부 클라이언트 앱 생성 섹션을 참조하십시오.
개인 키와 인증서가 일치하지 않음. 커넥터에 구성된 개인 키(Connected App Key 매개 변수)가 Salesforce의 외부 클라이언트 앱에 업로드된 공개 인증서와 일치하지 않습니다.
잘못된 컨슈머 키. OAuth2 Client ID 매개 변수가 인증서가 업로드된 외부 클라이언트 앱의 Consumer Key 와 일치하지 않습니다.
여러 앱의 혼합 자격 증명. 여러 외부 클라이언트 앱을 생성하거나 다른 구성으로 실험한 경우 클라이언트 ID, 인증서, 개인 키가 다른 앱에 속할 수 있습니다. 세 가지 모두 동일한 외부 클라이언트 앱에서 가져와야 합니다.
사용 중단된 앱. Salesforce는 외부 클라이언트 앱 사용을 위해 Connected App을 사용하지 않습니다. Connected App을 사용하는 경우에는 대신 새 외부 클라이언트 앱을 생성하는 것이 좋습니다.
잘못된 토큰 엔드포인트 URL. OAuth2 Token Endpoint URL 매개 변수는 올바른 Salesforce 인스턴스를 지정해야 합니다. 예를 들어
https://myCompany.my.salesforce.com/services/oauth2/token과 같습니다.잘못된 대상 그룹. OAuth2 Audience 매개 변수는 프로덕션 환경의 경우
https://login.salesforce.com으로 설정하고 샌드박스 및 테스트 환경의 경우https://test.salesforce.com으로 설정해야 합니다.
권한 오류¶
JWT 토큰이 성공적으로 생성되었지만 사용자에게 권한이 없는 경우 권한 또는 인증 오류가 표시됩니다. JWT 전달자 흐름은 작동하지만 Salesforce 사용자(OAuth2 주체)에게 외부 클라이언트 앱을 사용할 수 있는 권한이 없습니다.
이 문제를 해결하려면 다음을 수행합니다.
Salesforce에서 외부 클라이언트 앱의 Policies 탭으로 이동합니다.
Permitted Users 가 Admin approved users are pre-authorized 로 설정되어 있는지 확인합니다.
App Policies 섹션에 할당된 프로필 또는 권한 세트에 커넥터의 OAuth2 Subject 매개 변수에 지정된 사용자가 포함되어 있는지 확인합니다.
자세한 내용은 사용자에 대한 클라이언트 앱 승인 섹션을 참조하십시오.
커넥터 상태 확인¶
커넥터 상태를 검사하여 데이터가 예상대로 복제되고 있는지 확인할 수 있습니다. 커넥터는 Salesforce 변경 사항이 누락되지 않도록 하고 실패가 발생하는 경우 대량 작업 쿼리를 다시 시도하기 위해 현재 및 과거 작업의 상태를 유지합니다.
상태를 확인하려면 다음을 수행합니다.
캔버스를 마우스 오른쪽 버튼으로 클릭하고 :ui:`Controller services`를 선택합니다.
이름이 :ui:`Salesforce Bulk Jobs State`인 컨트롤러 서비스를 찾습니다.
Salesforce Bulk Jobs State 메뉴에서 View state 를 클릭합니다.
상태는 키가 Salesforce 오브젝트 유형인 키/값 페어 세트입니다. 예를 들어, Account 오브젝트의 상태는 다음 예제와 같을 수 있습니다.
``status``는 다음 중 하나일 수 있습니다.
IN_PROGRESSCOMPLETEDFAILEDABORTED
상태가 ``IN_PROGRESS``인 경우 해당 오브젝트 유형에 대해 FlowFile을 계속 처리 중인 것입니다.
조심
흐름 파일을 수동으로 삭제하지 마세요. 이로 인해 상태를 수동으로 업데이트할 수 없으므로 작업이 IN_PROGRESS 상태로 무기한 유지될 수 있습니다.
이 경우 해당 오브젝트 유형에 대해 전체 다시 로드를 수행해야 합니다.
주어진 오브젝트 유형에 대해 전체 로드 강제 적용¶
커넥터가 하나 이상의 오브젝트 유형에 대해 전체 새로 고침을 강제 적용하도록 하려면 다음을 수행합니다.
흐름의 모든 프로세서를 중지합니다.
진행 중인 FlowFiles가 처리 중이 아닌지 확인합니다.
캔버스를 마우스 오른쪽 버튼으로 클릭하고 :ui:`Disable all controller services`를 선택합니다.
Controller services`로 이동하여 :ui:`Salesforce Bulk Jobs State 컨트롤러 서비스의 상태를 엽니다.
다음 작업 중 하나를 수행합니다.
:ui:`Clear state`를 선택하여 전체 상태를 지웁니다. 이를 통해 커넥터가 가져온 구성된 모든 오브젝트 유형에 대해 전체 로드가 강제 적용됩니다.
특정 오브젝트 유형 옆에 있는 휴지통 아이콘을 선택하여 특정 오브젝트 유형의 상태만 지웁니다. 이를 통해 다음 커넥터 실행 중에 해당 특정 오브젝트 유형이 강제로 전체 로드됩니다.
캔버스에서 마우스 오른쪽 버튼을 클릭하고 :ui:`Enable all controller services`를 선택한 다음 모든 프로세서를 시작합니다.
오브젝트 유형이 IN_PROGRESS 상태로 유지되는 경우¶
주어진 오브젝트 유형의 상태가 ``IN_PROGRESS``로 유지되고 해당 오브젝트 유형에 대해 진행 중인 FlowFiles가 없는 경우 상태를 업데이트하기 전에 FlowFile가 수동으로 삭제되었을 수 있습니다.
이 경우 커넥터가 모든 이벤트를 캡처하도록 해당 오브젝트 유형에 대해 전체 로드를 수행해야 합니다.
상태가 ``IN_PROGRESS``로 유지되지만 FlowFiles가 수동으로 삭제된 경우 `Snowflake 지원`_에 문의하세요.