クラウドインフラストラクチャの基礎
現代のバックエンドデプロイを支える、クラウドインフラの基礎概念を理解する。
クラウドインフラが存在する理由
クラウドインフラは、物理サーバーの管理を、インターネット経由でオンデマンドに提供されるリソースに置き換えます。
- 従来、企業は自社でハードウェアを購入し、保守する必要がありました。
- スケーリングには、ピーク時の容量を見越した手動のセットアップと計画が必要でした。
- クラウドプラットフォームは、コンピュート、ストレージ、ネットワーキングをオンデマンドで提供します。
詳細
クラウドコンピューティング以前は、企業は自分たちでインフラを構築し、管理する必要がありました。つまり、物理サーバーを購入し、データセンターを設置し、冷却や電源を管理し、長期にわたってハードウェアを保守する必要があったということです。
システムのスケーリングは特に難しいものでした。トラフィックが増えると、企業は事前に追加のサーバーを購入して設置する必要がありました。需要が減ると、それらのリソースは使われないままになり、コストの無駄につながりました。
クラウドインフラは、インターネット経由でリソースを提供することでこの問題を解決します。物理マシンを管理する代わりに、開発者はクラウドプラットフォームを通じてコンピュート能力、ストレージ、ネットワーキングを要求します。
これにより、初期のハードウェア投資なしで、需要に応じてシステムを動的にスケールできます。インフラは、物理的に構築して保守するものではなく、即座にプロビジョニングできるものになります。
この変化は、現代のバックエンドシステムの大きな基盤であり、より速い開発、運用負荷の削減、そしてより柔軟なスケーリングを可能にします。
コンピュートサービス
コンピュートサービスは、クラウド上でアプリケーションコードを実行するために必要な CPU、メモリ、実行環境を提供します。
- 仮想マシン、コンテナ、またはサーバーレス関数を使用してアプリケーションコードを実行します。
- コンピュートサービスは、アプリケーションの実行に必要な中核リソースを提供します。
- 異なるモデルは、制御性と抽象化の間でトレードオフを提供します。
詳細
コンピュートサービスはクラウドプラットフォームの基盤であり、アプリケーションコードを実際に実行する役割を担います。コンピュートがなければ、ストレージやデータベースのような他のサービスは何とも連携できません。
クラウドプロバイダーは、コードを実行するためのさまざまな方法を提供しています。仮想マシンはオペレーティングシステムを完全に制御でき、コンテナランタイムは軽量で移植性の高い環境を提供し、サーバーレス関数はインフラを一切管理せずにコードを実行できます。
これらのモデルはいずれも、CPU、メモリ、実行環境などの重要なリソースを提供します。違いは、システム管理において開発者がどれだけ責任を持つかにあります。
たとえば、AWS EC2、Google Compute Engine、Azure Virtual Machines のようなサービスでは、ユーザーが仮想サーバーを設定・管理できます。サーバーレスプラットフォームのような、より抽象化されたサービスでは、その責任の多くが不要になります。
適切なコンピュートモデルを選ぶには、必要な制御レベルと、構築するアプリケーションの複雑さを考慮する必要があります。
マネージドデータベース
マネージドデータベースは、セットアップ、メンテナンス、スケーリングを処理するため、アプリケーションはデータの保存とアクセスに集中できます。
- クラウドプロバイダーがデータベースのセットアップ、バックアップ、レプリケーションを管理します。
- スケーリングと高可用性を自動的に処理します。
- アプリケーションはインフラを管理せずにデータベースとやり取りします。
詳細
データベースはほとんどのアプリケーションにとって重要ですが、手動で管理するのは複雑で時間がかかります。従来は、チームがデータベースソフトウェアのインストール、バックアップの設定、障害対応、スケーリングの管理を自分たちで行う必要がありました。
マネージドデータベースサービスは、この責任をクラウドプロバイダーに移します。AWS RDS、Google Cloud SQL、Azure SQL Database などのサービスは、プロビジョニング、パッチ適用、監視といった作業を自動的に処理します。
また、自動バックアップ、複数拠点にわたるレプリケーション、需要に応じたスケーリングなどの組み込み機能も提供します。これにより信頼性が向上し、障害時でもデータを利用できるようになります。
その結果、開発者はインフラ管理ではなく、アプリケーションロジックとデータモデリングに集中できます。これにより、運用の複雑さを大幅に減らしながら、高いパフォーマンスと可用性を維持できます。
オブジェクトストレージ
オブジェクトストレージは、ファイルやメディアのような非構造化データを、高い耐久性と拡張性で保存します。
- 画像、動画、ログ、バックアップなどのファイルを保存するために使用されます。
- データは、従来のファイルシステムやデータベースではなく、オブジェクトとして保存されます。
- オブジェクトストレージは、大規模なスケールと高い耐久性を前提に設計されています。
詳細
オブジェクトストレージは、大量の非構造化データを保存するために設計されています。構造化されたレコードを保存するデータベースとは異なり、オブジェクトストレージは画像、動画、ログ、バックアップなどのファイルを扱います。
各ファイルはオブジェクトとして保存され、データ本体に加えてメタデータと一意の識別子が含まれます。この構造により、システムは大量のデータを効率的に取得・管理できます。
AWS S3、Google Cloud Storage、Azure Blob Storage のようなクラウドオブジェクトストレージサービスは、耐久性と拡張性を重視して構築されています。これらはデータ損失を防ぐために、複数の場所へ自動的にデータを複製します。
この設計により、オブジェクトストレージは複雑なインフラ管理を必要とせずに、巨大なデータセットを扱えるようにスケールできます。これは、信頼性が高く拡張可能なファイル保存を必要とする現代のアプリケーションにおける中核的なコンポーネントです。
クラウドネットワーキング
クラウドネットワーキングはサービスを安全に接続し、クラウドシステム内のコンポーネント間の通信を可能にします。
- 仮想ネットワークはクラウドリソースを分離し、整理します。
- ロードバランサーは複数のサービスにトラフィックを分散します。
- ゲートウェイは内部システムと外部システム間のアクセスを制御します。
詳細
クラウドネットワーキングは、クラウド環境内で異なるサービスが通信できるようにするインフラを提供します。これがなければ、コンピュートインスタンス、データベース、ストレージシステムは効果的に連携できません。
仮想ネットワークは、リソースをまとめて管理できる分離された環境として機能します。これにより、サービス同士の接続方法や、誰がそれらにアクセスできるかを定義します。
ロードバランサーは、受信トラフィックを複数のコンピュートインスタンスに分散します。これによりパフォーマンスが向上し、1つのインスタンスが故障してもシステムの可用性を維持できます。
ゲートウェイは、クラウド内部のリソースと外部のクライアントやネットワークとの間の通信を管理します。セキュリティポリシーの適用を支援し、データの出入りを制御します。
これらのコンポーネントが連携することで、分散したクラウドアプリケーション全体で安全で信頼性が高く、拡張性のある通信が可能になります。
リージョン
リージョンとは、クラウドプロバイダーが複数のデータセンターにまたがってインフラを展開する地理的な場所です。
- リージョンは、特定の地理的エリアにある複数のデータセンターで構成されます。
- ユーザーに近い場所へデプロイすると、レイテンシーが低減します。
- 複数のリージョンを使用すると、災害復旧と耐障害性が向上します。
詳細
クラウドプロバイダーは、世界中の多くの地理的な場所でインフラを運用しています。これらの各場所はリージョンと呼ばれ、クラウドサービスをホストする複数のデータセンターを含みます。
リージョンが重要なのは、物理的な距離がパフォーマンスに影響するためです。アプリケーションをユーザーに近い場所へデプロイするとネットワークのレイテンシーが低減し、応答時間が速くなります。
また、信頼性においても重要な役割を果たします。あるリージョンで障害が発生した場合でも、システムを別のリージョンへフェイルオーバーするように設計できるため、継続的な稼働を確保できます。
システムをリージョン間に分散することで、アプリケーションはグローバルなパフォーマンス向上と、より強力な災害復旧能力の両方を実現できます。
可用性ゾーン
可用性ゾーンは、リージョン内にある分離されたデータセンター群で、信頼性と耐障害性を向上させます。
- 各リージョンは、複数の分離された可用性ゾーンに分割されています。
- あるゾーンで発生した障害は、他のゾーンには影響しません。
- 複数のゾーンにまたがって実行すると、可用性と冗長性が向上します。
詳細
クラウドのリージョン内では、インフラストラクチャはさらに可用性ゾーンに分割されています。各ゾーンは、同じリージョン内の他のゾーンから物理的に分離された1つ以上のデータセンターで構成されています。
この分離は意図的なものです。停電やハードウェア障害など、ある可用性ゾーンで障害が発生しても、他のゾーンには影響しません。これにより、リージョン内で障害を分離できます。
アプリケーションは、高可用性を確保するために複数の可用性ゾーンにデプロイできます。あるゾーンが利用できなくなった場合、トラフィックは他のゾーンで稼働しているシステムに振り分けることができます。
この設計により、インフラストラクチャの一部が故障してもクラウドシステムは稼働を維持できるため、可用性ゾーンは耐障害性の高いシステムアーキテクチャにおいて重要な要素となります。
主要なクラウドプロバイダー
主要なクラウドプロバイダーは、物理サーバーを所有しなくてもアプリケーションを実行できるインフラストラクチャサービスを提供します。
- 代表的なプロバイダーには、AWS、Google Cloud Platform、Microsoft Azure があります。
- これらは、コンピュート、ストレージ、データベース、ネットワーキング、監視のためのサービスを提供します。
- アプリケーションは、これらのプラットフォームによって管理される世界中に分散したインフラストラクチャ上で実行されます。
詳細
クラウドプロバイダーは、大規模なインフラストラクチャを運用し、それをインターネット経由でユーザーに提供する企業です。組織は、自社でデータセンターを構築・維持する代わりに、これらのプラットフォームを使ってアプリケーションを実行します。
3大プロバイダーは、Amazon Web Services (AWS)、Google Cloud Platform (GCP)、Microsoft Azure です。各プラットフォームには独自のツールや命名規則がありますが、コンピュート、ストレージ、データベース、ネットワーキング、監視など、同様の基本サービスを提供しています。
これらのプロバイダーは世界中にデータセンターを運用しており、アプリケーションを世界中に分散したインフラストラクチャ上で実行できるようにしています。これにより、システムのスケーリング、異なる地域のユーザーに対するパフォーマンス向上、信頼性の維持が可能になります。
クラウドプロバイダーは物理ハードウェアを抽象化することで、開発者がインフラストラクチャの管理ではなく、アプリケーションの構築と運用に集中できるようにします。
質問セクション
1 / 5
このレッスンはプレミアムコンテンツです
プレミアムにアップグレードしてぼかしを解除し、全文を読めるようにしましょう。