サービス開発課の刈谷です。
Cloud Automator(CA)の開発に携わり、約10ヶ月程度経ちました。
※私のCAの使用方法(自動)は、開発環境で使用しているEC2を起動・停止させたりAMIのバックアップを取得しています。
※AWSコンソールへログインしないので便利です。
話は逸れるのですが、サーバーワークスは、全社員リモートワークをすることにも力を入れており、2022年9月には、RubyKaigi 2022に参加した際の三重のホテルから、サービス開発課の朝ミーティング等に参加したり、この10ヶ月の間に自宅では無く他県で仕事したことも有りました。
サーバーワークスのその取り組みや考え方が非常に有難いです。
https://blog.serverworks.co.jp/2022/09/20/213811
話を戻し、「Lambda: 関数を呼び出し」アクションが2023/02/07にリリースされました。 オンラインセミナーでセミナー参加して下さる方々へ、Lambda関数を呼び出しアクションについてお話するスピーカーに、私が選ばれまして、何を話そうか考えておりました。 単にCAからLambda関数を呼び出しアクションを手動実行するご説明のみだと、皆様には伝わりにくいと考えておりました。
そんな時に、別課の方へLambda関数を呼び出しアクションの使用方法をヒアリング後、ふと思いついたのが、「そういえば、朝、絶対天気予報ググるなー」「仕事が終わりかけで、尚且つ、外出時に絶対天気予報ググるなー」「Lambda関数を呼び出しアクションがリリースされたし、折角やし、自動化してSlackのgeneralチャンネル(※ワークスペースはオカンと僕のみで使用)へ通知させるか!セミナーでの事例紹介に丁度良いだろう!」と思いつき実際にやってみました。
結果、ある程度上手く行ったので、母親には、親孝行風に「お母さんのために天気予報通知してくれるアプリ作ったで。」と言っておきました。
EventBridgeの利用によるLambdaの定期実行も可能ですが、CAを利用することで、日本の祝日対応等のより柔軟なスケジュールの設定や、後処理による実行結果の通知など、より便利にご利用頂くことが可能です。
https://blog.serverworks.co.jp/ca-invoke-lambda-function
前置きが長くなってしまいましたが、Cloud Automator/Lambda/Slackを連携するための調査した流れを記載し、それぞれ簡単に紹介致します。 ※あまりにも長文になってしまうため、今回は、天気予報通知では無くメッセージ通知手順を記載します。
- Lambda関数作成実行(Node.js 12.x)
- Slackアプリ作成
- Lambda + Slack通知
- CA:Lambda関数を呼び出しアクションのジョブ作成
- CA + Lambda + Slack通知
Lambda関数作成実行(Node.js 12.x)
関数の作成から一番左の一から作成を選択、Node.js 12.xを選択後、右下にある【関数を作成】ボタンをクリック
テストイベントで右上にある【テスト】ボタンをクリック - 成功確認
Slackアプリ作成
アプリをインストールするワークスペースにログイン後以下のURLにアクセス https://api.slack.com/apps
【create new app】ボタンをクリック
【From scratch】を選択
名前を入力&ワークスペースを選択し【Create App】をクリック
Incoming Webhookをクリック
ワークスペースと連携(通知したいチャンネルを選択し【許可する】ボタンをクリック)
curlをコマンド実行(※Slackへメッセージが通知されるかテスト)
Lambda + Slack通知
Slackの設定の続き
Slackアプリ作成画面に戻り【chat:write】を追加
上部のリンクから再度インストールする
Slackを開きチャンネル名をクリックしチャンネルIDを取得(実装コードに追加)
インテグレーションタブに切り替えてアプリを追加
Bot User OAuth Tokenをコピーする(実装コードに追加)
実装コードをLambda関数のコードへ貼り付け
Lambda:テストボタンをクリック
メッセージ【from lambda】がSlackへ通知されるか確認
実装コード(Node.js 12.x)
※今回は以下のようなコードを実装しました。
// AWS API const HTTPS = require('https'); const QUERYSTRING = require('querystring'); //Slack API const SLACK_HOST = 'slack.com'; const SLACK_PATH = '/api/chat.postMessage'; const SLACK_TOKEN = 'xoxb-XXXXXXXXXXXX'; // 取得したSlackのトークンを設定 const SLACK_CHANNEL = 'XXXXXXXX'; // 通知するSlackのチャンネルIDを設定 /*** 実行 ***/ exports.handler = (event, context, callback) => { let message = "form lambda"; sendSlack(message, context); }; /*** Slack情報 ***/ const sendSlack =(message, context)=> { let formData = { token : SLACK_TOKEN, channel : SLACK_CHANNEL, text : message, }; let options = { hostname: SLACK_HOST, path : SLACK_PATH, method : 'POST', headers : { 'Content-Type': 'application/x-www-form-urlencoded' }, }; const req = HTTPS.request(options, (res) => { res.on('data', (d) => { console.log(d + "\n"); }); }); req.write(QUERYSTRING.stringify(formData)); req.end(); };
CA:Lambda関数を呼び出しアクションのジョブ作成
CAのサインインURLにアクセス manager.cloudautomator.com
ジョブ追加画面からタイマートリガーでジョブを作成
CA + Lambda + Slack通知
- 指定時間になると通知されるか確認・完了(スマホのロック画面で確認しました。)
【Lambda関数を呼び出す際はAWSコンソールへログインして実行】【自動でバックアップする際はCAでジョブを作成】という運用をされていたお客様もいらっしゃるかと思いますが、CAのみで完了出来るようになりましたので、是非、CAをご活用下さい。
またサービス開発課では、「●●機能開発して欲しいです。」とお客様からのご要望も随時募集しております。 ご要望御座いましたら、UserVoice等でお気軽にご連絡下さい。
https://feedback.cloudautomator.com/
swx-kariya(執筆記事の一覧)