📤

Snowflake : Slack通知を作ってみる 画像を添えて

2023/11/22に公開

はじめに

こちらの記事の続きだと勝手に思っています。

今回は、Slack通知をSnowflakeから実行する際、画像を載せて通知を行います。

手順

  1. NETWORK RULESECRETEXTERNAL ACCESS INTEGRATION は事前に作成お願いしますmm

  2. 画像を保存するための STAGE を作成します。

CREATE OR REPLACE STAGE SAMPLE_STAGE ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
  1. 適当な画像を作成した STAGE 配下に格納します。

  2. プロシージャを作成します。

CREATE OR REPLACE PROCEDURE slack_send_image()
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.8
HANDLER = 'main'
EXTERNAL_ACCESS_INTEGRATIONS = (XXXXX)
SECRETS = ('slack_url' = XXXXX)
PACKAGES = ('snowflake-snowpark-python', requests)
EXECUTE AS CALLER
AS
$$
import snowflake.snowpark as snowpark
import json
import _snowflake

def get_image(session) -> str:
    df = session.sql("SELECT GET_PRESIGNED_URL('@SAMPLE_STAGE', 'sample.png', 15) as image_url").collect()
    return df[0][0]
    
def main(session): 
    webhook_url = _snowflake.get_generic_secret_string('slack_url')    
    image_url = get_image(session)
    slack_data = {
        "blocks": [
            {
                "type": "image",
                "title": {
                    "type": "plain_text",
                    "text": "sample画像だよ"
                },
                "block_id": "image4",
                "image_url": image_url,
                "alt_text": "test"
            }
        ]
    }
    response = requests.post(
        webhook_url, data=json.dumps(slack_data),
        headers={'Content-Type': 'application/json'}
    )
    if response.status_code != 200:
        raise ValueError(
            'Request to slack returned an error %s, Response:\n%s'
            % (response.status_code, response.text)
        )
    return "SUCCESS"
$$;

  1. 作成したプロシージャを呼び出します。
call slack_send_image();
  1. SlackへSTAGEに格納した画像が送られてきます。

参考

Discussion