こんにちは。クラウド活用推進担当です。
AWS最新情報をSlackに自動通知するアプリケーションを作成しました。
アプリケーション自体は、AWSさんが下記記事で公開している無償のサンプルコードを使用していて、
手軽に作成ができます。
※参照記事
builders.flash / 生成AIでAWSアップデートを効率的にキャッチアップ!
ただ、それがSlack有料プラン向けなんですね。(私が使用しているSlackは無料プラン……)
そこで、無料プランでも利用できるようにカスタマイズしてみました!
本記事では、その内容をご紹介します!
・Slackアカウントを持っていること
・AWSアカウントを持っていること
下記のような構成になっています。
基本的にアプリ作成手順はAWSさんの下記記事の通りに行ってください。
※参照記事
builders.flash / 生成AIでAWSアップデートを効率的にキャッチアップ!
ただし、Slack無料プランでも使えるよう、下記2つの手順が必要になります。
・AWSの記事には「Slack ワークフローの作成」手順がありますが、これは有料プラン限定の機能で使用できないため、代わりにSlack Incoming Webhookを作成する必要があります
・作成手順は下記記事を参考にしてください
※参照記事
こちらに関しては次項で紹介します。
CDKデプロイ前に、CDKの中身のpythonコードを修正します。
修正ファイルは下記の通り
whats-new-summary-notifier/lambda/notify-to-app/index.py
※こちらはLambdaの処理に使用されるpythonファイルです
下記のpythonコードを追加します。
挿入位置としては、Slackへデータ送信の処理がされる「else: # Slack」の下です。
msg_template = f"*タイトル: {item['rss_title']}*\n投稿時間: {item['rss_time']}\n要約: {item['summary']}\n詳細: {item['detail']}\nURL: {item['rss_link']}\n\n" msg = { 'username': 'AWS What\'s New', 'text': msg_template, 'mrkdwn': True }
下記が実際に修正したコードの一部抜粋です。
適切にインデントしないとエラーになってしまうので気を付けてください。
コード修正が終わったら、CDKをデプロイしましょう!
cdk deploy
修正したコードについて、知りたい方向けに詳しく説明します。
まず、元のコードはSlack有料プラン限定の「ワークフローWebhook」の使用を前提としていました。
ワークフローWebhookでは、Slackのワークフローで設定した変数をJSON形式で送る必要がありました。
そのため元のコードは下記のようなJSON形式でSlackへ送る処理となっていました。
{ "rss_title": "XXXXX", "rss_time": "XXXXX", "rss_link": "XXXXX", "summary": "XXXXX", "detail": "XXXXX", }
今回はSlack無料プランでも使用できる「Incoming Webhook」用にカスタマイズしました。
Incoming Webhookの場合、JSONに"text"が含まれなければいけません。
※"text"はSlackへ投稿されるメッセージ
他にも"username"などを指定できますが、少なくとも"text"が含まれる必要があります。
そのため下記のようなJSON形式で送るように修正してあります。
{ "username": "XXXXX", "text": "XXXXX" }
CDKデプロイ後、SlackにてAWS最新情報が投稿されるようになります!
※毎時0分に処理が走ります
BedrockやLambdaが毎日動作しているので、AWSのランニングコストがかかります。
が、大した額ではないです。私のアカウントでは、Bedrockは月300円くらいで、Lambdaは無料利用枠内で収まっています。
ただし、環境によって変わってくるので、コスト管理画面にて定期的に確認することをオススメします。
使用しているSlackが無料プランだったので、なんとか無料のまま作成できないかと四苦八苦した経験を記事にしてみました。
どなたかの参考になれば幸いです。
また、私はCDKを使用するのは初めてでしたが、CDKをデプロイした瞬間、
LambdaやDynamoDB、Cloudwatch Logまで自動で作成されていることに大変感動しました!
是非、自主勉強や社内ツールとして活用してみてください!