前回は、Amazon EC2を扱いました。
「AWSと言えばEC2!」と言っても過言ではない有名なサービスですが、最近では、EC2をそのまま使うことは減ってきています。キーワードはクラウドネイティブ(クラウドを前提とした考え方)。第4回では、クラウドの良さを活かす考え方とコンテナ関連のサービス(AmazonECS、AmazonEKS、AWS Fargate)について解説します。
クラウドネイティブな設計とマネージドサービス
クラウドを導入する場合、現在使っているサーバ構成をそのままクラウドに持って行こうと考えがちです。しかし、このような考え方では、クラウドの良さを活かすことはできません。
クラウドの良さとは、一言で表すならば「身軽さと手離れの良さ」です。
いつでも、どこからでも、サーバを操作することができて、使うも使わないも、ボタン一つで構築できます。サーバの規模も、増減が自在で、変更も容易です。大変身軽な存在です。
また、マネージドサービス(AWSが自動で管理するサービスの総称)ならば、よく使われるソフトウェアのアップデートやスケーリング(サーバーの台数を変更すること)を自動でやってくれたり、各種監視サービスも充実していたりするので、手離れも良いです。
こうした特徴を活かすには、「それ前提の設計」でなければなりません。
たとえば、ソフトウェアのアップデートを自動でやってくれるのに、アップデートされたら困るようなシステムの作り方では、その機能を使うわけにはいかないでしょう。AWSがスケーリングに対応しているのに、自分の作った構成が、対応していなければ、豚に真珠です。
そもそも、クラウド向きのシステムではないケースもあります、「サーバの規模を自在に変えられる」ことがメリットだとしても、サーバ使用量がほとんど変わらないシステムならば、「使う意味がある」とは言いがたいのではないでしょうか。
「なんとなく、格好いいから」「時代はクラウドだから」と、安易にクラウドを検討する人も居ますが、サーバの料金は、そのプロジェクトのランニングコストに大きく関わります。「クラウドが必要ならば使い、使うならばクラウドを前提とした設計する」と考えることが肝要です。
クラウドを活かすコンテナサービスECS
クラウドは、コンテナと組み合わせると、より一層、強みを発揮します。
コンテナというとわかりづらいかもしれませんが、Dockerというと、聞いたことがあるのではないでしょうか。Dockerは、Docker社の提供する「パソコンやサーバ上に隔離したプログラムの実行環境を作れる仕組み」であり、その隔離したゾーンを「コンテナ(container)」と言います。
EC2では、マーケットプレイスから、AMIを入手して、インスタンスを作りましたが、Dockerの場合も似たような仕組みです。Docker HUBと呼ばれるところから、イメージを入手して、それを金型として、コンテナを作成します。
AWSでもコンテナを使えるサービスを提供しており、それが、Amazon Elastic Container Service (Amazon ECS)です。ECSでは、ECR(Amazon EC2 Container Registry)からイメージを入手し、コンテナを作成します。
ただ、注意したいのが、コンテナを実行する場所(作る場所)は、ECSではなく、EC2やAWS Fargate(ファーゲート)であるということです。ECS単体では、使えません。
Kubernetes互換のEKS
コンテナといえば、Kubernetes(クーベネティス)を使いたいという方もいらっしゃるでしょう。
Kubernetesは、K8Sとも略すコンテナのオーケストレーションソフトです。複数のサーバにまたがるよな大規模システムにおいて、コンテナを自動で管理するのに便利なソフトウェアです。
AWSにも、Amazon Elastic Kubernetes Service(EKS)という互換のサービスがあります。こちらも、ECSと同じで、コンテナはEC2やFargateに作ります。
マネージドという考え方
冒頭で、「最近では、EC2をそのまま使うことは減ってきています」と書きましたが、これはどういうことかというと、EC2はマネージドサービスではありません。アンマネージドサービス(AWSが自動で管理しないサービス)です。
つまり、自分で管理するサービスなのです。そうすると、クラウドの良さの1つである「手離れの良さ」が活かしきれません。
そのため、最近では、EC2をそのまま使うのではなく、マネージドのサービスと組み合わせ、「いかに、自動でサーバを運用していくか」を考えた設計にする傾向にあります。その代表的なサービスの一つが、ECSやEKSといったコンテナサービスです。
また、コンテナを作る場所も、EC2とFargateの2つを紹介していますが、EC2がアンマネージドサービスであるのに対し、Fargateはマネージドサービスであるため、自分でインスタンスを管理する必要がありません。コンテナで何か実行するには、コンテナ自体を動かすための実行エンジンや、その実行エンジンを動かすためのOSなどをインスタンスにインストールしておく必要があるのですが、Fargateなら、そうしたこともAWSがやってくれるので、我々は「ヨロシク!」と任せればいいのです。
今回は、AWSのお話なので、AWSを使うことを前提で解説をしていますが、プロジェクトによって求められるインフラはさまざまです。AWSが向いている場合もあれば、そうでないこともあるでしょう。
しかし、「手離れの良さ」は、人手不足のIT業界において、AWSと関係なく取り入れていくべき考え方です。AWSをきっかけに、こうした思想も触れていくとよりスムーズにシステムを構築できるようになるでしょう。
文中の図は『図解即戦力 Amazon Web Servicesのしくみと技術がこれ1冊でしっかりわかる教科書』より引用しております。おかげさまで発売後わずか2年ですが、10刷を迎える大ヒットとなりました。
この連載は、その10刷記念として企画されたものです。書籍のほうもよろしくお願いしますね!