AWS App Meshについて調べてみた
AWS App Mesh
AWS App Meshについて概要をまとめて講義する場があったので、
簡単にAWS Black Beltを参考にまとめました。
AWS App Meshのリリース日:2019/3/27
1. 目次
-
- 2.1. サービスメッシュがない場合
- 2.2. サービスメッシュがある場合
- 2.3. サービスメッシュが必要となった背景
- 2.4. 解決策
-
- 3.1. 概要
- 3.1.1. 設定方法
- 3.1.2. ネットワークモデルとは
- 3.1.3. Envoyプロキシの生成
- 3.1. 概要
-
- 4.1. AWS App Meshが使えるインフラ
- 4.2. App Meshのセキュリティ面
- 4.3. App Meshの機能面
- 4.4. 利用性
- 4.5. 利用料金
2. サービスメッシュとは
アプリケーションレベルの通信を、アプリケーション自身が制御するのではなくて、インフラストラクチャーで制御できるようにする技術
2.1. サービスメッシュがない場合
2.2. サービスメッシュがある場合
サービスメッシュ基盤 = AWS App Mesh
2.3. サービスメッシュが必要となった背景
- 1つのシステム内の各サービスで、いろんな言語(Java, Go, Ruby)やアーキテクチャ(コンテナ, VM)を使うようになってきた。
- サービス間のネットワークが信頼できない。
- ネットワーク遅延
- 帯域幅が狭くなっているかもしれない。
- セキュアではないかもしれない。
- ネットワーク先のアプリケーションが障害中かもしれない。
すべてをアプリで実装するとなると、、、
- 上記のようなネットワークの信頼性を高めるには、以下が必要。
- 通信エラー時のリトライ処理
- 遅延時のタイムアウト処理
- 暗号化処理
- 通信の可観測性を考えると、以下が必要。
- メトリクスの取得
- 通信の状況が時間でどう変化してきたか
- トレース
- ある時間帯の通信がどのようになっていたか
- ログの収集
- 通信に関する詳細な情報(アクセスログなど)
- メトリクスの取得
通信の可観測性 :
どのサービスに問題があるのかを一目瞭然にするため。どのチームのサービスに問題があったのかってすぐに分かるほうがいいですよね。
2.4. 解決策
-
共通機能チームが、ネットワークの信頼性/通信の可観測性のための共通ライブラリを作成しても良いが、以下の問題が発生するんです。
- VMだと動かない/コンテナだと動かない
- 共通ライブラリを入れると、依存関係が衝突してしまう
- 〜環境だと動かない
- 共通機能チームが、多言語(java, Go, Ruby)を習得する必要がある。
- 言語ごと、チームごとに配布方法を考える必要がある。
-
通信の処理を、別プロセスに切り離す
- Proxy : サービス間の通信をプロキシして、通信制御を行うプロセス
- プロキシには以下の機能が必要。(Envoyを使うとこれらができる。)
- 信頼性
- リトライ
- タイムアウト
- 暗号化処理
- 可観測性
- メトリクスやトレース、ログの出力
- 信頼性
- サービスメッシュの仕組みは以下。
- ピンクのところにEnvoyが使える。
3. AWS App Meshとはどのようなサービスか
3.1. 概要
App Meshは、簡単な設定でEnvoy Proxyを作ってくれるマネージドサービス。
3.1.1. 設定方法
3.1.2. ネットワークモデルとは
3.1.3. Envoyプロキシの生成
4. AWS App Meshの使いどころや具体的な機能
4.1. AWS App Meshが使えるインフラ
- Amazon ECS
- Amazon EC2
- Amazon Fargate
- Kubernetes on EC2
- Amazon EKS
4.2. App Meshのセキュリティ面
4.3. App Meshの機能面
一言で言うと、高機能なL7LBです。
4.4. 利用性
通信の可観測性を担保するために、
- メトリクス
- Amazon CloudWatch
- 異常やアラームが発生したことを把握する。
- トレース
- Amazon X-Ray
- アラームが発生したとき、どのような通信状況だったか把握する。
- ログ
- Amazon CloudWatch Logs
- トレースで特定したコンポーネントの処理を確認する。
CW: Cloud Watch Agent
X-Ray: X-Ray デーモン
4.5. 利用料金
- App Meshの利用による追加料金はない
- Envoy Proxyを稼働するためのリソースに対して料金が発生
- AWS X-Ray, Amazon CloudWatch Logsなど連携先のサービスの料金が発生