AWSで実現するモダンアプリケーション入門 #2

AWSで実現するモダンアプリケーション入門 #2

「AWSで実現するモダンアプリケーション入門」を読んだのでその読書ログの続きです。今回は第3章と第4章です。

前回までの記事

AWSで実現するモダンアプリケーション入門 #1

第3章 アプリケーション開発におけるベストプラクティスを適用

この章では、アプリケーションに適用できるよく知られたベストプラクティスとして、The Twelve-Factor AppBeyond the Twelve-Factor App が紹介されていました。

プラクティスの一部を抜粋します。

コードベース

コードベース(Gitのリポジトリのこと)とアプリケーションの関係は1:1であること。複数のアプリケーションから同じコードベースを参照してはいけない。

依存関係

依存関係は暗黙的な存在を認めず、厳密に宣言する。アプリケーションAとアプリケーションBが、同じパッケージの、異なるバージョンに依存している可能性があるため。また、セットアップが簡単になるメリットもある。さらに、システムツールも暗黙的な存在を認めず、専用ライブラリを使う必要がある。

設定

環境ごとに異なる設定値をコードから厳密に切り離す。

  • データベース情報
  • 外部参照するAPI情報(エンドポイント、パラメータなど)
  • 外部参照するバックエンドサービス情報(S3バケット名など)
  • アプリケーション機能情報(ポイント付与率、フィーチャーフラグなど)
  • アプリケーション情報(ログレベルなど)

上記の項目をアプリケーションに定数として定義してしまうと、コードから分離できていない状態になる。改善方法としては環境変数を使う方法がある。さらに改善する場合は、クラウド上のバックエンドサービスに設定を保存する方法がある。AWSでは、AWS Systems Manager Parameter Store や AWS Secrets Manager が該当する。

バックエンドサービス

バックエンドサービスをアタッチされたリソースとして扱う。具体的には、開発環境と本番環境で、アプリケーションのコードを変更せずにデータベースの接続先を切り替えることができれば、バックエンドサービスのプラクティスに従っていると言える。

  • データベース
  • キュー
  • 電子メールサービス
  • キャッシュ(Redis, Memcachedなど)
  • API

APIファースト

全てのアプリケーションをAPIとして、バックエンドサービスになることを目指す。サービス間の結合度を下げられる。また、インターフェース仕様が明確になることで、関係者との議論が容易になる。

第4章 データの取得による状況の可視化

この章では、アプリケーションの状況やビジネスの状況を可視化するために、どのようなデータを収集するのかについて紹介されていました。

ビジネスデータ

経営陣が将来の計画のために利用したり、マーケティングチームがキャンペーンの効果測定のために利用するデータ。ログへ出力するようにアプリケーションを実装し、ストリーミングで集約して保存するなど、実装方法やアーキテクチャ構成をあらかじめ検討しておく必要がある。Amazon QuickSight などのツールがある。

運用データ

運用状況を可視化するためのデータ。具体例は下記。

  • 運用担当者の呼び出し回数
  • 設定変更など運用作業の依頼として起票されるチケット数
  • チケットが完了するまでの経過時間
  • 1日あたりのデプロイ数
  • サービスの可用性

これらの観点については、チームとして責任を持つ必要があり、その手段として、DevOpsモデルを導入することが効果的。

システムデータ

サービスが実行されているインフラストラクチャやアプリケーションの状況を可視化するために必要なデータ。

  • リクエスト数(Rate)
  • リクエストのエラー数(Errors)
  • リクエストの処理時間(Duration)

これらのメトリクスは、頭文字をとってREDメソッド と呼ばれることがある。

また、リクエスト駆動ではないサービス、例えばキューとそれを処理するジョブで構成されるようなサービスでは、以下のようなデータを取得する必要がある。

  • タスクの処理件数(Utilization)
  • キューイングされているタスクの件数(Saturation)
  • エラー件数(Errors)

こちらも、頭文字をとって USEメソッド と呼ばれることがある。

それ以外に、リソース状況を可視化するために、CPU利用率、メモリ利用率、ネットワークI/O なども重要。

AWSでは、 Amazon CloudFront や Amazon CloudWatch メトリクスからデータを取得できる。

オブザーバビリティ(可観測性)

オブザーバビリティ(可観測性)とは「システムの内部で何が起きているか」を説明できるシステムの能力のこと。メトリクス、ログ、トレースデータの「3本の柱」を押さえることで、オブザーバビリティを獲得できる。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です