AWS Lambdaで猫の画像を1時間に1回 Slackに投稿する 🐾
AWS Lambdaで猫の画像を1時間に1回 Slackに投稿する 🐾
今まで働いてきた会社には、どの会社にも当たり前のように猫に関連するチャンネルがありました。
今回は、猫の画像で時報をお知らせするAWS Lambdaの関数を作ってみたいと思います。
猫の画像を準備する 🐈
画像を自分で集めたり、それをストレージに置いてインデックスするのは大変です。
今回は、Cat as a ServiceであるThe Cat APIを利用します。
The Cat API - Cats as a Service
余談 🐶
犬派の人も安心してください、Dog as a ServiceであるThe Dog APIもちゃんとあります。
The Dog API - Dogs as a Service
Pricing 💰
気になるお値段ですが、今回はFreeプランで十分です。
Paidプランだと、追加機能が利用可能です。
- Curated Facts / Jokes / Quotes
- Analytics
- Higher resolution Pictures
- Premium Images
- Video
- Realtime web hooks
※ 2021年3月現在、まだPaidプランは利用できませんが順番待ちが可能です。
Thanks for showing interest in the premium version of the Cat API.
We're running a few weeks behind on launching the new subscription service.
The Cat APIのサインアップとテスト 📮
今回は、Freeプランでサインアップしてみましょう。
SIGNUP FOR FREE
をクリックし、メールアドレスを入力します。
サインアップが完了すると、メールでAPIキーが届きます。
また、遷移先のページでサンプルコードを確認することもできます。
メールで届いたAPIキーと、サンプルコードを使ってテストしてみてください。
Pythonコードを準備する ✏️
雑にベタ書きします。
AWS Lambdaで利用する為、requests
ではなく urllib
を利用します。
※ The Dog APIを利用する場合は、URLを差し替えて下さい
Slackに投稿する、Incoming WebhookのURLは作成しておきましょう。
# -*- coding: utf-8 -*-
import urllib.request
import json
CAT_API_URL = "https://api.thecatapi.com/v1/images/search"
CAT_API_KEY = "{API_KEY}"
SLACK_URL = "{SLACK_WEBHOOK_URL}"
def get_cat():
headers = {'content-type': 'application/json', 'X-API-KEY': CAT_API_KEY}
req = urllib.request.Request('{}?{}'.format(CAT_API_URL, urllib.parse.urlencode(headers)))
with urllib.request.urlopen(req) as res:
body = res.read().decode()
response = json.loads(body)
for i in response:
return i["url"]
def lambda_handler(event, context):
cat = get_cat()
payload = {
"text": cat
}
data = json.dumps(payload)
headers = {
'Content-Type': 'application/json',
}
req = urllib.request.Request(SLACK_URL, data.encode(), headers)
with urllib.request.urlopen(req) as res:
body = res.read()
AWS Lambdaで動かす ⚙️
Lambda Functionを作成 ✨
AWS Management Consoleにアクセスし、サービス Lambda
を選択します。
新しい関数
を作成します。
- 一から作成 を選択する
- 関数名は適当に入力
- ランタイムは
Python 3.8
を選択する - 必要に応じて、IAMロールを選択・作成する
コードをデプロイする 📝
画面中央部にある、コード / コードソースにPythonコードをペーストします。
ペーストしたら、 Deploy
をクリックしてデプロイします。
コードをテストする 👩💻
Deploy
ボタンの隣りにある Test
を選択し
空のテストを作成し、実行します。
(今回のコードには、テストイベントを渡す必要はありません)
1時間に1回実行する 🕒
トリガーを作成します。
トリガーの作成から、 EventBridge (CloudWatch Events)
を検索して選択しましょう。
Amazon Event Bridgeで、cron式のトリガーを作成する
cron(00 1-11 ? * MON-FRI *)
Lambdaの実行環境側はGMTの為、9時間ずらします。
👆の例だと、日本の午前10時〜20時に投稿します。
猫が時報をお知らせします 🐾
指定したトリガーで、猫の画像が投稿されます。
Author And Source
この問題について(AWS Lambdaで猫の画像を1時間に1回 Slackに投稿する 🐾), 我々は、より多くの情報をここで見つけました https://qiita.com/nakashun/items/5d807a9f058ca32e9b17著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .