クラウドにおけるアプリケーション中心のインフラストラクチャの採用 1

クラウドコンピューティングの世界では、インフラストラクチャとアプリケーションの管理は、しばしば2つの哲学の物語でした。一方では、確実性と一貫性に焦点を当てたエンジニアリングの考え方から生まれたAWS CloudFormationのようなツールがあります。CloudFormationは、コードとしてのインフラストラクチャの定義に優れており、予測可能なデプロイメントと自動ロールバックを保証します。他方では、Kubernetesは運用現場から生まれ、動的なコンテナ化されたアプリケーションのためのアドホックな運用と緩和策を強調しています。Kubernetesはコンテナオーケストレーションにおいて比類のないものですが、伝統的にCloudFormationのような広範なインフラストラクチャ管理能力を欠いていました。

この相違は、ツールチェーンの無秩序な増加、不整合、および運用上の複雑さにつながっています。しかし、「アプリケーション」の定義がより広範囲の密結合リソースを含むように進化するにつれて、新しいパラダイムが出現しています:アプリケーション中心のインフラストラクチャ。AWS Cloud Development Kit (CDK)のようなツールによって可能になるこのアプローチは、インフラストラクチャとランタイム管理を統一し、一貫性、管理性、およびドメイン駆動型の視点をクラウドデプロイメントにもたらすことを目指しています。

CloudFormation vs. Kubernetes:実践における2つの哲学

アプリケーション中心のインフラストラクチャへの移行を理解するためには、CloudFormationとKubernetesの根本的な違いを理解することが不可欠です。

CloudFormation:エンジニアリングの確実性と自動ロールバック

Kubernetes:運用上の柔軟性と回復力

これらの対照的なアプローチは、それぞれの起源と主要なユースケースを反映しています。CloudFormationは基盤となるインフラストラクチャ用、Kubernetesはアプリケーションランタイム管理用です。

現代の「アプリケーション」:境界付けられたコンテキストとしての垂直スライス

「従来、クラウドにおける『アプリケーション』は、Kubernetesによってオーケストレーションされたコンテナのセットと見なされていたかもしれません。しかし、現代のアプリケーションはビジネス機能の垂直スライスであり、多くの場合、以下のもので構成されています。

「アプリケーション」を単なるコンテナとして狭く定義することは、そのドメイン駆動型の範囲を無視することになり、制限的になります。より正確で有用な定義は、物理的な場所や種類に関係なく、ビジネス機能を提供するために必要なすべてのリソースを持つ自己完結型の垂直スライスとして、すべての密結合された論理リソースを境界付けられたコンテキストとして包含します。

アプリケーション中心のインフラストラクチャ:ドメイン駆動型アプローチ

この「アプリケーション」のより広範な定義は、アプリケーション中心のインフラストラクチャ設計につながります。このパラダイムは、個々のリソースを個別に管理することから、論理的なアプリケーション境界の周りにインフラストラクチャを編成することに焦点を移します。主な原則は次のとおりです。

利点:

このアプリケーション中心のアプローチは、ドメイン駆動設計(DDD)の哲学と深く共鳴します。DDDが境界付けられたコンテキストとドメインロジックの周りにソフトウェアを編成するのと同様に、アプリケーション中心のインフラストラクチャは、論理的なアプリケーションドメインの周りにクラウドリソースを編成します。この整合性は、明確さ、一貫性、およびインフラストラクチャ管理へのビジネス価値へのより強力な焦点をもたらします。

AWS CDK:インフラストラクチャとランタイム管理の統一

AWS Cloud Development Kit (CDK) は、アプリケーション中心のインフラストラクチャの強力なイネーブラーとして登場します。CDKは、従来のInfrastructure as Codeの複雑さを抽象化し、使い慣れたプログラミング言語を使用して、インフラストラクチャとランタイムオーケストレーションの両方を単一の統一されたコードベースで定義できるようにします。

CDKを使用することで、チームは断片化されたツールやハイブリッドアプローチを超えて、アプリケーションの真に統一されたスタック定義を採用できます。

デプロイメントツールの進化

クラウドインフラストラクチャ管理の状況は、現代のアプリケーションの複雑さの増大と、より効率的で一貫したデプロイメント戦略の必要性によって、大幅な進化を遂げてきました。当初、組織は専門化されたツールの断片化されたエコシステムをナビゲートし、運用上のオーバーヘッドと不整合を引き起こしていました。以下は、クラウドデプロイメントツールの進化を3つの異なるフェーズでたどり、AWS Cloud Development Kit (CDK) に代表される統一スタックアプローチの出現で最高潮に達します。

フェーズ1:断片化されたツール – 専門化とサイロの時代

クラウド導入の初期には、組織はしばしば、それぞれがクラウド環境の特定の側面に対処する、ばらばらで専門化されたツールに依存していました。2つの顕著な例は、AWS CloudFormationとKubernetesであり、それぞれ異なる運用哲学から生まれました。

結果:ツールチェーンの無秩序な増加と運用上の摩擦

この断片化されたアプローチは、いくつかの課題を引き起こしました。

フェーズ2:ハイブリッドアプローチ – 複雑さでギャップを埋める

断片化されたツールの限界を認識し、組織はインフラストラクチャとアプリケーション管理の間のギャップを埋めるためにハイブリッドアプローチを採用し始めました。一般的なパターンは、以下を組み合わせることでした。

ハイブリッドアプローチの限界:

ハイブリッドアプローチは完全に断片化されたツールよりも改善をもたらしましたが、新たな複雑さを導入しました。

フェーズ3:CDKによる統一スタック – インフラストラクチャとランタイムの収束

現在の進化は、インフラストラクチャとランタイム管理が単一のまとまりのあるコードベースに収束する、統一スタックアプローチを示しています。AWS Cloud Development Kit (CDK) はこのフェーズ3を例示しており、基盤となるインフラストラクチャからランタイムオーケストレーションまで、アプリケーションスタック全体を単一の開発者フレンドリーな環境内で定義および管理するための強力なフレームワークを提供します。

AWS CDK:インフラストラクチャとランタイム管理の統一

AWS CDKはAWS CloudFormationの上にある抽象化レイヤーとして機能しますが、開発エクスペリエンスを根本的に変えます。

CDKによる統一スタックの利点:

(注:以下は特定の実装ノートまたはリンクのようです)

https://github.com/ondemandenv/odmd-eks/.../simple-k8s-manifest.ts#L10

この単一のスタックは、EKSクラスター内外のすべてのリソースのライフサイクルと依存関係を管理し、必要なすべてのリソース(インフラストラクチャとランタイムコンポーネント)を含む自己完結型の「スタック」にします。このスタックは、アプリケーションの環境の単一の信頼できる情報源となり、ドメイン駆動設計(DDD)の「境界付けられたコンテキスト」の概念を反映します。

AWS CloudFormationは、スタック内のすべてのリソース間の依存関係を維持し、トランザクション内で順序どおりにデプロイおよびロールバックされるようにします。

これは実際のコードであり、次のようなパラメータ化によるわずかなコーディング抽象化が行われています。

//what branch I am on
const br = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
//configuration based on branch
const imgAndVer = StringParameter.valueForStringParameter(this, '/my-app/' + br );

これにより、異なるブランチ上の同一のコードが、複数の環境(ブランチ指定の構成値を持つ同一のロジック/機能マニフェスト)に対して生成およびデプロイされ、さらなる実験、発見、テスト、または本番環境での高い一貫性、ブランチによるコード比較、および単体テストが可能になり、GitOpsを凌駕します!

上記はhttps://ondemandenv.devの根本的な哲学であり、もう1つの抽象化レイヤーをサポートしています。つまり、複数のアカウント間でVPCを接続し、各アカウントが動的な値/トークン解決を使用してプライベートサブネット経由でk8sマニフェストをデプロイできるようにします。