10
8

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.

猫の画像が次々届くサーバーレスなシステム

Posted at

はじめに

コロナ禍ですっかり疲れ切っている方も多いと思いますが、そんな時こそ一服の清涼剤が必要...ということで、Slackのチャンネルに猫の画像が定期的に届くサーバーレスなシステムを作ってみました。

なお、今回はThe Cat APIから猫の画像を拝借しています。

1. Cat APIのAPIキーの取得

  • The Cat APIのページを開いて、SIGNUP FOR FREEと書かれたボタンを押します。

cat_api_001.png

  • 遷移先のページで、メールアドレスを記入してSIGNUPを押してしばらく待つと、Welcome to The Cat API!Welcome to The Cat API!というタイトルのメールが届きます。
  • App Discriptionについては任意項目らしいので、拙い英語で書いても大丈夫でした(笑)
  • このメールの中にAPIキーが記載されているので、それをメモしておきます。

cat_api_002.png

2. 猫画像配信用のチャンネルの作成

  • 猫の画像がSlackのチャンネルにどんどん投稿されるため、猫画像配信用のチャンネルを作成しておきます。

image.png

3. SlackのWebhook URLの取得

  • 前の工程で作成したSlackのチャンネルに入り、アプリを追加するをクリックします。

image.png

  • 遷移先の画面で検索欄にwebhookと入力して、Incoming Webhookをインストールします。

image.png

  • ブラウザに以下の画面が表示されたら、Slackに追加を押してIncoming Webhookをインストールします。

image.png

  • 遷移先の画面で、前の工程で作成したSlackのチャンネルを選択して、Incoming Webhookインテグレーションの追加を押します。

image.png

  • 次の画面で、**「Incoming Webhook ○○○さんによって ○○○○年○○月○○日に追加されました」**と表示されれば、アプリのインストールは完了です。
  • このページにWebhook URLと書かれている欄があるので、そこに書かれているURLをメモしておきます。
  • また、このページの下部にインテグレーションの設定という設定画面があるため、今回はこの設定画面で以下の設定を変更しました。
  • 名前をカスタマイズ:「The Cat API」に変更。
  • アイコンをカスタマイズする:こちらの記事で作成した猫の画像をアップロード。

4. Lambdaのコードの作成

4-1. Lambda関数の基本情報

  • 以下の内容を関数の基本的な情報に設定しました。
  • 関数名:GetCatImage
  • ランタイム:Ruby2.7
  • アクセス権限(実行ロール):基本的なLambdaアクセス権限で新しいロールを作成

4-2. lambda_function.rbの作成

lambda_function.rb
require 'json'
require 'net/http'
require "bundler/setup"
require 'slack-notifier'

def lambda_handler(event:, context:)
    # Get image url from TheCatAPI.
    res = Net::HTTP.get(URI.parse('https://api.thecatapi.com/v1/images/search?api_key=xxxxxxxxxx'))
    json = JSON.parse(res)
    url = json[0]["url"]

    # Notification to Slack channel using Incoming Webhook.
    notifier = Slack::Notifier.new('https://hooks.slack.com/services/xxxxxxxxxx')
    notifier.ping(url, unfurl_links: true)
end
  • なお、作成したGemfileは以下の通りです。
Gemfile
source 'https://rubygems.org'
gem 'slack-notifier'
  • また、Linux環境でbundle installを実行すると、以下のフォルダ構成となります。
>bundle-installの実行結果@Windows環境
.
│  Gemfile
│  Gemfile.lock
│  lambda_function.rb
└─vendor
    └─bundle

4-3. ZIPファイルのアップロード

  • bundle install --deploymentを実行したフォルダを、丸ごとZIPで圧縮します。
  • 次にLambdaの関数(GetCatImage)の画面に入り、関数コードの[コードエントリ]を.zipファイルをアップロードとして、ZIPファイルをアップロードします。
  • アップロードファイルを選んだあと、画面右上の[保存]を押すとAWS側にアップロードされるようです。
  • ここまで出来上がったら、[テスト]を実行して、Slackに通知が飛ぶかを確認します。

image.png

5. CloudWatchのイベントの作成

  • Lambdaの関数のページの上部で[設定]タブを選び、[Designer]の領域でトリガーを追加を押します。
  • トリガーを追加画面で、以下の内容を記入して[追加]を押します。
  • トリガーの種類:CloudWatch Events/EventBridge
  • ルールタイプ:スケジュール式
  • スケジュール式:rate(1 hour)
  • トリガーの有効化:チェックあり
  • 上記のように、今回は「毎時1回猫の画像(のURL)を取得して、Slackに通知する」という形になります。

image.png

6. 完成形

  • 以下のように、指定されたチャンネルに毎時猫の画像が投稿されます。
  • 疲れた時は、このチャンネルを見てちょっとだけリフレッシュしましょう!

image.png

参考URL

AWS CLI

Lambda

SlackのWebhook

10
8
0

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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?