AWSで実現するモダンアプリケーション入門 #2
「AWSで実現するモダンアプリケーション入門」を読んだのでその読書ログの続きです。今回は第3章と第4章です。
前回までの記事
第3章 アプリケーション開発におけるベストプラクティスを適用
この章では、アプリケーションに適用できるよく知られたベストプラクティスとして、The Twelve-Factor App と Beyond 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本の柱」を押さえることで、オブザーバビリティを獲得できる。
以上です。