このモジュールでは、node.js アプリケーションを相互に連結されたいくつかのサービスに分割し、各サービスのイメージを Amazon ECR リポジトリにプッシュします。 構築を開始する
最終的なアプリケーションアーキテクチャでは、Amazon Elastic Container Service と Application Load Balancer を使用します。
a. クライアント
クライアントはポート 80 を介してトラフィックリクエストを行います。
b. ロードバランサー
Application Load Balancer (ALB) は、外部トラフィックを正しいサービスにルーティングします。ALB はそのクライアントリクエストを検査し、ルーティングルールを使用して、ルールに一致するターゲットグループのインスタンスとポートにリクエストを送ります。
c. ターゲットグループ
各サービスには、そのサービスのために実行されている各コンテナのインスタンスとポートを追跡するターゲットグループがあります。
d. コンテナ化されたサービス
Amazon Elastic Container Service (Amazon ECS) は、各サービスを EC2 クラスター全体のコンテナにデプロイします。各コンテナは単一の機能しか処理しません。
クラッシュの分離
最高のエンジニアリング組織でさえも、本番環境で致命的なクラッシュを引き起こすことがあります。クラッシュに正しく対処するための標準的なベストプラクティスのすべてに従うことに加え、このようなクラッシュの影響を抑えることができるアプローチの 1 つにマイクロサービスの構築があります。良好なマイクロサービスアーキテクチャとは、マイクロサービスの一部がクラッシュする場合、サービスのその部分だけがダウンすることを意味します。残りのサービスは引き続き正常に機能することができます。
セキュリティの分離
モノリシックアプリケーションでは、アプリケーションの 1 つの機能に、例えばリモートでのコードの実行を許可する脆弱性といったセキュリティ侵害がある場合、攻撃者がシステムのその他すべての機能にもアクセスできると想定する必要があります。これは、例えば最終的にユーザーパスワード付きデータベースが侵害されることになるセキュリティ問題がアバターアップロード機能にある場合に危険となり得ます。Amazon ECS を使用した機能のマイクロサービスへの分割は、各サービスに独自の IAM ロールを付与することによって AWS のリソースへのアクセスをセキュア化することを可能にします。マイクロサービスのベストプラクティスに従うと、攻撃者が 1 つのサービスを侵害した場合でも、そのサービスのリソースに対するアクセス権を得るだけで、他のサービスに侵入しないかぎり、他のリソースに平行してアクセスすることはできません。
独立したスケーリング
機能がマイクロサービスに分割されると、各マイクロサービスクラスによって使用されるインフラストラクチャの量とインスタンスの数は、個別に拡大縮小することができます。これは、特定の機能のコストを測定する、最初に最適化する必要がある機能を特定する、およびある特定の機能がそのリソースのニーズを制御できなくなった場合に、他の機能に対してパフォーマンスを信頼できる状態に保つことを容易にします。
開発速度
マイクロサービスは開発におけるリスクを低減するため、チームはより迅速に構築を行えるようになります。モノリスでは、新しい機能の追加がモノリスに含まれるその他すべての機能に影響を与える可能性があります。開発者は、追加するコードの影響を慎重に検討し、それらが何も壊さないことを確実にする必要があります。一方、適切なマイクロサービスアーキテクチャには、新しいサービスに投入される新しい機能のための新しいコードがあります。開発者は、2 つのマイクロサービス間の関連性を明示的に記述しない限り、記述するコードのいずれも、実際に既存コードに影響を与えることができないという確信を持つことができます。