AWS X-Rayのチュートリアル アプリをさわってみた

AWS DVA

AWS Certified Developer – Associate(DVA) を勉強中です。

AWS X-Rayは使ったことがなく全くわからないので、まずは公式のチュートリアルでなんとなーくどんなサービスなんだろうという雰囲気を感じたいと思います。
公式サイトを参考に進めました。

チュートリアルアプリを展開

マネジメントコンソールの検索窓から「X-Ray」と検索し、表示されたページの「デモアプリをセットアップ」をクリックします。

「検索窓」と「デモアプリをセットアップ」のボタンがどこにあるかを示した、マネジメントコンソールのスクリーンショット画像

「CloudFormation を使用してサンプルアプリケーションを作成」をクリック

「CloudFormation を使用してサンプルアプリケーションを作成」のボタンがどこにあるかを示したスクリーンショットの画像

設定は変更せず「次へ」をクリック

[スタックの作製]ページのスクリーンショット画像

スタック名は好きな名前を入力します。

スタック名を入力する画面のスクリーンショット画像

色々パラメーターを設定できますが、全てデフォルトで下までスクロールし「次へ」をクリック

各種パラメーターを設定するページのスクリーンショット画像

スタックオプションもデフォルトのまま。

スタックオプションを設定するページのスクリーンショット画像

「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」にチェックを付けて、「次へ」をクリック

「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します。」のチェックがあるページのスクリーンショット画像

設定の確認画面が表示されます。一番下までスクロールして「送信」をクリックします。

設定を確認するためのページのスクリーンショット画像
設定確認画面の「送信」ボタンのスクリーンショット画像

チュートリアルアプリの展開が始まります。5分ほどで完了しました。

CloudFormationによりチュートリアルアプリが展開されたことがわかるスクリーンショット画像

クリックだけでできたので簡単でした。

アプリで遊ぶ

CloudFormationの「出力」タブをクリックし、LoadBalancerUrlの値をクリックします

CloudFormationのチュートリアルアプリのスタックページの出力タブをスクリーンショットした画像

アプリの画面が表示されます。
そのまま「Create」をクリックすると、ランダムな名前でユーザーとセッションが作成されるようです。

チュートリアルアプリのトップ画面のスクリーンショット画像

「game name」を入力し、「Rules」を「Tic Tac Toe」 に設定したら、[Create] を選択して、ゲームを作成します。
※Tic Tac Toeは、日本で言う○×ゲームのようです。

チュートリアルアプリのゲーム作成画面のスクリーンショット画像

「Play」をクリックして、ゲームを開始します。

ゲーム開始(Play)ボタンが表示されが画面のスクリーンショット画像

タイルをクリックすると、API にHTTPリクエストが送られ、更に DynamoDB に対してデータの読み書きが行われているようです。

マルバツゲームの画面のスクリーンショット画像

1人で適当に遊んでおきました。

マルバツゲームの結果のスクリーンショット画像

X-Rayを確認する

サンプルアプリケーションによって生成されたトレースマップとトレースを確認します。

X-RayコンソールはCloudWatchと統合されたようで、「CloudWatch」→ Application Signals(APM)の「トレース」をクリックすることで、トレースマップを確認できます。

以下のトレースマップの意味は、クライアントからのリクエストがECSに届いて、ECSはそのリクエストを受けてDynamoDBへのリクエストを行ったということだと思います。

トレースマップは、X-Rayといえばこんな事ができます~って、真っ先に紹介される機能な気がしますね。

AWS X-Rayのトレースマップが表示された画面のスクリーンショット画像

もう少し時間範囲を広げると、SNSのノードが黄色(エラー4xx)になっていることがわかります。

AWS X-Rayのトレースマップでエラーになっていることがわかる画面のスクリーンショット画像

ここからは、X-Rayでどのように、このエラーの原因を掘り下げるのかを見ていきます。

X-Rayでエラーの調査

SNSのノードをクリックすると詳細が表示されるので「トレースを表示」をクリック

AWS X-Rayのノードをクリックして「トレースを表示」ボタンが表示されてページのスクリーンショット画像

トレースをクリック

1件のトレースリストが表示されたページのスクリーンショット画像

「障害」と表示されている横の「View exception」をクリックすると、セグメントの詳細が表示されます。詳細画面の「例外」タブをクリックすると、下部にスタックトレースが表示されています。

このスタックトレースはX-Ray SDKにより取得されたもので、AWS SDK クライアントによってスローされた例外を自動的にキャプチャしたもののようです。

X-Ray SDKAWS SDKは名前が似てますが別物として区別します。

AWS X-Rayのセグメントの詳細画面で「例外」が表示されて画面のページのスクリーンショット画像

このスタックトレースから読み取れるエラーの原因は以下のようです。

この原因は、WebConfig クラスで行われた createSubscription の呼び出しで指定された E メールアドレスが無効であることを意味します。

要はCloud Formationでアプリを展開する時に、SNS通知用のメールアドレスを設定しなかったから発生したエラーのようです。

このようにX-Rayではエラーの調査ができる。という話かな。

アプリを修正する

CloudFormationのページでxray-sampleのスタックを開きます。

「スタックを更新」→「直接更新を実行」をクリックします。

CloudFormationのチュートリアルアプリのスタックのスタックを更新を押して「直接更新を実行」のメニューが表示されたページのスクリーンショット画像

Emailの項目を探して自分のメールアドレスを入力します。

Emailの項目が表示されたページのスクリーンショット画像

ページの下部にスクロールし、「次へ」

「CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します」 チェックボックスをONして、「次へ」

「CloudFormation によってカスタム名がついた IAM リソースが作成される場合があることを承認します」 チェックボックスがチェックされた画面のスクリーンショット画像

「送信」をクリックすると、アプリの更新が始まります。5分ほどで完了します。

「送信」ボタンが表示された画面ののスクリーンショット画像

更新が完了すると、設定したメールアドレスにSNSのSubscriptionの確認メールが来るのでリンクをクリックしてSubscriptionしておきます。

Amazon SNSのトピックをサブスクライブ確認画面スクリーンショット画像

アプリで遊ぶ

今度はゲーム名をxray-tutorial2として遊びました。

チュートリアルアプリの「Plya」ボタンが表示された画面のスクリーンショット画像

勝ちました。

マルバツゲームが◯の勝利で終わった画面のスクリーンショット画像

今度はメールが届いていました。

勝者に対して送られたメールのスクリーンショット画像

X-Rayを確認する

トレースを確認すると、POSTとGETのリクエストが来ており、全て成功していることがわかりました。応答時間なども一覧で見れて、極端に遅延が発生していないこともわかりますね。

AWS X-Rayのトレースリストのスクリーンショット画像

トレースをクリックして開いてみました。

ズラッとタイムラインが出てきたのですが、以下の理解です。

1番行目:処理の概要。ECSで受け取ったPOSTリクエストを84ミリ秒かけて処理した
2行目以降:処理の内訳。ECSで受け取ったリクエストを返すために、どんな処理を内部でしたか。キャプチャの例でいうと、DynamoDBからItemをGetしたりUpdateしたりSNSで通知を送ったりした。

セグメントのタイムラインを示した画面のスクリーンショット画像

さらに、セグメントをクリックすると、詳細が確認できます。
リクエストの開始・終了時間、リクエストURL、メソッド、セグメントIDが書いてありました。

AWS  X-Rayのセグメントをクリックして詳細を表示した画面のスクリーンショット画像

チュートリアルアプリを削除

展開したチュートリアルアプリを削除します。

CloudFormationページに行き、チュートリアルアプリのタスクのラジオボタンを選択し、「削除」をクリックします。

CloudFormationでチュートリアルアプリを選択して「削除」ボタンを示している画面のスクリーンショット画像

確認画面が表示されますが、そのまま「削除」

スタック削除の確認画面のスクリーンショット画像

削除が開始されます。ステータスは削除が完了するまで「DELETE_IN_PROGRESS」になります。

チュートリアルアプリの削除が開始されてことがわかる画面のスクリーンショット画像

コスト

朝10時くらいにチュートリアルアプリを展開して、夜12時頃に削除しました。
アプリで遊んだのは3,4回で、コストは$0.14程でした。

安価なので、ちょっとした機能の確認も気軽にできて良いですね。

チュートリアルアプリでかかるコストがわかる画面(コストエクスプローラー)の画面のスクリーンショット画像

感想

  • 実際に触ることでAWS X-Rayの雰囲気を掴めた
  • ただし、雰囲気でX-Ray画面を操作している程度
  • よく意味がわかっていないワードが多く、こういう意味かな?と推測で使っている。
    (例:セグメント、トレース、サービスマップ)

今後の展望

  • X-Rayで登場するワードの理解
  • X-Rayの全体構造の理解

コメント