Autonomous DatabaseからのSlack通知の送信

Autonomous DatabaseからSlackチャネルに問合せのメッセージ、アラートまたは出力を送信できるようにSlackを構成する方法について説明します。また、Slack通知の送信に使用する手順についても説明します。

Autonomous DatabaseからのSlack通知の送信の準備

Slack通知を送信するには、Autonomous Databaseからメッセージを受信するようにSlackアプリケーションを構成する必要があります。次に、DBMS_CLOUD_NOTIFICATIONプロシージャで使用する資格証明を作成して、Autonomous DatabaseからSlack通知を送信します。

DBMS_CLOUD_NOTIFICATIONプロシージャでSlackを使用するには:

  1. Slackアプリを作成します。

    SlackアプリケーションはSlackワークスペースにインストールされ、メッセージを送信できるチャネルがあります。Slackアプリケーションのボット・トークンには、次の権限スコープが定義されている必要があります:

    channels:read
    chat:write
    files:write

    Slackアプリケーションの設定の詳細は、アプリケーションの作成を参照してください。

  2. Slack管理者に、DBMS_CLOUD_NOTIFICATIONがチャネルの「統合」オプションを使用してメッセージを送信できるチャネルにSlackアプリケーションを追加してもらいます。

    詳細は、基本的なアプリケーション設定を参照してください。

  3. Slackアプリケーション固有のページにあるhttps://app.slack.comの下にあるアプリケーションのボット・トークンを見つけます。

    詳細は、基本的なアプリケーション設定を参照してください。

  4. Autonomous DatabaseからSlackアプリケーションにアクセスするための資格証明オブジェクトを作成します。

    ヒント:

    CREATE_CREDENTIALプロシージャを正常に使用できない場合は、ADMINユーザーに問い合せて、DBMS_CLOUDパッケージに対する実行アクセス権を付与します。

    資格証明のユーザー名はSLACK_TOKENで、パスワードはボット・トークンです。

    たとえば、次のとおりです。

    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'SLACK_CRED',
         username    => 'SLACK_TOKEN',
         password    => 'xoxb-34....96-34....52-zW....cy');
    END;
    /

    詳細は、CREATE_CREDENTIALプロシージャを参照してください。

  5. 外部ネットワーク・サービス(Slack)へのユーザー・アクセスを許可するアクセス制御を構成します。
    BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host         => 'slack.com', 
      lower_port   => 443,
      upper_port   => 443,
      ace          => xs$ace_type(
          privilege_list => xs$name_list('http'),
          principal_name => example_invoking_user, 
          principal_type => xs_acl.ptype_db)); 
    END;

    詳細は、「外部ネットワーク・サービスのアクセス制御の構成」を参照してください。

Slackチャネルへのメッセージの送信

「Autonomous DatabaseからSlack通知を送信する準備」の説明に従ってSlack資格証明オブジェクトを作成した後、DBMS_CLOUD_NOTIFICATION.SEND_MESSAGEプロシージャを使用してSlackチャネルにメッセージを送信できます。
次に例を示します:
BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
      provider          => 'slack',
      credential_name   => 'SLACK_CRED',
      message           => 'Alert from Autonomous Database...',
      params            => json_object('channel' value 'C0....08'));
END;
/ 

paramsパラメータを使用して、Slackチャネルを指定します。

  • channel: チャネルIDを指定します。

    チャネルIDはチャネルの一意のIDであり、チャネル名とは異なります。Slackでは、チャネルの詳細を表示すると、「About」タブでチャネルIDを確認できます。詳細は、「SlackチームIDおよびSlackチャネルIDの検索方法」を参照してください。

詳細は、SEND_MESSAGEプロシージャを参照してください。

Slackチャネルへの問合せ結果の送信

「Autonomous DatabaseからSlack通知を送信する準備」の説明に従ってSlack資格証明オブジェクトを作成した後、DBMS_CLOUD_NOTIFICATION.SEND_DATAプロシージャを使用して問合せの出力をSlackチャネルに送信できます。
次に例を示します:
BEGIN
  DBMS_CLOUD_NOTIFICATION.SEND_DATA(
      provider => 'slack',
      credential_name => 'SLACK_CRED',
      query => 'SELECT username, account_status, expiry_date FROM USER_USERS WHERE rownum < 5',
      params => json_object('channel' value 'C0....08',
                            'type' value 'csv'));
END;
/

paramsパラメータを使用して、Slackチャネルおよびデータ型を指定します:

  • channel: チャネルIDを指定します。

    チャネルIDはチャネルの一意のIDであり、チャネル名とは異なります。Slackでは、チャネルの詳細を表示すると、「About」タブでチャネルIDを確認できます。詳細は、「SlackチームIDおよびSlackチャネルIDの検索方法」を参照してください。

  • type: 出力タイプを指定します。有効な値は、'csv'または'json'です。

詳細は、SEND_DATAプロシージャを参照してください。