Amazon Web Services ブログ

VMware Cloud on AWS で実現するマイクロサービスアーキテクチャとモダンアプリケーション

AWS で Sr. Specialist Solution Architect を務める Sheng Chen による記事です。

VMware Cloud on AWS は、Amazon Web Services (AWS) グローバルインフラストラクチャ上で、 VMware Software-Defined Data Center (SDDC) を展開し、 vSphere ワークロードを実行するための柔軟でスケーラブルなソリューションを提供します。

200 以上の AWS ネイティブ サービスとの統合アクセスにより、VMware Cloud on AWS は、お客様がビジネスの中断を最小限に抑えつつ、アプリケーションのモダナイゼーションジャーニーを加速するのに役立ちます。

具体的には、VMware Cloud on AWS と AWS サービス統合するための独自の機能を利用することで、お客様はアプリケーションの変革とマイクロサービス アーキテクチャへの移行を開始することができます。

マイクロサービスアーキテクチャがモダンアプリケーション開発に与える利点は以下です。

  • 大規模なプロジェクトが小規模なサービスに分割されるため、開発の俊敏性が向上し、迅速かつ頻繁な開発サイクルを実現します。
  • マイクロサービスごとにテクノロジーを柔軟に選択できるため、ベンダーやテクノロジーのロックインが解消されます。
  • サービスが独立性を持つことで、障害時の影響が隔離されるようになり、アプリケーションの障害耐性が向上します。
  • マイクロサービスにより、各サービスが独立してスケーリングできるようになり、リソース効率の向上とコストの最適化を実現できます。
  • マイクロサービスごとに継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインを用意することにより、新しいアイデアを簡単に試して、新機能の市場投入までの時間を短縮できます。

本稿では、お客様がコンテナ ワークロードを管理しマイクロサービスアプリケーションをデプロイするために、VMware Cloud on AWS を Amazon Elastic Kubernetes Service (Amazon EKS) と統合するためのアーキテクチャ上の考慮点とベストプラクティスについて説明します。
また、AWS DevOps ツール およびその他のクラウドネイティブサービスを活用して、マイクロサービス指向のソフトウェア開発ライフサイクル (SDLC) プロセスを加速し、アプリケーションのデプロイをさらに最適化するためのユースケースについても説明します。

Amazon EKS と VMware Cloud on AWS の統合

Kubernetes は、マイクロサービスのデプロイと管理を自動化するためのオープンソースのコンテナーオーケストレーションプラットフォームです。 Amazon EKS は、お客様が独自に Kubernetes コントロールプレーンとノードをインストールして運用する複雑さ無しに、AWS で Kubernetes クラスターを実行できるマネージド サービスです。
Amazon EKS はスケーラブルで信頼性の高いクラウドサービスであり、Cloud Native Computing Foundation (CNCF) によって認定されているように、アップストリームKubernetes に 100% 準拠しています。
VMware Cloud on AWS は、仮想プライベートクラウド (VPC) に接続された高帯域幅で低レイテンシの Elastic Network Interface (ENI) を介してネイティブの AWS サービスへのアクセスを提供します。お客様は、 VMware Cloud on AWS 環境を構築後、 EKS を SDDC クラスターと簡単に統合し、次の手順に従ってマイクロサービスのデプロイメントを開始できます。

  1. VMware HCX のようなツールを活用することで、ダウンタイムを最小またはゼロで、オンプレミスの vSphere 環境から VMware Cloud on AWS への既存のデータベースワークロードを含むアプリケーションをリフトアンドシフトで移行します。
  2. 接続された VPC 内の環境 (開発/テスト/本番) に基づき、1 つ以上のフルマネージド EKS クラスターをデプロイします。
  3. データベース移行の複雑さ、遅延を回避するために、既存のデータベース層は VMware Cloud on AWS で実行させます。その間に、レガシーシステムを開発/テスト用 EKS クラスターにリファクタリングしてコンテナ化します。
  4. 開発チームは、ENI を介して VMware Cloud on AWS 上の既存のデータベースに接続している間に、EKS を活用してアプリケーションをコンテナ ワークロードのテストとデプロイを管理および自動化するための再設計、および変更プロセスを開始できます (図 1 を参照)。

Amazon EKS と VMware Cloud on AWS の統合図1 – Amazon EKS と VMware Cloud on AWS の統合

EKS Pods と VMware Cloud on AWS 上で稼働する仮想マシンとの接続

既存のデータベース仮想マシン (VM) を VMware Cloud on AWS にリフトアンドシフトで移行した後、お客様は、vSphere クローン機能を利用して、本番データベースのワークロードを開発/テスト環境にレプリケートすることができます。
次に、Amazon EKS クラスター (VPC 内に接続された) にデプロイされたマイクロサービスは、高帯域幅で低レイテンシーの ENI を介して、SDDC 上で実行されているデータベースワークロードに簡単に接続できます。 具体的には、標準の Kubernetes 環境変数を利用して、VMware データベースのワークロードプロパティ (IP アドレスなど) を EKS クラスターで実行されている Kubernetes Pods に送信します (図 2 を参照)。
さらに、コンピューティングゲートウェイに組み込まれた NSX ファイアウォール機能を利用して、データベース仮想マシンへのアクセスを保護および制限することもできます。

EKS Pods と VMware Cloud on AWS 上で稼働するデータベース仮想マシンとの接続図2 – EKS Pods と VMware Cloud on AWS 上で稼働するデータベース仮想マシンとの接続

AWS App2Container (A2C)

既存の Java および .NET で実行されているエンタープライズアプリケーションの場合、AWS App2Container (A2C) コマンドライン ツールを利用して、最小限のプロセスでレガシーシステムをモダンアプリケーションに迅速に変換およびコンテナ化できます。
A2Cツールは、現在のアプリケーションを自動的に検出してそれらの依存関係を識別し、アプリケーションのアーティファクトと依存関係をコンテナーイメージにパッケージ化します。 さらに、A2C ツールは、EKS クラスターへのシームレスなデプロイに関連するアーティファクトも生成します。これにより、コンテナーワークロードのデプロイプロセスが大幅に簡素化され、運用効率が向上します。

Amazon EKS 上で稼働するマイクロサービスの公開

アプリケーションをコンテナに変換することが出来たら、次はエンドユーザーのテストや本番環境へのデプロイといったマイクロサービスベースのアプリケーションを外部に公開するメカニズムが必要です。 Amazon EKS は、マイクロサービスを外部ネットワークに安全かつ効率的に公開するためのいくつかの選択肢を提供します。
まず、EKS は標準的な Kubernetes サービスタイプである LoadBalancer をサポートします。これは、1 つ以上のコンテナを含む標準的なデプロイ可能なオブジェクトである Pod で実行されるマイクロサービスを公開するために使用されるものです。 TCP/UDP ベースのマイクロサービスを公開し、Incoming トラフィックをバックエンド Pod にリダイレクトするには、Network Load Balancer (インスタンスまたは IP ターゲット) または Classic Load Balancer (インスタンス ターゲットのみ) を使用します。
次に、EKS は Kubernetes Ingress object をサポートします。SSL 終端、バーチャルホスト、URL rewrite 、および認証といった高度な機能サポートする HTTP/HTTPS ベースのマイクロサービスを公開するためのものです。
Ingress Controller を Network Load Balancer と組み合わせてデプロイすると、ホストベースまたはパスベースのルーティングを柔軟に使用できるため、追加の Network Load Balancer と Elastic IP (EIP) の消費を抑えることができ、運用効率が向上します。

Network Load Balancer と Kubernetes Ingress を使用したマイクロサービスの公開図3 – Network Load Balancer と Kubernetes Ingress を使用したマイクロサービスの公開

第三に、Amazon EKS は AWS Load Balancer Controller (以前の Application Load Balancer Ingress Controller、または ALB Ingress Controller) と連携することで、WebSocket、HTTP/2 のような追加機能、AWS WAF 統合といった独自機能を追加します。

最後に、Amazon Route 53 を利用して受信 DNS リクエストをルーティングし、マイクロサービスをホストする Network Load Balancer または Application Load Balancer にトラフィックを分散できます。 Amazon Route 53 は、レイテンシーベースまたは地理位置情報ベースのルーティング、または組み込みのヘルスチェック機能でセカンダリリージョンへのフェイルオーバーなどの高度な DNS 負荷分散機能を提供します。

Amazon EKS における AWS DevOps ツールの活用

アプリケーションのモダナイゼーションジャーニーをさらに加速し、お客様の SDLC のベスト プラクティスを改善できるようにするには、AWS DevOps ツールを活用し、それぞれのマイクロサービスに CI/CD パイプラインを用意することです。フルマネージド型の DevOps ツールと Amazon EKS とのネイティブ統合により、お客様は新しいアイデアを簡単に試し、計画通りいかなかった場合には素早くロールバックすることができます。
レガシーアプリケーションがマイクロサービスに分割されることにより、アプリケーションは特定の機能停止が、アプリケーション全体の停止を引き起こすことがなくなり、障害に対する回復力が高まります。また、マイクロサービスのテストまたはアップグレードプロセス中に、アプリケーション全体が停止するリスクも大幅に軽減されます。これにより、コードの更新が容易になり、ソフトウェア開発におけるテストとリリースを迅速かつ頻繁に行うことができます。
次の図は、AWS DevOps ツールを活用したマイクロサービスの CI/CD パイプラインのサンプルを示しています。AWS CodePipelineAWS CodeCommit および AWS CodeBuild といった AWS DevOps ツールは EKS および Amazon Elastic Container Registry (Amazon ECR) へのネイティブ統合を備えています。

EKSとAWS DevOps ツールを活用した SDLC ベストプラクティスの改善図 4 – EKSとAWS DevOps ツールを活用した SDLC ベストプラクティスの改善

  1. 開発チームがコードを AWS CodeCommit リポジトリにコミットすると、AWS CodePipeline がトリガーされ、CI/CD パイプラインを介してコード変更の処理が開始されます。
  2. AWS CodeBuild は、コードの変更と依存関係をパッケージ化し、新しい Docker イメージを構築します。
  3. 新しい Docker イメージが Amazon ECR にプッシュされます。
  4. CodeBuild は Kubectl を使用して Kubernetes API を呼び出し、マイクロサービスデプロイのイメージタグを更新します。
  5. Kubernetes は、Amazon ECR で指定された新しい Docker イメージに従って、Pod のローリングアップデートがアプリケーションデプロイの中で実行されます。

詳細については、リファレンス アーキテクチャをご参照ください。

マイクロサービスアプリケーションにおけるデプロイの最適化

以下の図は、追加の AWS ネイティブサービスを活用してマイクロサービスアプリケーションのデプロイをさらに最適化する方法について全体的なアーキテクチャを示したものです。

AWS ネイティブサービスを活用したマイクロサービスアプリケーションにおけるデプロイの最適化図5 – AWS ネイティブサービスを活用したマイクロサービスアプリケーションにおけるデプロイの最適化

  • Amazon Elastic File System (Amazon EFS): EKS で実行されるマイクロサービスに、Container Storage Interface (CSI) ドライバーを介して Kubernetes 永続ストレージを提供します。
  • Amazon Simple Storage Service (Amazon S3): マイクロサービスに柔軟なオブジェクトストレージを提供し、費用対効果の高いアプリケーションのバックアップオプションを提供します。
  • Amazon Route 53: マイクロサービスがホストされた Network Load Balancer または Application Load Balancer への受信リクエストを転送といったDNS ルーティングを提供します。また、DNS ロード バランシングと自動フェイルオーバーといった高度な機能も提供します。
  • AWS WAF: 一般的な攻撃パターンや高度な Web エクスプロイトから Web アプリケーションまたは API を保護します。
  • Amazon CloudFront: マイクロサービスのコンテンツキャッシュと高速化、SSL オフロード、AWS WAF 統合を提供します。
  • AWS Shield: マネージド型の分散サービス妨害 (DDoS) に対する保護サービスで、インターネットエッジで常時稼働の検出と自動インライン緩和策を提供します。

お客様のメリット

本項では、お客様が VMware Cloud on AWS を Amazon EKS と簡単に統合して、アプリケーションの変革とモダナイゼーションを加速する方法について説明しました。 Amazon EKS は、コンテナのワークロードを効率的に管理し、マイクロサービスアプリケーションをデプロイするための簡素化されたフルマネージド型の Kubernetes プラットフォーム、それに加え、マイクロサービスを外部に公開するための複数の柔軟なオプションを提供します。
SDLC プロセスを改善して迅速化するために、様々な AWS DevOps ツールを利用してマイクロサービスの CI/CD パイプラインを構築するユースケースについて説明しました。これにより、お客様は新しいアイデアを素早く試し、新しいサービスや機能を頻繁に展開して、ビジネスに迅速なイノベーションをもたらすことができます。
さらに、マイクロサービスアプリケーションをデプロイ、および最適化するための追加の AWS ネイティブサービスを調査しました。これらのサービスにより、お客様はマイクロサービスのパフォーマンスとスケーラビリティをさらに向上させ、セキュリティと信頼性を向上させ、リソースとコストを最適化することができます。

まとめ

VMware Cloud on AWS は、AWS サービスの大きなポートフォリオへのネイティブ アクセスを提供します。それは、お客様がアプリケーションのモダナイゼーションジャーニーを加速するのに役立ちます。
ネイティブの AWS サービスを利用することで、アプリケーションを迅速に変革し、管理オーバーヘッドや運用の複雑さ無しにコンテナ化されたマイクロサービスアーキテクチャを構築できます。
詳細については、次のリソースをご参考いただくことをお勧めします。

 

翻訳はENT SA 齋藤が担当しました。原文はこちらです。