Slack용 Openflow Connector 설정하기

참고

커넥터에는 커넥터 약관 이 적용됩니다.

이 항목에서는 Slack용 Openflow Connector를 설정하는 단계에 대해 설명합니다.

전제 조건

  1. Slack용 Openflow Connector 을 검토했는지 확인합니다.

  2. Openflow를 설정 했는지 확인합니다.

Slack 앱 설정하기

Slack 워크스페이스에 Slack 앱을 설정합니다. Slack 워크스페이스에 대한 액세스 권한을 설정하려면 Slack 관리자가 필요합니다. 이 작업은 Slack 앱에 자격 증명을 생성하거나 제공하고 Slack 워크스페이스 및 채널에 앱을 설치하면 완료됩니다. JSON 구성을 사용하여 Slack 앱을 생성할 수 있습니다.

  1. JSON 매니페스트를 업데이트합니다. 아래 JSON 매니페스트 텍스트를 복사본으로 복사합니다. 이름 및 표시 이름 속성을 EXAMPLE_NAME_CHANGE_THIS 에서 Slack 앱의 원하는 이름으로 변경합니다. 앱에 동일한 이름과 표시 이름을 사용하는 것이 좋습니다.

    {
        "display_information": {
            "name": "EXAMPLE_NAME_CHANGE_THIS"
        },
        "features": {
            "bot_user": {
                "display_name": "EXAMPLE_NAME_CHANGE_THIS",
                "always_online": false
            }
        },
        "oauth_config": {
            "scopes": {
                "bot": [
                    "channels:history",
                    "channels:read",
                    "groups:history",
                    "groups:read",
                    "im:history",
                    "im:read",
                    "mpim:history",
                    "mpim:read",
                    "users.profile:read",
                    "users:read",
                    "users:read.email",
                    "files:read",
                    "app_mentions:read",
                    "reactions:read"
                ]
            }
        },
        "settings": {
            "event_subscriptions": {
                "bot_events": [
                    "message.channels",
                    "message.groups",
                    "message.im",
                    "message.mpim",
                    "reaction_added",
                    "reaction_removed",
                    "file_created",
                    "file_deleted",
                    "file_change"
                ]
            },
            "interactivity": {
                "is_enabled": true
            },
            "org_deploy_enabled": false,
            "socket_mode_enabled": true,
            "token_rotation_enabled": false
        }
    }
    
    Copy
  2. 앱 페이지 를 통해 Slack 앱을 생성합니다.

    1. 내 앱 페이지에서 새 앱 생성하기 를 선택합니다.

    2. 매니페스트에서 를 선택합니다.

    3. 앱을 개발할 워크스페이스 를 선택합니다. 원하는 경우 나중에 다른 워크스페이스에 [앱을 배포](https://api.slack.com/distribution) 할 수 있습니다.

    4. 1단계에서 업데이트된 매니페스트 JSON 을 복사합니다.

  3. 앱 수준 토큰을 생성합니다. JSON 매니페스트를 사용한 후에도 앱 수준 토큰을 생성해야 합니다. Basic Information 에서 App-level tokens 섹션으로 스크롤하고 버튼을 클릭하여 [앱 수준 토큰](https://api.slack.com/concepts/token-types#app) 을 생성합니다. 토큰에 connections:write 범위를 포함시킵니다.

  4. 앱을 설치하고 승인합니다.

    1. 앱 관리 페이지의 기본 정보 섹션으로 돌아갑니다.

    2. 워크스페이스에 설치 버튼을 선택하여 앱을 설치합니다.

    3. 이제 Slack OAuth 플로우를 통해 전송됩니다. 다음 화면에서 허용 을 선택합니다.

    자신의 워크스페이스가 아닌 다른 워크스페이스에 앱을 추가하려면 해당 워크스페이스의 사용자가 이러한 단계를 수행해야 합니다. 설치한 다음 OAuth & 권한 페이지로 다시 이동합니다. OAuth 토큰 아래에 액세스 토큰 이 표시됩니다. 액세스 토큰은 설치한 사용자가 앱에 부여한 권한을 나타냅니다. 안전하게 보안을 유지하십시오. 공개 버전 관리로 확인하지 마십시오. 대신 환경 변수를 통해 액세스하십시오.

  5. 채널에 앱 추가하기. 앱이 아직 채널에 가입되어 있지 않으므로 테스트 메시지를 추가할 채널을 선택하고 앱에 /invite 를 입력합니다. 예: /invite @Grocery Reminders.

참고

프로세서를 다시 시작하여 새 채널을 로딩합니다. 앱을 새 채널에 추가한 후에는 OpenFlow 런타임의 Consume Slack Conversation 프로세서를 중지했다가 다시 시작해야 합니다.

필요한 출입 규칙 설정하기

Snowflake 관리자는 송신 가이드 에 따라 엔드포인트 https://slack.com/api 에 송신 규칙을 적용하고 wss://wss.slack.com 에서 WebSocket 송신을 활성화해야 합니다. “slack.com” 도메인에서 송신을 활성화하는 규칙을 추가하면 가장 쉽게 수행할 수 있습니다.

Snowflake 계정 설정하기

Snowflake 계정 관리자는 다음 작업을 수행합니다.

  1. 새 역할을 생성하거나 기존 역할을 사용하여 데이터베이스 권한 권한을 부여합니다.

  2. 유형이 SERVICE 인 새 Snowflake 서비스 사용자를 생성합니다.

  3. Snowflake 서비스 사용자에게 이전 단계에서 생성한 역할을 부여합니다.

  4. 2단계의 Snowflake SERVICE 사용자에 대해 키 페어 인증 으로 구성합니다.

  5. Snowflake는 이 단계를 강력히 권장합니다. Openflow에서 지원하는 시크릿 관리자(예: AWS, Azure, Hashicorp)를 구성하고 공개 및 개인 키를 시크릿 스토어에 저장합니다.

    참고

    어떤 이유로든 시크릿 관리자를 사용하지 않으려면 조직의 보안 정책에 따라 키 페어 인증에 사용되는 공개 키와 개인 키 파일을 보호할 책임이 있습니다.

    1. 시크릿 관리자가 구성되면 인증 방법을 결정합니다. AWS 에서는 다른 시크릿을 유지할 필요가 없으므로 Openflow와 연결된 EC2 인스턴스 역할을 사용하는 것이 좋습니다.

    2. Openflow에서 오른쪽 상단의 햄버거 메뉴에서 이 시크릿 관리자와 연결된 매개 변수 공급자를 구성합니다. Controller Settings » Parameter Provider 로 이동한 다음 매개 변수 값을 가져옵니다.

    3. 이 시점에서 모든 자격 증명은 연결된 매개 변수 경로로 참조할 수 있으며 민감한 값은 Openflow 내에서 유지될 필요가 없습니다.

  6. 다른 Snowflake 사용자가 커넥터에서 수집한 원시 수집 문서 및 테이블에 대한 액세스가 필요한 경우(예: Snowflake에서 사용자 정의 처리를 위해), 해당 사용자에게 1단계에서 생성한 역할을 부여하십시오.

  7. 커넥터가 사용할 웨어하우스를 지정합니다. 가장 작은 데이터 웨어하우스 크기로 시작한 다음 복제되는 테이블 수와 전송되는 데이터의 양에 따라 크기를 실험해 보십시오. 테이블 수가 많은 경우 일반적으로 더 큰 규모의 웨어하우스보다는 멀티 클러스터 웨어하우스 에서 확장이 더 쉽습니다.

사용 사례 1: Slack 내용만 수집하기

커넥터 정의를 사용합니다.

  • 수집된 Slack 데이터에 대한 사용자 지정 분석을 수행합니다(Cortex Search 처리 없음).

  • Slack 메시지, 리액션, 첨부 파일, 멤버 목록을 Snowflake로 수집하고 최신 상태로 유지하십시오.

커넥터 설정하기

데이터 엔지니어는 다음 작업을 수행하여 커넥터를 구성합니다.

커넥터 설치하기

  1. 커넥터가 수집한 데이터를 저장할 수 있도록 Snowflake에서 데이터베이스와 스키마를 생성합니다. 첫 번째 단계에서 생성한 역할에 필수 데이터베이스 권한 를 부여합니다. 역할 자리 표시자를 실제 값으로 바꾸고 다음 SQL 명령을 사용합니다.

    CREATE DATABASE DESTINATION_DB;
    CREATE SCHEMA DESTINATION_DB.DESTINATION_SCHEMA;
    GRANT USAGE ON DATABASE DESTINATION_DB TO ROLE <CONNECTOR_ROLE>;
    GRANT USAGE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
    GRANT CREATE TABLE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
    
    Copy
  1. Openflow 개요 페이지로 이동합니다. Featured connectors 섹션에서 View more connectors 을 선택합니다.

  2. Openflow Connector 페이지에서 커넥터를 찾아 Add to runtime 을 선택합니다.

  3. Select runtime 대화 상자의 Available runtimes 드롭다운 목록에서 런타임을 선택합니다.

  4. Add 를 선택합니다.

    참고

    커넥터를 설치하기 전에 커넥터가 수집한 데이터를 저장할 수 있도록 Snowflake에서 데이터베이스와 스키마를 생성했는지 확인하십시오.

  5. Snowflake 계정 자격 증명으로 배포를 인증하고 런타임 애플리케이션이 Snowflake 계정에 액세스할 수 있도록 허용할지 묻는 메시지가 표시되면 Allow 를 선택합니다. 커넥터 설치 프로세스를 완료하는 데 몇 분 정도 걸립니다.

  6. Snowflake 계정 자격 증명으로 런타임에 인증합니다.

커넥터 프로세스 그룹이 추가된 Openflow 캔버스가 표시됩니다.

커넥터 구성

  1. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Parameters 를 선택합니다.

  2. 아래의 플로우 매개 변수: 내용만 수집 에 설명된 대로 필요한 매개 변수 값을 입력합니다.

  3. 캔버스를 마우스 오른쪽 버튼으로 클릭하고 Enable all controller services 를 선택합니다.

  4. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Start 를 선택합니다. 이 플로우는 모든 필수 권한을 충족하는 Snowflake 오브젝트를 생성하고 Slack 데이터를 수집하기 시작합니다.

플로우 매개 변수: 내용만 수집

매개 변수

설명

앱 토큰

Slack 앱에서 생성된 Slack 앱 수준 토큰.

Bot Token

Slack 앱에서 생성된 Slack 봇 토큰.

대상 데이터베이스

모든 커넥터 오브젝트를 포함하는 데이터베이스(없는 경우 생성됨).

대상 스키마

데이터베이스 내부 스키마(없는 경우 생성됨).

Snowflake 계정

Snowflake 계정 식별자.

Snowflake 역할

인증 후 플로우가 가정하는 역할입니다.

Snowflake 사용자

플로우가 연결에 사용하는 사용자 이름입니다.

Snowflake 개인 키

RSA 인증에 사용되는 개인 키(PKCS8 PEM 형식). Snowflake 개인 키 또는 Snowflake 개인 키 파일을 정의해야 합니다.

Snowflake 개인 키 비밀번호

암호화된 개인 키의 비밀번호(암호화되지 않은 경우 비워 두십시오).

Snowflake 개인 키 파일

RSA 개인 키가 포함된 파일(PKCS8 PEM 형식). 헤더 라인은 -----BEGIN PRIVATE 로 시작합니다.

Snowflake 웨어하우스

플로우에서 실행되는 SQL 에 사용되는 웨어하우스입니다.

업로드 간격

Snowflake로 푸시하기 전에 데이터를 수집할 시간입니다. 간격이 길어지면 Snowflake의 로딩이 줄어들지만 지연 시간과 메모리 사용량이 증가할 수 있습니다.

Slack 멤버 새로 고침

Slack 멤버 자격(ACL)이 새로 고쳐지는 간격(분)

사용 사례 2: Slack 내용 수집 및 Cortex 활성화

커넥터 정의를 사용합니다.

  • Snowflake Cortex를 사용하여 대화형 검색을 위한 Slack 데이터를 준비하십시오.

  • 검색 결과에서 Slack 채널 액세스 제어가 준수되는지 확인하십시오.

커넥터 설정하기

데이터 엔지니어는 다음 작업을 수행하여 커넥터를 구성합니다.

커넥터 설치하기

  1. 커넥터가 수집한 데이터를 저장할 수 있도록 Snowflake에서 데이터베이스와 스키마를 생성합니다. 첫 번째 단계에서 생성한 역할에 필수 데이터베이스 권한 를 부여합니다. 역할 자리 표시자를 실제 값으로 바꾸고 다음 SQL 명령을 사용합니다.

    CREATE DATABASE DESTINATION_DB;
    CREATE SCHEMA DESTINATION_DB.DESTINATION_SCHEMA;
    GRANT USAGE ON DATABASE DESTINATION_DB TO ROLE <CONNECTOR_ROLE>;
    GRANT USAGE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
    GRANT CREATE TABLE ON SCHEMA DESTINATION_DB.DESTINATION_SCHEMA TO ROLE <CONNECTOR_ROLE>;
    
    Copy
  1. Openflow 개요 페이지로 이동합니다. Featured connectors 섹션에서 View more connectors 을 선택합니다.

  2. Openflow Connector 페이지에서 커넥터를 찾아 Add to runtime 을 선택합니다.

  3. Select runtime 대화 상자의 Available runtimes 드롭다운 목록에서 런타임을 선택합니다.

  4. Add 를 선택합니다.

    참고

    커넥터를 설치하기 전에 커넥터가 수집한 데이터를 저장할 수 있도록 Snowflake에서 데이터베이스와 스키마를 생성했는지 확인하십시오.

  5. Snowflake 계정 자격 증명으로 배포를 인증하고 런타임 애플리케이션이 Snowflake 계정에 액세스할 수 있도록 허용할지 묻는 메시지가 표시되면 Allow 를 선택합니다. 커넥터 설치 프로세스를 완료하는 데 몇 분 정도 걸립니다.

  6. Snowflake 계정 자격 증명으로 런타임에 인증합니다.

커넥터 프로세스 그룹이 추가된 Openflow 캔버스가 표시됩니다.

커넥터 구성

  1. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Parameters 를 선택합니다.

  2. 아래의 플로우 매개 변수: 내용을 수집하고 Cortex 활성화 에 설명된 대로 필요한 매개 변수 값을 입력합니다.

  3. 캔버스를 마우스 오른쪽 버튼으로 클릭하고 Enable all controller services 를 선택합니다.

  4. 가져온 프로세스 그룹을 마우스 오른쪽 버튼으로 클릭하고 Start 를 선택합니다.

  5. 플로우가 실행되면 Cortex Search 서비스 쿼리 를 수행하여 테스트합니다.

플로우 매개 변수: 내용 수집 및 Cortex 활성화

매개 변수

설명

앱 토큰

Slack 앱에서 생성된 Slack 앱 수준 토큰.

Bot Token

Slack 앱에서 생성된 Slack 봇 토큰.

대상 데이터베이스

모든 커넥터 오브젝트를 포함하는 데이터베이스(없는 경우 생성됨).

대상 스키마

데이터베이스 내부 스키마(없는 경우 생성됨).

업로드 간격

Snowflake로 푸시하기 전에 데이터를 수집할 시간입니다. 값이 클수록 로딩은 감소하지만 데이터 지연 시간은 증가합니다.

Snowflake 계정

Snowflake 계정 식별자.

Snowflake 역할

인증 후 플로우가 가정하는 역할입니다.

Snowflake 사용자

플로우가 연결에 사용하는 사용자 이름입니다.

Snowflake 개인 키

키 페어 인증을 위한 PEM 형식이 지정된 개인 키입니다.

Snowflake 개인 키 비밀번호

암호화된 개인 키의 비밀번호(암호화되지 않은 경우 비워 둡니다).

Snowflake 웨어하우스

플로우 Cortex에 의해 실행되는 모든 SQL 에 사용되는 웨어하우스.

Slack 멤버 새로 고침

Slack 멤버 자격(ACL)이 새로 고쳐지는 간격(분)

비공개 채널 ACLs 활성화

Slack 앱을 각 개인 채널에 초대 하는 것 외에 추가적인 단계는 필요 없습니다. 커넥터는 멤버 목록을 자동으로 새로 고치고 각 Slack 멤버 새로 고침 간격마다 멤버 자격 테이블에 저장합니다.

Cortex Search Service 쿼리하기

사용 사례 2가 실행되고 Cortex Search Service가 생성된 후에는 다음과 같이 쿼리할 수 있습니다.

SELECT PARSE_JSON(
  SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
    '<openflow_db>.<openflow_schema>.<<SLACK_CORTEX_SEARCH>',
    '{
      "query": "What is my vacation carry over policy?",
      "columns": ["text","channel","ts","username"],
      "filter": {"@contains": {"memberemails": "alice@example.com"}},
      "limit": 10
    }'
  )
)['results'] AS results;
Copy

검색 가능한 공통 열

text, type, subtype, channel, user, username, connectorId, workspaceId, ts, threadTs

예시: AI 어시스턴트에게 인적 리소스(HR) 정보 쿼리하기

Cortex Search를 사용하여 직원들이 최신 Slack 게시물에 대해 채팅할 수 있도록 AI 어시스턴트에게 쿼리할 수 있습니다. 검색되는 메시지는 일반 또는 IT-도움말과 같은 유익한 Slack 채널에서 올 수 있습니다.

SQL 워크시트 에서 다음을 실행하여 Slack에서 수집된 메시지에 대해 Cortex Search Service를 쿼리하십시오.

다음을 바꿉니다.

  • cortex_db: 대상 데이터베이스 매개 변수에 의해 지정된 Cortex Search Service가 포함된 데이터베이스의 이름입니다.

  • cortex_schema: 대상 스키마 매개 변수에 의해 지정된 Cortex Search Service를 포함하는 스키마의 이름입니다.

  • cortex_search_service_name: Cortex Search 이름 매개 변수에 의해 지정된 Cortex Search Service의 이름입니다.

  • user_emailID: 응답을 필터링하려는 사용자의 이메일 ID 입니다.

SELECT PARSE_JSON(
     SNOWFLAKE.CORTEX.SEARCH_PREVIEW(
          '<cortex_db>.<cortex_schema>.<cortex_search_service_name>',
          '{
             "query": "What is my vacation carry over policy?",
             "columns": ["text", "channel", “ts”,”username”],
             "filter": {"@contains": {"memberemails": "<user_emailID>"} },
             "limit": 1
          }'
     )
 )['results'] AS results
Copy