はじめに
NTTテクノクロスの熊倉です。この記事はNTTテクノクロス Advent Calendar 2024 シリーズ1の12日目の記事となっています。業務では主にAWSを扱っており、AWSサービスの試験やガイドラインの作成など実施しています。AWSは学び始めてまだ1年半くらいなので、温かい目で見ていただければ幸いです。
きっかけ
毎週土曜日趣味でバドミントンをしており、体育館の予約を自分が担当していました。そのため、毎週以下のような作業が発生していました。
-
体育館の空きを確認し、予約
-
LINEで日程調整
※「12/7(土)17-19」と送信し、参加できるなら、参加不可ならといった感じでリアクションしてもらう -
メンバーが揃えば開催、揃わなければキャンセル
この作業を毎週実施するのが面倒だと思い、AWSを使ってどうにか自動化できないかと考えました。
予約する体育館について
-
3か月先の同一日まで予約可能
例:12月12日であれば、3月12日まで予約可能
⇒つまり、3か月先の予約開始のタイミングで予約すれば必ず予約できる -
予約日の1か月の同一日までに現地で支払いが必要(未払いだとキャンセルされる)
⇒予約日1か月前までには開催可否を決定する必要がある -
支払いの際には予約時に取得できる予約番号が必要
実現したいこと
①3か月後の土曜日を自動予約する
②予約番号をLINEからいつでも取得できる
③日程調整のLINEを自動送信する
作成したシステム
①予約処理
- 毎週朝9時にEventBridge Schedulerが予約処理のLambda関数を実行
- EventBridge Scheduler:定期的なタスク実行を管理するサービス
- Lambda:サーバーレスでプログラムを実行できるサービス
- 予約結果をSNSで熊倉の携帯のSMSに通知
- 指定した登録先に通知を送るサービス
- 予約情報をDynamoDBに格納
- DynamoDB:NoSQLデータベースサービス
Dynamoの中身は以下のようになっています。予約した情報(reserve-day, reserve-num, reserve-time)とこのレコードの有効期限(expireAt(TTL))を格納しています。DynamoDB の TTL(Time to Live)機能により、expireAt カラムに格納されたエポック時間(例の場合、1735120800 = 2024年12月25日19時00分00秒)を過ぎるとレコードが自動削除されるように設定しています。
※レコード期限は予約日の日時にしています。
reserve-day | reserve-num | reserve-time | expireAt(TTL) |
---|---|---|---|
2024/12/25 | 1111222 | 17-19 | 1735120800 |
②予約番号取得
- LINE Botに対し、日付(YYYYMMDD)を送信するとMessaging APIに設定したAPI Gatewayが呼び出され、DynamoDBに格納されている予約番号を返すLambda関数が実行される
- API Gateway:LINEとAWSシステムを連携させるための入口となるサービス
③日程調整LINE自動送信
- 毎週EventBridge Schedulerが5週間後の土曜日の予約情報を取得し、その情報から日程調整のLINEを自動送信するLambda関数を実行する
使用したもの
AWS
Lambda関数のコードはpythonで作成し、予約処理のためのウェブスクレイピングにSeleniumを使用しました。Seleniumは現在Lambda関数で対応しているpythonのバージョンだと互換性の関係で使用できません。そのため、Seleniumが使用できるよう作成されたコンテナイメージからLambda関数を作成しました。
Messaging API
Messaging APIを使ってLINE公式アカウントのようなLINE Botを作成できます。Messaging APIはプランが3つあり、無料で使用することもできます。※ただし、月に送信できるメッセージ数が200通までとなっています。
料金
AWS
- API Gateway
月4回ほどリクエストするので0.000000425×4=0.000017 USD/月 - ECR
ストレージ料金がかかるため、0.1 USD/月
Messaging API
- 無料
合計: 0.100017 USD/月 = 約15.14円/月
ほとんどのサービスが永年無料枠で利用できました。
超安い、、AWSすごい
まとめ
今回作成したシステムによって、体育館の予約と日程調整の作業をほとんど自動化することができました。自分の作業は、自動送信されたLINEの投票結果を見て必要ならキャンセルするのみなので、毎週体育館を意識することはほとんどなくなりました。
あとがき
自分の課題を解決するために何かを作ることは非常に楽しいですし、AWSの勉強にもなったので今後も何か日常や業務で課題があれば、AWSを使って解決していきたいなと思いました。
明日のNTTテクノクロス Advent Calendar 2024は、 @krbr-775 さんの「VSCodeの拡張機能を自作した話」についての記事です。お楽しみに!