AWS Lambda 関数一式(Slackへの通知アプリ)を ZIPで固めて Lambda にアップロードして登録して実行する手順について解説します。
更に EventBridge にも登録して EC2 インスタンスのステータスが変更したら EventBridge から Lambda をキックして Slack に通知させます。
簡単な設計
- Slack に通知する Lambda 関数を作成する。
- Slack から Webhook の URL を取得して Python で Slack に通知する。
- ローカル PC に Python の仮想環境を構築してプログラムファイルとライブラリ一式を用意する。
- プログラムファイルとライブラリ一式を ZIP でアーカイブして Lambda にアップロードする。
- EC2 インスタンスのステータスが変更した場合(runningとかstoppingとかstoppedなど)、EventBridgeが Lambda 関数をキックして Slack に通知する。
Slack の準備
初めに Slack の準備をします。
Slack は無料版です。
Slack をインストールして起動した後、左側ペインより「アプリを追加する」をクリックします。
検索欄に「incoming-webhook」を入力して検索して「incoming-webhook」をクリックします。
「設定」ボタンをクリックします。
ブラウザ上に移動します。
「Slack に追加」ボタンをクリックします。
「チャンネルを選択」をクリックして通知したいチャンネルをクリックします。
チャンネルを選択して「Incoming Webhook インテグレーションの追加」ボタンをクリックします。
Webhook URL が表示されることを確認します。
ここで Slack の準備は完了です。
ローカル PC に Python の仮想環境を作成する
次はローカルの PC に Python の仮想環境を作成します。
対象のフォルダに移動します。
c:\work\slack-test>cd c:\work\slack-test |
venvで仮想環境を作成します。
slack-testという仮想環境を作成します。
■venvで仮想環境を作成する
c:\work\slack-test>python -m venv slack-test |
■アクティベートして仮想環境を有効化する
c:\work\slack-test>slack-test\Scripts\activate.bat |
プロンプトが以下のように切り替わることを確認します。
■プロンプトが切り替わることを確認
(slack-test) c:\work\slack-test> |
boto3とrequestsをインストールします。
■boto3とrequestsをインストールする
(slack-test) c:\work\slack-test>pip install boto3 -t ./ (slack-test) c:\work\slack-test>pip install requests -t ./ |
- -t(–target)オプション ← パッケージを指定したディレクトリにインストールします。デフォルトでは指定ディレクトリ内の既存のファイル/フォルダーを置き換えません。置き換えたい場合は –upgrade オプションを使用して、指定ディレクトリ内の既存のパッケージを新しいバージョンに置き換えます。
インストール直後は下図のようになっています。
Slack に通知する Python アプリの作成
仮想環境の準備ができたら Slack に通知する Python アプリを作成します。
ファイル名:slackAlert.py
同じフォルダ(C:\work\slack-test)にslackAlert.pyファイルを作成します。
■Python アプリ
import requests |
slack-test フォルダ内のファイルを選択して zip ファイルに圧縮します。
圧縮ファイル名を「slack.zip」にします。
AWS Lambda関数を作成する
ZIP ファイルを作成したら Lambda 関数を作成します。
Lambda のダッシュボードに移動します。
「関数の作成」ボタンをクリックします。
「関数の作成」画面で「一から作成」を選択します。
以下のように設定します。
- 関数名 : SlackAlert
- ランタイム : Python 3.9
- 実行ロール : 基本的な Lambda アクセス権限で新しいロールを作成
設定したら「関数の作成」ボタンをクリックします。
関数が作成されるので「アップロード元」をクリックして「.zipファイル」を選択します。
「アップロード」ボタンをクリックします。
slack.zip ファイルをアップロードしたら「保存」ボタンをクリックします。
エラーなくアップロードされたことを確認します。
ランタイム設定をする
次にランタイム設定をします。
ランタイム設定の「編集」ボタンをクリックします。
ハンドラを「slackAlert.send_slack」と入力します。
モジュール名(ファイル名)(slackAlert.py)とメソッド(send_slack)を入力してどのモジュールのメソッドを実行すればよいかを設定します。
テストをする
設定が終わったら動作テストをします。
「テスト」タブを選択し「イベント名」を入力し「保存」ボタンをクリックします。
「テスト」ボタンをクリックしてテストを実行します。
Slackに通知が飛ぶことを確認します。
EventBridge を使ってイベントを発生させて Lambda を実行する
EventBridge を使ってイベントを発生させて Lambda を実行する設定をします。
EventBridge のダッシュボードに移動します。
左側ペインより「ルール」をクリックします。
「ルールを作成」ボタンをクリックします。
「ルールの詳細を定義」画面で以下のように設定して「次へ」ボタンをクリックします。
- 名前 : SlackAlertRule
- 説明 : SlackAlertRule
- ルールタイプ : イベントパターンを持つルール
イベントソースで「AWS のサービス」を選択します。
サンプルイベントで「EC2 Instance State-change Notification」を選択してサンプルを確認します。
イベントパターンで以下のように設定して「次へ」ボタンをクリックします。
- イベントソース : EC2
- イベントタイプ : EC2 Instance State-change Notification
- イベントの状態 : 任意の状態
- イベントの対象 : 任意のインスタンス
「ターゲットを選択」画面で以下のように設定して「次へ」ボタンをクリックします。
ターゲットタイプ : AWS のサービス
ターゲットを選択 : Lambda 関数
機能 : SlackAlert
「タグを設定」画面で「次へ」ボタンをクリックします。
最後に設定内容を確認したら「ルールの作成」ボタンをクリックします。
実際に EC2 インスタンスの起動や停止を実施し Slack に通知が来ることを確認します。
コメント