とりあえずAWS Lambdaを動かしてみたかった。
試しなのでブラウザ上で完結するようにしたが、割と時間がかかった。
関数の作成
(AWSアカウントを作成してAWSコンソールにサインインするところまでは省略)
サービス一覧から「Lambda」 → 「関数」 → 「関数の作成」を選択。
関数の作成画面では「一から作成」を選択。関数名は任意。
ランタイムはRuby2.5 (2019/11/26現在) を選択。
ロールはデフォルトのまま。
「関数を作成」ボタンを選択すれば関数が作成され、編集画面へ遷移する。
関数の実行
とりあえずサンプルを動かしてみる。
右上の「テスト」を選択し、「イベント名」を適当に入力して作成する。
作成したイベント名が表示されていることを確認したら、「テスト」を押せば関数が動く。
Slackのincoming-webhookの設定
Slackにポストするためにwebhookを設定する。
(このあたりは初回設定時とそれ以外で表示が異なるかもしれない)
通知したいチャンネルの設定アイコン → 「アプリを追加する」を選択して、「incoming-webhook」で検索。
ブラウザ側でAppディレクトリへ遷移するはずなので、「Slackに追加」を選択。
webhookを追加するチャンネルを選択して、「Incoming Webhookインテグレーションの追加」を選択。
webhook URLが作成されるので、これをコピーしておく。
(このときに簡単な使い方なども表示されるので読むといいかも)
LambdaからSlackへポストする
作成したLambda関数からポストしてみる。
試すだけなので、net/http
を利用。
use_ssl = true
を設定しないとBad Requestとなる。
require 'json'
require "net/http"
URL = "https://hooks.slack.com/services/*******"
def lambda_handler(event:, context:)
uri = URI.parse(URL)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.post(uri.path, { text: "hello from lambda." }.to_json)
end
修正後、「保存」 → 「テスト」 と選択するとリクエストが実行される。
正常に処理された場合、Slackに通知が飛ぶ。
その他
Lambda自体は無料枠に収まったが、ログを保存するS3の料金が僅かながら発生していた。
回避方法などあるかもしれないが、気にならない程度だったので今回は無視。
次は何らかのトリガーで実行する部分と変数を渡す部分を調べる。