Category: AWS X-Ray*


AWS X-Ray で AWS Lambda をサポート

本日、AWS X-RayAWS Lambda サポート の一般提供開始を発表しました。Jeff が GA で投稿したブログですでにご存知の方もいるかと思いますが (「Jeff の GA POST (Jeff’s GA POST)」)、X-Ray は分散アプリケーションの実行やパフォーマンス動作を分析する AWS サービスです。

複数の独立したコンポーネントを異なるサービスで実行するマイクロサービスベースのアプリケーションでは、従来の問題をデバッグする方法がうまく機能しません。アプリケーションでレイテンシーを分けることで、X-Ray はエラーや処理の低下、タイムアウトを迅速に診断することができます。それでは、シンプルな Lambda ベースのアプリケーションを構築し分析する方法をお見せしながら、独自のアプリケーションで X-Ray を使用する方法をご説明します。

今すぐ開始したい場合は、関数の設定ページで追跡を有効にすれば既存の Lambda 関数で簡単に X-Ray を使い始めることができます。

または AWS Command Line Interface (CLI) で関数の tracing-config を更新してください (必ず --function-name も忘れずに):

$ aws lambda update-function-configuration --tracing-config '{"Mode": "Active"}'

トレースモードをオンにすると、Lambda は関数を追跡しようとします (アップストリームサービスによって追跡されないよう明示的に指示されていない限り)。オフの状態では、アップストリームサービスによって追跡するよう明示的に指示されている場合のみ関数が追跡されます。トレーシングモードをオンにすると追跡の生成が始まり、アプリケーションとその間のコネクション (辺) におけるリソースのビジュアル表現が見られるようになります。

X-Ray デーモンは Lambda 関数のいくつかのリソースを使用することがあります。メモリ制限に近付いている場合、Lambda はメモリ不足エラーを回避するために X-Ray デーモンを終了しようとします。では、複数のサービスを使用する簡単なアプリケーションを構築して新しい統合を試してみましょう。


20 代が持つスマートフォンということで、 pictures 自分のスマホは自撮りの写真でいっぱいです (10000+!)。ということで、この機会に写真をすべて分析してみることにしました。Java 8 ランタイムを使用して、Amazon Simple Storage Service (S3) バケットにアップロードした新しい画像に反応するシンプルな Lambda 関数を作成します。写真には Amazon Rekognition を使用し、検出したラベルを Amazon DynamoDB に保存します。

サービスマップ

まず、X-Ray のボキャブラリーをいくつか確認しておきましょう: サブセグメントセグメントトレースです。 分かりましたか? サービスグラフを生成するために X-Ray が処理するトレースをサブセグメントとセグメントが構成している、ということを覚えておけば X-Ray を理解しやすいと思います

サービスグラフは見やすいビジュアル表現を提供します (様々なリクエストへの応答を別の色で表示)。アプリケーションロジックを実行しているコンピューティングリソースは、実行している作業に関するデータをセグメント形式で送信します。サブセグメントを作成すれば、データに関する注釈を追加したり、コードのタイミングをより細かく設定することができます。アプリケーションを経由するリクエストのパスは、トレースを使用して追跡されます。トレースでは、1 つのリクエストで生成されたセグメントをすべて収集します。つまり、S3 からの Lambda イベントを DynamoDB まで簡単に追跡することができるので、エラーやレイテンシーがどこで発生しているか把握することができます。

では、S3 バケットを作成してみましょう。このバケットの名称は selfies-bucketにします。DynamoDB テーブルは selfies-table、あとは Lambda 関数です。ObjectCreated で S3 バケットの Lambda 関数にトリガーを追加します。Lambda 関数コードは実にシンプルです。こちらでご覧ください。コードの変更なしに、JAR の aws-xray-sdk と aws-xray-sdk-recorder-aws-sdk-instrumentor パッケージを含むことで Java 関数で X-Ray を有効にすることができます。アップロードした写真をいくつかトリガーして X-Ray のトレースを見てみましょう。

データが取れました!トレースの 1 つをクリックすれば呼び出しの詳細情報を見ることができます。

最初の AWS::Lambda セグメントでは、関数のドウェル時間、実行待機時間、試行された実行数を見ることができます。次の AWS::Lambda::Function セグメントにはいくつかのサブセグメントが見られます。

  • 初期設定のサブセグメントには関数ハンドラが実行する前の時間すべてが含まれます。
  • アウトバウンドサービスコール
  • 任意のカスタムセグメント (簡単に追加可能)

どうやら DyamoDB 側で問題が発生しているようです。エラーアイコンをクリックすれば、より詳しい情報と例外のスタックトレースを見ることができます。書き込みキャパシティーユニットが不足しているので、DynamoDB に調整されたことが分かります。数回のクリックまたは簡単な API コールで追加できます。そうするとサービスマップに表示される緑が増えていきます。

X-Ray SDK は X-Ray へのデータ放出をとても簡単にしますが、トークに X-Ray デーモンを使用する必要はありません。Python を使用している場合は fleece という rackspace からライブラリを確認できます。X-Ray サービスは興味深いものをたくさん備えています。詳細については「未定義 ()」ドキュメントをご覧ください

個人的に @awscloudninja ボットで使用していますが、これはとても優れていると思います。ただし、これは公式のライブラリではなく AWS がサポートしていない点にご留意ください。時間節約、デバッグや操作に対する労力においても便利なので、個人的には今後のプロジェクトすべてで X-Ray を使う予定です。皆さんがどのように構築するのか楽しみにしています。使えそうなトリックやハックを見つけたら、ぜひお知らせください!

– Randall

AWS X-Ray の更新 – Lamba 統合を含む一般提供の開始

AWS X-Ray を最初に紹介したのは AWS re:Invent での「AWS X-Ray – 分散アプリケーションの中を見てみよう (AWS X-Ray – See Inside Your Distributed Application)」というタイトルのブログ投稿でした。AWS X-RayAmazon EC2 インスタンス、Amazon ECS コンテナ、マイクロサービス、AWS データベースサービス、AWS メッセージングサービスをトラバースする実行として、アプリケーションに対して行われたリクエストをトレースできるようにします。これは開発および本番環境用に設計されており、シンプルな 3 層アプリケーションや何千ものマイクロサービスで形成されたアプリケーションを処理することができます。去年公開したブログでも説明しましたが、AWS X-Ray はリクエストのエンドツーエンドのトレースや、代表的なサンプルのトレースセットの記録、サービスのマップ表示、データのトレース、パフォーマンス問題やエラーの分析を行えるようにします。これにより、アプリケーションとその基盤サービスがどのように動作しているか把握することができるため、問題の根本的な原因を識別し対処することができます。詳細については、X-Ray の機能を詳しく説明した過去のブログをご覧ください。AWS X-Ray のプレビューバージョンは re:Invent でリリースし、興味を示した開発者やアーキテクトが使用できるようにご招待しました。本日より、同サービスの一般提供を開始しました。US East (Northern Virginia)US West (Northern California)US East (Ohio)US West (Oregon)Europe (Ireland)Europe (Frankfurt)South America (Brazil)Asia Pacific (Tokyo)Asia Pacific (Seoul)Asia Pacific (Sydney)Asia Pacific (Sydney)Asia Pacific (Mumbai) リージョンで今すぐご利用いただけます。

新しい Lambda 統合 (プレビュー)
本日よりご利用いただけるプレビューバージョンには、先のプレビュー実施時に行ったサービスの微調整と AWS Lambda 統合が含まれています。これにより、Lambda のデベロッパーが AWS X-Ray を使用して関数の実行やパフォーマンスの可視性を得ることが可能になりました。これまでは、Lambda のユーザーがアプリケーションのレイテンシーの詳細やスローダウンの原因を突き止めたい場合、またはタイムアウトをトラブルシュートしたい場合はカスタムロギングや分析に頼る必要がありました。この新しい統合を使用するには、対象となる関数に実行ロールを指定してください。この実行ロールは、関数が X-Ray に書き込むことを許可し、関数をベースにトレースすることを可能にします (コンソールを使用して新しい関数を作成した場合、適切な許可が自動的に指定されます)。次に X-Ray サービスマップを使用して Lambda 関数、EC2 インスタンス、ECS コンテナなどでどのようにリクエストが動作しているか確認します。興味のあるサービスやリソースを識別、拡大、タイミング情報を調査し問題を解決します。Lambda 関数への各呼び出しは 2 つ以上のノードを X-Ray マップで生成します。Lambda サービス – このノードは Lambda で使用した時間を表します。ユーザー関数 – このノードは Lambda 関数の実行時間を表します。ダウンストリームサービスの呼び出し – これらのノードは Lambda 関数による他のサービスへの呼び出しを表します。詳細については「Lambda で X-Ray を使用する (Using X-Ray with Lambda)」をご覧ください。

今すぐ利用可能
X-Ray の使用量に対する料金は 2017 年 5 月 1 日から開始します。料金は記録したトレース数と分析数に基づきます (各トレースはアプリケーションに対して行われたリクエストを表します)。毎月無料で記録できるトレース数は 100,000 件、また 1,000,000 トレースを取得またはスキャンすることができます。それ以上の場合は記録したトレース数 1 万件につき 5 USD、また分析用に取得したトレース数 1 万件につき 0.50 USD が課金されます。詳細は AWS X-Ray 料金表ページをご覧ください。記録済みまたはアクセスしたトレース数を確認するには AWS 請求コンソールをご覧ください (データ収集は 2017 年 3 月 1 日に開始しました)。AWS X-Ray と新しい Lambda 統合をぜひご覧ください。ご感想をお待ちしています!

Jeff;