/ #cdk #python 

【Python】赤ちゃんの本日遊ぶおもちゃを日替わりでSLACK通知させてみた

もくじ

息子が月齢9ヶ月になりました。わーい

さて、昨日お嫁さんから

「息子に遊ばせるおもちゃを日替わりで変えたいんだけど、プログラムで抽選できない?」

という要望をもらったので、

「お任せあれー」

ということで作ってみました❗

始めは、

『おもちゃの名前を書いたリストを作って、それをランダムでSlack通知すればいいかなー?』

とか思っていたのですが、おもちゃの名前が想像以上にカオスでどう名付ければ良いか分からず、

結果的に名前+写真を投げる実装にしましたー

そして家庭用の他に、サンプルをリポジトリに上げたのでなにかの参考になれば幸いです。

さてさて、実装方法はいくらでもあると思いますが、私はAWSにCDKでデプロイするーという方法を取りましたー

図にするとこんな(↓)感じです

presigned_urlを使っているのはー、、、まぁセキュリティ上の理由です、、、はい。やや自意識過剰なセキュリティです。

詳細はリポジトリを御覧くださいですが、セットアップの手順と動作確認だけ書いていこうと思いますー。

では セットアップ手順です👻

Slackにアプリを追加する

まずSlackにアプリを追加します。

https://api.slack.com/apps?new_app=1

上記にアクセスしてー、、、下記をクリックしてー、、、

下記のように適当なアプリ名を入れて、ワークスペースを選択して、create appをクリックしー、、、

下記をクリックしー、、、

下記のようにトグルボタンをクリックしてONにしー、、、

さらに下記をクリックしー、、

下記のようにチャンネルを選択して「許可する」をクリックしー、、、

下記のcopyをクリックして、Webhook URLを取得します

このURLがPOSTで投げるエンドポイントになります。

ここでSlackの作業完了❗

次にAWSへデプロイします

# クローンします
$ git clone git@github.com:sisi100/random_choice_toy.git

app.pySLACK_URLに先程取得してきたWebhook URLを貼り付けます❗

そしてデプロイ

$ cd random_choice_toy
$ cdk deploy
# ↑最初のデプロイに結構時間がかかります(裏でDockerをビルドしているため)。しかもターミナルが動かないので、辛抱強く待ってください(笑)

完了❗

動作確認

こんかいデプロイしたLambdaの名前を取得します

$ aws lambda list-functions | grep RandomChoiceToyLambda 

今回はこんな感じでした。

RandomChoiceToy-RandomChoiceToyLambda447D79D2-IdgLTWxEctMA

そしてLambdaを叩きます

$ LAMBDA_NAME=RandomChoiceToy-RandomChoiceToyLambda447D79D2-IdgLTWxEctMA
$ aws lambda invoke --function-name $LAMBDA_NAME --payload '{}' response.json
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}

そしてSlackをみるとこんな感じに、、、

ちなみになぜか絶対(編集済み)と表示されるのですが、これは謎です。。。

以上ですー。あとは毎日AM6時におもちゃを抽選してSlackへ投げてきますー

ちなみに削除はこちら

$ cdk destroy

今回のリポジトリはこちら

https://github.com/sisi100/random_choice_toy

Author

Sisii

インフラが好きなエンジニアぶってるなにか