気象・地震情報などをAWSからWebhookで配信している話

これは、[防災アプリ開発 Advent Calendar 2024](https://adventar.org/calendars/9939)の23日目の記事です。
前回は22日目、のたさんの[ 気象庁 XML × GIS データで防災情報を地図表示する iOS アプリを作ってみた](https://qiita.com/oruponu/items/1119481d7e629c853885)でした。


初めましての方は初めまして。お久しぶりの方はお久しぶりです。

現在、高校3年生で主にPythonを書いている孤独のコーヒーと申します。
Discordに気象情報などなどをWebhookで配信しているBOT（DPI-Bot)の開発・運営をしています。
ちなみに現在の導入数は1230鯖です
（詳しくは[こちら](https://qiita.com/jr226/items/5946b79c75cb14b39e19)（露骨な宣伝）

好きなラーメンは塩です！！！みんな塩食べよ！。
（バイトはラーメン屋ですw)


一昨年？から参加していますが書くネタがほぼないです
（なんでみんな毎年みんなかけるんですかね、、、）
そんなことは置いといて今年は一応受験生のため2024年の後半はほぼ開発に手をつけれず、、、気づいたら年末です。

# １月で起きた地震
2024年1月1日、当時自分はバイト中で、10時-20時という正月から働いていました。
しかし、途中で出勤したバイトから「大津波警報とかやばいね」耳を疑う言葉が。

そして脳裏にBOTの配信絶対止まってる。
（この当時まだ400鯖程度の導入で配信も最大50個程度とまだ弱小BOTだったため自宅のPCから配信をしていました。）
一方BOTくんは予想通り、レート制限のかかり、配信が停止している状態でした。
さらに、導入数が大幅に増え、一日で100鯖を超える新規導入だったためさらに負荷がかかっていました。

その後休憩に入れたためご飯もろくに食べれずにとりあえず弟に電話して「PC再起動してぇ〜」
と頼み、その間はは情報収集し、一時的に配信が復活したもののたいきれず、、ほぼ1月1日は配信できず終了しました。
## AWSから配信させよう
そして翌日の2日は夕方から出勤のため、時間に余裕があったため、急遽AWSからの配信に切り替えることにしました。幸い2~3月に切り替える予定だったため、アカウントなどなどは存在したもののほぼ０スタート＆知識ゼロからだったため、当時かなりギリギリで行った覚えがあり、１月１日〜５日は毎日ほぼバイトか開発に明け暮れ、睡眠時間３時間という生活を行っていました（今考えるとなんでできたんだろレベルですw)。そして３日にAWSからの配信を開始しました。また配信自体３日から開始したものの急遽の開発レベルのため、遅延、二重送信などなどの不具合があったため、ある程度修正が終了した、１３日に公へ配信開始を告知しました。


# 初期段階の配信系統
当時、AWSの知識もゼロに等しい状態で、とりあえず配信できればいい！！みたいな感じで開発をしていたため、ネットで転がっていた構築方法で行っていました。一応図です（時間がないので大雑把です、、すいません)

![初期AWS.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/e5f307f5-6504-53d3-ac20-cf08de7973c0.png)


このように簡単になっており、一部省略している部分がありますが、APIGWから処理プログラム（Lambda)にembedとwebhookURLを渡し、各タイトルに応じたLambdaに分散させ配信するという形になっており、実装当時は地震情報と津波情報のみAWSから配信させ各５台づつ計１０台で行っていました。
しかし５台で分散で送信しているものの、地震情報や津波情報などは数秒でも早く配信したいものの、当時の記録では30秒最大１分ほどの遅延でした。
これじゃあぁ迅速性にかけるよなーーってことで現在までにかなり増やしています。


## 現状の配信系統
やっと本題？みたいなところはありますが、、ｗ
下記の図が現在の配信系統です。
![aws_new.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/47eb369c-aa8c-b2d7-622c-da83e750b1cc.png)
（ちょーぜつ見ずらいですが、緑がメインのデータの伝送路であり、青がバックアップ系統、赤色がプログラムや配信の状態の伝送路を示しています。）

また配信1と配信10の伝送路に関しては視覚化を考慮し一部省略していますが、2つを合体した形が正規の伝送路となります）
（何回もいいますが"一応"趣味です！！そして、運営自体は無償です。
（本当に趣味の範囲なのかは置いといて、、ｗ

東京、大阪の二系統があり、東京は基本的に地震・津波関連。大阪は気象・火山・その他関連と分かれています。
また常時配信監視を行っており、配信がされてない場合はもう一つのバックアップから配信するようなバックアップも存在しています。



配信部門により１０台のLambdaが存在しており、例えば地震情報や気象警報・注意報用、気象情報などが個々存在しており、図は省略しているものの、その他諸々を含めると東京・大阪を合わせて１５ぐらいの配信枠があり、計150台以上の配信体制で配信を行っています。
ここまでやってるんだから遅延どうなん？


## 配信時間
AWSを使用し始めの頃はまだ能力、知識的にも、そして時間がとてもではないですがないのは、前半部分で書きましたが実際遅延はどうなったか。
（データがまったく残っておらず、一応平均ですが、当初とズレている場合があります）
|                        |地震情報       | 津波情報 |
|:-----------------------|:-------------|:--------------|
|取得元から自宅鯖まで      |300ms~800ms            　　   | 300ms~800ms   |
| 処理（embed化など)      |100ms~500ms       　　　| 300ms~700ms|
|自宅鯖→AWS               |50ms~100ms 　　　       | 70ms~100ms|
|AWS→Discord              |10000ms(10s)~30000(30s)|20000ms(20s)~60000ms(60s)|

このようになっており、災害情報を伝えるBOTとしてはかなり致命的な値を出しています。
やはり、津波情報をなってしまうと情報量が多くなり送信データ自体が大きくなり送信に時間がかかってしまうのがネックでした、そして現在、改良に改良に重ねた結果です！

|                        |地震情報            | 津波情報 |気象情報|火山情報|
|:-----------------------|:----------------------|:--------------|:-----------|:---------------|
|取得元から自宅鯖まで　　   |300~500ms            |300~500ms   |300~500ms|300~500ms|
|処理                    |80~300ms             |80~400ms|80~500ms|80~500ms
|自宅鯖→AWS              |50~70ms             |50~80ms|50~80ms|50~80ms|
|AWS→Discord             |1s~15s|1s~15s|1s~10s|1s~10s|

このようになっており、受信から処理まではほぼ変化がないものの送信遅延に関してはほぼ１０秒ほどに抑えられています。
（課金最強！！！((())

しかし災害を伝えるBOTとしては、まだまだ遅延が大きいため、現在も改良に取り組んでいます。

なお、当の本人はこのBOTで少しでも減災、防災に繋がってほしい。そして少しでも被害が少なくればいいというスタンスで開発、運営を行っているため。
親からの援助もないため、自分のバイトからすべて出しているため運営は火の車です。
（"一応"趣味で月数万円吹っ飛んでますｗ

# 最後に
気づいたら数日後に迫っていたため、授業中などでほぼ書いたため、誤字脱字があると思います。ごめんなさい
（帰宅してからと思いましたが、、社畜ならぬバ畜のためなかった）
（図完成、、公開前日23：48です
そしてここまで読んでくれてありがとうございます！！！