SYSTEM$SEND_SNOWFLAKE_NOTIFICATION を使用して通知を送信する

注釈

Snowflakeをご利用のすべてのお客様が、この機能を使ってメールを送信することができます。通知システムストアドプロシージャから送信されたメールメッセージは、SnowflakeのAmazon Web Services(AWS)の展開を通じて、 AWS Simple Email Service(SES)を使用して処理されます。AWS を使用して送信されたメールメッセージのコンテンツは、メッセージの配信を管理するために最大30日間Snowflakeによって保持される場合があります。この期間を過ぎると、メッセージのコンテンツは削除されます。

メールアドレス、Webhook、またはクラウドサービス(Amazon SNS、Google Cloud PubSub、Azure Event Grid)が提供するキューに通知を送信する必要がある場合は、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを使用します。

このストアドプロシージャを1回呼び出すだけで、次を実行できます。

  • 複数のタイプの宛先(メールアドレス、ウェブブック、およびキュー)にメッセージを送信します。

  • 複数のメールアドレス、Webhook、キューにメッセージを送信します。

  • 通知統合のタイプに従って、指定されたフォーマットでメッセージを送信します(電子メールではプレーンテキストまたはHTML、キューではJSON)。

たとえば、1回の呼び出しで、プレーンテキスト、 HTML、 JSON 形式のメッセージを複数のメールアドレスと複数の SNS、 PubSub、Event Gridトピックに送信できます。

複数の通知統合を使用して、異なるキューに通知を送信できます。また、メールアドレスや件名が異なる複数のメール通知統合を作成することもでき、受信者ごとにメールメッセージを簡単に構成できます。

通知の送信

通知を送信する前に、通知を送信するの使用する通知統合が必要です。電子メール通知を送信する場合は、受信者の電子メールアドレスも検証する必要があります。詳細については、 Snowflakeでの通知 をご参照ください。

電子メールアドレスまたはキューに通知を送信するには、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャを呼び出し、使用するメッセージと通知統合を指定します。

以下は、このストアドプロシージャの呼び出しの例です。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
   -- Message type and content.
  '{ "text/html": "<p>This is a message.</p>" }',
  -- Integration used to send the notification and values used for the subject and recipients.
  -- These values override the defaults specified in the integration.
  '{
    "my_email_int": {
      "subject": "Status update",
      "toAddress": ["person_a@example.com", "person_b@example.com"],
      "ccAddress": ["person_c@example.com"],
      "bccAddress": ["person_d@example.com"]
    }
  }'
);
Copy

上の例のように、JSON形式の文字列を引数として渡し、送信するメッセージと使用する通知統合を指定します。

これらの文字列の構文については、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION をご参照ください。

これらの JSON 形式の文字列を構築するには、 TEXT_HTML のようなヘルパー関数を呼び出してメッセージを指定し、 EMAIL_INTEGRATION_CONFIG のようなヘルパー関数を呼び出して通知の統合、件名行、メールアドレスを指定します。例:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>a message</p>'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int',
    'Status update',
    ARRAY_CONSTRUCT('person_a@example.com', 'person_b@example.com'),
    ARRAY_CONSTRUCT('person_c@example.com'),
    ARRAY_CONSTRUCT('person_d@example.com')
  )
);
Copy

使用できるヘルパー関数のリストについては、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION をご参照ください。

メール通知統合の既定値の上書き

メール通知統合 で指定されたデフォルトとは異なる受信者セットまたは異なる件名行を使用するには、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION に渡す統合構成オブジェクトの以下のプロパティを設定します。

  • subject (256文字を超えることはできません)

  • toAddress

  • ccAddress

  • bccAddress

例えば、メール通知統合 my_email_int を使用し、件名行、「To。」行、「Cc。」行、「Bcc。」行を上書きします。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{ "text/html": "<p>This is a message.</p>" }',
  '{
    "my_email_int": {
      "subject": "Status update",
      "toAddress": ["person_a@example.com", "person_b@example.com"],
      "ccAddress": ["person_c@example.com"],
      "bccAddress": ["person_d@example.com"]
    }
  }'
);
Copy

統合設定用の JSON 形式文字列を作成するには、 EMAIL_INTEGRATION_CONFIG ヘルパー関数を呼び出します。

例えば、件名を「サービスがダウンしました」とし、oncall-a@snowflake.comとoncall-b@snowflake.comにメールメッセージを送信するには、以下のステートメントを実行します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('Your message'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int,
    'Service down',
    ARRAY_CONSTRUCT('oncall-a@example.com', 'oncall-b@example.com')
  )
);
Copy

「Cc。」と「Bcc。」行をメールメッセージに含めるには、それらの行のメールアドレスの配列を追加の引数に渡します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('Your message'),
  SNOWFLAKE.NOTIFICATION.EMAIL_INTEGRATION_CONFIG(
    'my_email_int,
    'Service down',
    ARRAY_CONSTRUCT('oncall-a@example.com', 'oncall-b@example.com'),
    ARRAY_CONSTRUCT('cc-a@example.com', 'cc-b@example.com'),
    ARRAY_CONSTRUCT('bcc-a@example.com', 'bcc-b@example.com')
  )
);
Copy

「Cc:」行または「Bcc:」行のみを設定したい場合は(両方ではなく)、空の配列を渡すか、対応する引数に NULL を渡します。ヘルパー関数を使用せずに JSON オブジェクトを構築する場合は、JSON オブジェクトから ccAddress または bccAddress プロパティを省略します。

HTML、プレーンテキスト、 JSON メッセージの送信

HTML、プレーン・テキスト、またはJSONでメッセージを送信するには、JSONオブジェクトを渡します。このオブジェクトには、メッセージタイプがプロパティの名前として、メッセージがプロパティの値として含まれています。

'{ "<message_type>": "<message>" }'
Copy

"message_type" は次のいずれかになります。

  • "text/html"

  • "text/plain"

  • "application/json"

例:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{ "text/html": "<p>This is a message.</p>" }',
  '{ "my_email_int": {} }'
);
Copy

メッセージのJSONオブジェクトを作成するには、以下のヘルパー関数を使 います。

  • HTML メッセージについては、 TEXT_HTML を呼び出します。

  • プレーンテキストメッセージの場合は、 TEXT_HTML を呼び出します。

  • JSON メッセージについては、 APPLICATION_JSON を呼び出します。

次の例では、 my_email_int メール通知統合を使用して、 HTML メッセージを送信します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>a message</p>'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
);
Copy

次の例では、同じ統合を使ってプレーンテキストメッセージを送信します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
);
Copy

次の例は、 my_queue_int 通知統合によって指定されたキューに JSON メッセージを送信します。キューの通知統合の作成方法については、以下のトピックをご参照ください。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{ "name": "value" }'),
  SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int')
);
Copy

複数の統合を使用した通知の送信

複数の統合を使用して、メッセージを送信することができます。

  • 同じ関数呼び出しで、メールとトピックにメッセージを送信したい場合。

  • 異なるメール通知統合によって指定された異なるメールアドレスにメッセージを送信したい場合。

複数の統合を使用するには、 ARRAY_CONSTRUCT 関数を呼び出して統合構成の配列を作成し、 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION ストアドプロシージャの2番目の引数としてその配列を渡します。

例えば、異なる通知統合で設定されたキューとメールアドレスにプレーンテキストメッセージを送信します。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  '{"text/plain":"A message"}',
  ARRAY_CONSTRUCT(
    '{"my_sns_int":{}}',
    '{"my_email_int":{}}',
 )
);
Copy

注釈

配列は、同じ通知統合のための複数のオブジェクトを含むことはできません。

ヘルパー関数を使用して統合設定を構築したい場合は、ヘルパー関数が返す値をARRAY_CONSTRUCT関数に渡すことができます。例:

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int'),
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
  )
);
Copy

以下の例では、キューとメールアドレスに異なる形式のメッセージを送信しています。

CALL SYSTEM$SEND_SNOWFLAKE_NOTIFICATION(
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.TEXT_PLAIN('A message'),
    SNOWFLAKE.NOTIFICATION.TEXT_HTML('<p>A message</p>'),
    SNOWFLAKE.NOTIFICATION.APPLICATION_JSON('{ "name": "value" }')
  ),
  ARRAY_CONSTRUCT(
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_sns_int'),
    SNOWFLAKE.NOTIFICATION.INTEGRATION('my_email_int')
  )
);
Copy