Openflow Connector for Slack設定する

注釈

コネクタには、 コネクタ利用規約 が適用されます。

このトピックでは、Openflow Connector for Slackを設定する手順について説明します。

前提条件

  1. Openflow Connector for Slack を確認してください。

  2. Openflowを設定した ことを確認します。

Slack Appを設定する

SlackワークスペースにSlackアプリを設定します。Slack Workspaceに対するアクセス権を設定するには、Slack Admin権限が必要です。これは、Slack Appの認証情報を作成または提供し、Slackワークスペースとチャンネルにアプリをインストールすることによって行われます。JSON 構成を使用して、Slack Appを作成することができます。

  1. JSON マニフェストを更新します。下記の JSON マニフェストテキストをコピーします。名前と表示名のプロパティを、 EXAMPLE_NAME_CHANGE_THIS からSlack Appの任意の名前に変更します。Appには同じ名前と表示名を使用することを推奨します。

    {
        "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. Appsページ 経由でSlack Appアプリを作成します。

    1. Your Apps ページで、 Create New App を選択します。

    2. From a manifest を選択します。

    3. アプリを開発する Workspace を選択します。後で他のワークスペースに [アプリを配布](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. アプリ管理ページの Basic Information セクションに戻ります。

    2. Install to Workspace ボタンを選択して、アプリをインストールします。

    3. Slack OAuth フローが表示されます。以下の画面で Allow を選択します。

    自分のワークスペース以外の別のワークスペースにアプリを追加したい場合は、そのワークスペースのユーザーがこれらの手順を実行する必要があります。インストール後、 OAuth & Permissions ページに戻ります。 OAuth トークン の下に アクセストークン が表示されます。アクセストークンは、インストールユーザーからアプリに委任された権限を表します。安全に保管してください。公開バージョン管理へのチェックインは避けてください。代わりに、環境変数を通してアクセスします。

  5. チャンネルへのAppの追加アプリはまだどのチャンネルにも属していないので、テストメッセージを追加するチャンネルを選び、アプリの /invite を行います。例えば、 /invite @Grocery Reminders です。

注釈

プロセッサーを再起動して、新しいチャンネルをロードします。Appが新しいチャンネルに追加されたら、 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 ユーザーを key-pair auth で構成します。

  5. Snowflakeではこの手順を強く推奨します。Openflowがサポートするシークレットマネージャ(AWS、Azure、Hashicorpなど)を構成し、公開キーと秘密キーを秘密ストアに格納します。

    注釈

    何らかの理由でシークレットマネージャを使用したくない場合は、組織のセキュリティポリシーに従って、キーペア認証に使用する公開キーと秘密キーファイルを保護する責任があります。

    1. シークレットマネージャを構成したら、その認証方法を決定します。AWS 上では、Openflowに関連付けられた EC2 インスタンスロールが推奨されます。こうすることで、他の秘密を永続化する必要がなくなるからです。

    2. Openflowで、右上のハンバーガーメニューから、このシークレットマネージャに関連付けられたParameter Providerを構成します。 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のコネクタページでコネクタを探し、 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 Appで生成されたSlack アプリレベルトークン

ボット トークン

Slack Appで生成されたSlack Botトークン

宛先データベース

すべてのコネクタオブジェクトを含むデータベース(ない場合は作成)。

宛先スキーマ

データベース内部のスキーマ(ない場合は作成)。

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のコネクタページでコネクタを探し、 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 Appで生成されたSlack アプリレベルトークン

ボット トークン

Slack Appで生成されたSlack Botトークン

宛先データベース

すべてのコネクタオブジェクトを含むデータベース(ない場合は作成)。

宛先スキーマ

データベース内部のスキーマ(ない場合は作成)。

アップロード間隔

Snowflakeにプッシュする前にデータを収集する時間。値を大きくすると負荷は減りますが、データのレイテンシは増加します。

Snowflakeアカウント

Snowflakeアカウント識別子。

Snowflakeロール

認証後にフローが想定するロール。

Snowflakeユーザー

フローが接続に使用するユーザー名。

Snowflake秘密キー

PEM-形式の秘密キー鍵をキーペア認証に使用します。

Snowflake秘密キーパスワード

暗号化された秘密キーのパスワード(暗号化されていない場合は空白)。

Snowflakeウェアハウス

Cortexによるフロー および で実行されるすべての SQL に使用されるウェアハウス。

Slackメンバーの更新

Slackメンバーシップ(ACL)の更新間隔を分単位で指定します。

プライベートチャンネル ACLs の有効化

各プライベートチャンネルに Slack Appを招待 するだけで、特別な手順は必要ありません。コネクタは、 Slackメンバーの更新 間隔で自動的にメンバーリストを更新し、メンバーシップテーブルに格納します。

Cortex Search serviceをクエリする

ユースケース2が実行され、Cortex Searchサービスが作成されると、以下のようにクエリを実行することができます。

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

一般的な検索可能列

texttypesubtypechanneluserusernameconnectorIdworkspaceIdtsthreadTs

例: AI アシスタントに人事(HR)情報をクエリする

Cortex Searchを使用して、Slackの最新投稿についてチャットする従業員向けの AI アシスタントをクエリできます。検索されるメッセージは、generalやit-helpなどの有益なSlackチャンネルから派生します。

SQL ワークシート で、Slackから取り込まれたメッセージに対してCortex Searchサービスをクエリするために以下を実行します。

以下を置き換えます。

  • cortex_db: Cortex Searchサービスを含むデータベースの名前。 Destination Database パラメーターで指定します。

  • cortex_schema: Cortex Searchサービスを含むスキーマの名前。 Destination Database パラメーターで指定します。

  • cortex_search_service_name: Cortex Searchサービスの名前。 Cortex Search Name パラメーターで指定します。

  • 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