AWSにおけるクラウドネイティブ

ここ数年で「クラウドネイティブ」というキーワードをしばしば目にするようになりました。
クラウドネイティブな技術はハイペースで進歩しており、Amazon Web Services (AWS)をはじめとするクラウド事業者がクラウドネイティブなサービスを次々とリリースしています。
この記事では、クラウドネイティブの定義について述べると共にクラウドネイティブの発展を支えるCloud Native Computing Foundationやその代表的なプロジェクトについて解説し、加えてAmazon Web Services (AWS)においてクラウドネイティブを実践するために役立つサービスを紹介します。

クラウドネイティブについて

CNCFについて

Cloud Native Computing Foundation (CNCF)はコンテナをはじめとするクラウドネイティブ技術の推進を目的とする団体であり、クラウドネイティブ技術に関する様々なオープンソースプロジェクトをホストしています。
CNCFは2015年7月にLinux Foundationによってアナウンスされ、AWS、Azure、Google Cloudなどのクラウド事業者を含む多数のメンバーから構成されています。
CNCFによってホストされるプロジェクトは成熟度によって「Sandbox」「Incubating」「Graduated」の3段階に分類され、「Sandbox」から「Graduated」へ段階が上がるごとに成熟度が高くなります。
なお、CNCFはオープンソースプロジェクトのホスティングの他、ベンダー向けの認定Kubernetes適合プログラムやエンジニア向けの認定Kubernetesアドミニストレータープログラム/認定Kubernetesアプリケーションデベロッパープログラムを提供しています。

クラウドネイティブ ≒ コンテナ?

CNCFではGraduated ProjectsであるKubernetesやcontainerd(Dockerのコンテナランタイム)をはじめとしてコンテナ関連のプロジェクトを多くホストしていますが、必ずしもクラウドネイティブ=コンテナとは限りません。
CNCFによるクラウドネイティブの定義には「パブリッククラウド、プライベートクラウドまたはハイブリッドクラウドのように現代の動的な環境において、クラウドネイティブ技術はスケーラブルなアプリケーションを構築・運用するための力を組織に与える」という一文が含まれており、また、クラウドネイティブ技術として「コンテナ」「サービスメッシュ」「マイクロサービス」「イミュータブルインフラストラクチャ」「宣言的API」が例示されています。
このように、クラウドネイティブに含まれる技術はコンテナだけではありませんが、コンテナはサービスメッシュやマイクロサービスなど他の技術とも密接に関係しており、クラウドネイティブにおいて重要なポジションにあります。

DockerとKubernetesについて

Dockerとはコンテナの実行やコンテナイメージの作成・配布を行うためのプラットフォームであり、Dockerを使うことによってアプリケーションを実行環境ごとパッケージ化し、開発環境でも運用環境でも同じようにアプリケーションを動作させることができます。
なお、コンテナとは「名前空間」と呼ばれるしくみを用いて外部から隔離された特殊なプロセスであり、コンテナイメージとはコンテナを実行するためのテンプレートで大部分はコンテナの実行に必要なファイルシステムです。
一方、KubernetesはDockerなどでコンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を行う「コンテナオーケストレーション」というカテゴリに含まれるソフトウェアであり、Kubernetesを使うことによってコンテナを実行するためのマシンの集団(「クラスタ」と呼ばれます)の管理・運用を自動化することができます。
これら2つのプロジェクトはクラウドネイティブの火付け役ともいえる存在であり、クラウドネイティブ技術の中でも特に重要な役割を担っています。

AWSでクラウドネイティブを実践する

前段では、クラウドネイティブの概要について解説しました。
クラウド事業者が提供するパブリッククラウドはクラウドネイティブの想定環境の一つであり、パブリッククラウドもまたクラウドネイティブをサポートするための様々なサービスを提供しています。
以下、AWSにおいてクラウドネイティブを実践するために役立つサービスを紹介します。

Amazon ECS

Kubernetesと同様に、Amazon Elastic Container Service (ECS)はコンテナオーケストレーションサービスであり、Amazon ECSを利用することによってコンテナを実行するためのクラスタの管理・運用を自動化することができます。
Amazon ECSはマネージドサービスであるため、インフラストラクチャの管理を基本的にAWSへ任せることができますが、クラスタを構成するノード(マシン)はAmazon Elastic Compute Cloud (EC2)インスタンスであり、コンテナエージェントの更新などの一部の作業をユーザー側で行う必要があります。
コンテナオーケストレーションの領域ではKubernetesがデファクトスタンダードとなりましたが、Amazon ECSにはElastic Load BalancingやAWS Auto ScalingなどのAWSの他サービスと統合しやすい特徴があり、AWSがメインな環境ではAWSの他サービスとの連携などの点で利用しやすいというメリットがあります。

Amazon EKS

Amazon Elastic Kubernetes Service (EKS)はコンテナオーケストレーションサービスであり、KubernetesやAmazon ECSと同様、Amazon EKSを利用することによってコンテナを実行するためのKubernetesクラスタの管理・運用を自動化することができます。
Amazon EKSでは実際にコンテナを実行する「ワーカー」と呼ばれるノードはAmazon ECSと同様にAmazon EC2インスタンスであり、一部ユーザー自身で管理・運用する必要がありますが、クラスタの司令塔の役割を果たす「マスター」と呼ばれるノードはAmazon EKSコントロールプレーンとしてAWSによって管理・運用されるので、全てを自前で運用する場合と比べて負荷を軽減することができます。
AzureやGoogle Cloudもそれぞれ同様のマネージドKubernetesクラスタサービスを提供しており、Kubernetes上で構築されたアプリケーションは他のクラウドやオンプレミスへ移行しやすいメリットがあります。

Amazon ECR

Amazon Elastic Container Registry (ECR)はコンテナレジストリサービスであり、プライベートなコンテナイメージを登録することができます。
コンテナレジストリとはコンテナイメージの保管場所であり、コンテナイメージを配布する上で重要な役割を担っています。
コンテナレジストリを自前で運用することもできますが、高い可用性や耐久性を備えたコンテナレジストリシステムを自前で構築・運用するのは決して簡単なことではありません。
その点、Amazon ECRはフルマネージドなサービスであるため、インフラストラクチャの管理をAWSへ一任することができます。
コンテナレジストリサービスとしてはDockerが提供するDocker Hubがデファクトスタンダードであり、Docker Hubもプライベートレジストリサービスを提供していますが、Amazon ECRとDocker Hubとでは料金体系が異なっており、使い方によってはAmazon ECRを利用した方がコストを安く抑えることができます。

おわりに

クラウドネイティブは価値あるアプリケーションをスピーディーに提供するためのアプローチの一つとして強い関心を集めています。
CNCFがホストするプロジェクトやクラウド事業者のクラウドネイティブ関連サービスなど、今後の動向が注目されます。

Amazon Web Services(AWS)、Microsoft Azureの
導入支援サービスのご相談、お問い合わせをお待ちしております。

ページ上部へ戻る