目次
BeeXの榊原です。本記事はBeeX Advent Calendar 2023 の16日目の内容です。
今回はre:Inventで人気で予約が取れず、列に並んでも参加できなかったWorkshopについて記載します。対象は以下の通りです。
Workshopの内容
下の4種類から好きなものを選択し、トラブルシューティングを体験できます。
・DevOps and Serverless Troubleshooting
・Containers Troubleshooting
・Networking and Web Services troubleshooting
・Database troubleshooting
好きな内容を選んだら、各項目ごとにCloudFormationテンプレートが用意されているのでダウンロードします。テンプレートを基にスタックを作成したら、リソース毎にエラーが発生しているのでトラブルシューティングスタートです。今回はNetworking and Web Services troubleshootingを選択しました。エラー解決毎にポイントが入ったり、他チームと競う要素は無いですが、お題を解決するという点では内容はGameDayに近く非常に楽しいです。ヒントと解説もついています。ただし、他のWorkshopでもあるあるですが、様々なリソースが作成されるためAWS利用料には十分ご注意ください。また、作成リージョンはus-east-1が推奨されています。
実際にやってみた(ネタバレ注意)
Networking and Web Services troubleshootingの最初のお題「Issue 1 - Load Balancer timeout」に取り組んでいたときの様子をお届けします。以下ネタバレ注意です!!
発生している事象
スタック作成後、CloudFormationのコンソール画面からURLを選択します。
URL先を開くと成功時はWeb画面が表示されますが、何度が再読み込みをすると、時々「504 Gateway Time-out」となります。この原因を探って解決するのがお題です。
原因調査
Cloudshellからdigを使用するため、下記コマンドを入力します。
sudo yum install -y bind-utils
digコマンドをウェブURLに向けて入力します。今回は「webapp-alb-652117462.us-east-1.elb.amazonaws.com」だったので下記のように入力します。するとANSWER SECTIONの下に接続先のIPアドレスが3つ表示されます。
dig webapp-alb-652117462.us-east-1.elb.amazonaws.com
# 出力結果
; <<>> DiG 9.16.42-RH <<>> webapp-alb-652117462.us-east-1.elb.amazonaws.com
(省略)
;; ANSWER SECTION:
webapp-alb-652117462.us-east-1.elb.amazonaws.com. 60 IN A 54.144.98.243
webapp-alb-652117462.us-east-1.elb.amazonaws.com. 60 IN A 54.225.156.36
webapp-alb-652117462.us-east-1.elb.amazonaws.com. 60 IN A 34.228.211.172
(省略)
続いてそれぞれのIPアドレスにむけてcurlコマンドを打ちます。すると一つだけWebページの情報が取れないIPアドレスが見つかりました。タイムアウトと表示されています。
curl -v 54.144.98.243
# 出力結果
* Trying 54.144.98.243:80...
* connect to 54.144.98.243 port 80 failed: Connection timed out
* Failed to connect to 54.144.98.243 port 80 after 134033 ms: Couldn't connect to server
* Closing connection
curl: (28) Failed to connect to 54.144.98.243 port 80 after 134033 ms: Couldn't connect to server
ALBの先にあるEC2のルートテーブル、セキュリティグループ、NACLを確認しましたが、特に異常は見られませんでした。では、ALBの設定はどうでしょうか?編集画面をみると気になる表記を見つけました。一つのサブネットだけインターネットトラフィックが受信できないと表示されています。
三つのサブネットの内容を見比べてます。すると二つのルートテーブルは「WebApp-Pubric-RTB」となっていますが、一つだけ「WebApp-App-RTB2」と異なるルートテーブルを割り当てられているのを発見しました。
解決
こちらのルートテーブルを「WebApp-Pubric-RTB」に修正したところ、無事事象が解決しました。ルートテーブルの詳細内容を見るとIGWが修正前のルートテーブルにはきさいされていなかったのが原因でした。解決したかどうかの判断ですが、WorkshopのSolutionに答えが書いてありますのでその内容と自分が行った内容を見比べました。
実際にやった感想
冒頭に書きましたが、内容はGameDayやAWS Jamに似ており楽しくて、お題を解決できた時の爽快感もありました。それ以外にも、お題以外にもこのケースだとどの部分にあたりを付けて調査すべきか記載されていますので、かなり実践的なWorkshopではないかと思います。ぜひ公開されているうちに皆さんもお試しください。私もまだNetwork以外にも様々なジャンルがあるため、時間に余裕があるとき改めてガッツリ取り組みます。ここまでお読みいただきありがとうございました。