📤
Snowflake : Slack通知を作ってみる 画像を添えて
はじめに
こちらの記事の続きだと勝手に思っています。
今回は、Slack通知をSnowflakeから実行する際、画像を載せて通知を行います。
手順
-
NETWORK RULE
、SECRET
、EXTERNAL ACCESS INTEGRATION
は事前に作成お願いしますmm -
画像を保存するための
STAGE
を作成します。
CREATE OR REPLACE STAGE SAMPLE_STAGE ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
-
適当な画像を作成した STAGE 配下に格納します。
-
プロシージャを作成します。
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"
$$;
- 作成したプロシージャを呼び出します。
call slack_send_image();
- SlackへSTAGEに格納した画像が送られてきます。
Discussion