🕵️

2022 年 App Runner のアップデートを振り返る~トレーシング~

2022/12/08に公開

はじめに

これはAWS App Runner Advent Calendar 2022 8 日目の記事です。このほかにも App Runner の記事が目白押しなので楽しみにしていてください。

App Runner OpenTelemetry Tracing

この記事では 2022 年の App Runner に関連したアップデートのうち OpenTelemetry を用いたトレーシングについて紹介します。

AWS App Runner とは

AWS 上でコンテナ化されたアプリケーションを簡単に構築・運営できるフルマネージドサービスです。以下のスライドにあるようにオーケストレーションワークフローや CI/CD の整備を App Runner に任せて、利用者はアプリケーション開発に集中することができます。
https://speakerdeck.com/mats16/introduction-to-aws-app-runner?slide=12

ソースコードかコンテナイメージを用意するだけでアプリケーションをクラウドにデプロイできるので、ベストプラクティスに基づいた出来合いのインフラでいいからクラウド上にアプリケーションを展開したい場合におすすめのサービスです。

トレーシング

トレースは OpenTelemetry のシグナルの一つで公式ドキュメントには "Traces give us the big picture of what happens when a request is made by user or an application. (トレースによってユーザーやアプリケーションから送られてきたリクエストが来た時に何が起きるかの全体像がわかる)" と書かれています。全体像というのはこちらのページの図がわかりやすいです。

––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–––––––|–> time

 [Span A···················································]
   [Span B··········································]
      [Span D······································]
    [Span C····················································]
         [Span E·······]        [Span F··]

分散システムにおいてはクライアントからサーバーにリクエストを送ってレスポンスを返すまでの間に、別のサーバーに同期的な API コールを行っていたりキューにメッセージを入れて後段で非同期な処理をしていたりすることがあります。そうした場合レスポンスタイムだけを見ているとどこがボトルネックになるかがわかりません。一連のリクエストに一意な ID を割り振ることで特定の HTTP リクエストがある一連の流れの中のレイテンシボトルネックになっていることがわかったりします。この一連の流れの情報がトレースです。

OpenTelemetry

以前自分が書いた他の記事を参照してください。ざっくりいうとベンダー中立の API 仕様や言語ごとの SDK を提供する CNCF のプロジェクトです。今回の App Runner のアップデートはこの OpenTelemetry を使って AWS X-Ray にトレースを送れるようになったよというものです。

始め方(App Runner の設定)

App Runner でやる設定は簡単でコンソールだと上の画面でトレーシングを有効にするのと、App Runner にアタッチする IAM ロールで X-Ray への書き込みを許可するだけです。ドキュメントはこちらです。

始め方(計装)

トレースを取れるようにするにはアプリケーション側でも準備が必要です。HTTP クライアントや AWS SDK のクライアントに OpenTelemetry を使うように設定します。そしてこの設定は言語によっては自動計装といってアプリケーションコードを書き換えずにコマンドで計装する(Python などいくつかの言語で可能です。ドキュメントだとここら辺)のと、手動でアプリケーションコードを書き換える(Go だとこちらのドキュメント)方法があります。

どういうふうにトレースを見ることができるのか

アプリケーションを計装し、App Runner の設定も適切に行えば Service Map の画面で以下のようにリクエストの流れが可視化されます。

上の例だと App Runner から DynamoDB にリクエストを送っているだけなのであまり嬉しさを感じないかもしれませんが、他にも複数のコンポーネントが出てきた場合トレースを取れていればボトルネックやエラー率の調査に役立つと思います。

おわりに

App Runner のようなマネージドサービスだと足回りをあまり意識しなくていい分 Observability が大事になってくると思います。今回のアップデートでトレースを X-Ray に送れるようになったのでぜひ試してみてください。

Discussion