3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RubyとAWS LambdaでサクッとSlackへポストしてみる

Last updated at Posted at 2019-11-26

とりあえずAWS Lambdaを動かしてみたかった。
試しなのでブラウザ上で完結するようにしたが、割と時間がかかった。

関数の作成

(AWSアカウントを作成してAWSコンソールにサインインするところまでは省略)

サービス一覧から「Lambda」 → 「関数」 → 「関数の作成」を選択。

関数の作成画面では「一から作成」を選択。関数名は任意。
ランタイムはRuby2.5 (2019/11/26現在) を選択。
ロールはデフォルトのまま。

image.png

「関数を作成」ボタンを選択すれば関数が作成され、編集画面へ遷移する。

image.png

関数の実行

とりあえずサンプルを動かしてみる。
右上の「テスト」を選択し、「イベント名」を適当に入力して作成する。

image.png

作成したイベント名が表示されていることを確認したら、「テスト」を押せば関数が動く。

image.png

Slackのincoming-webhookの設定

Slackにポストするためにwebhookを設定する。
(このあたりは初回設定時とそれ以外で表示が異なるかもしれない)

通知したいチャンネルの設定アイコン → 「アプリを追加する」を選択して、「incoming-webhook」で検索。
ブラウザ側でAppディレクトリへ遷移するはずなので、「Slackに追加」を選択。

image.png

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に通知が飛ぶ。

image.png

その他

Lambda自体は無料枠に収まったが、ログを保存するS3の料金が僅かながら発生していた。
回避方法などあるかもしれないが、気にならない程度だったので今回は無視。

次は何らかのトリガーで実行する部分と変数を渡す部分を調べる。

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?