AWS Elastic BeanstalkがDockerをサポート、新しい形態のPaaSへ。事実上どんな言語でも使え、手元の開発環境をそのままPaaSへデプロイできる
コンテナ型仮想化を実現する技術「Docker」が、PaaSの新しい形態を生み出そうとしています。
いわゆる従来のPaaS(Platform as a Service)は、使えるプログラミング言語がPaaSによって決められています。例えばHerokuならRubyやPython、Node.js、Javaなど(記事末追記参照)、Google App EngineならPythonやGo、Java、PHPなどです。
しかし、あらかじめPaaS側に実行環境があることで開発者は手軽にプログラムをクラウドで実行でき、クラウドが負荷などに応じてスケーラブルな運用をしてくれます。ここにPaaSの大きなメリットがあります。
一方でPaaS側の実行環境に依存することのデメリットもあります。1つ目は、PaaSでサポートされていない言語やライブラリ、フレームワークなどが使えない点。もう1つは、ローカルの開発環境とPaaSの実行環境を完全に一致させることは一般に難しく、実行環境の微妙なバージョンの違いやライブラリの違いなどによってアプリケーションがPaaSで思った通りに動かない可能性を排除できない点です。
AWS BeanstalkがDockerをサポート
DockerはこうしたPaaSのデメリットを打ち消すことができる技術です。Dockerは実行環境とコードを軽量なパッケージであるコンテナとしてまとめ、Linux OS上にデプロイできます。つまり、PaaS側に持っていた実行環境をコンテナ側に持たせることができるため、事実上どんなプログラミング言語でもPaaSでサポートできるようになりますし、自分で用意した好きなライブラリやフレームワークが使えるようになります。
これはある意味で、OSとアプリケーションの実行環境をまるごとパッケージしたVMをIaaSにデプロイし、負荷に応じてオートスケールさせるのと似ています。しかしDockerではOSカーネルなどは含まれておらず軽量な点が大きな違いです。プロビジョニングにかかる時間もVMと較べてさらに短時間で済みます。
Dockerによるアプリケーションのクラウドへのデプロイは、IaaSと(既存の)PaaSの中間的な存在といえるかもしれません。
このDockerを、AmazonクラウドでPaaS機能を提供するAWS Elastic Beanstalkがサポートすると発表されました。「AWS Elastic Beanstalk for Docker」です。DockerコンテナをAWS Beanstalkによってデプロイ、監視し、ロードバランサーを使って、正常に稼働しているインスタンスにリクエストを分散、スケーラブルな運用を実現してくれます。
Dockerの技術を用いることで、開発者はローカルの開発環境で使ったプログラミング言語やライブラリといった実行環境をコードと一緒にそのままDockerコンテナとしてまとめ、AWS Elastic Beanstalkでデプロイできるようになります。そのため開発環境と実行環境の齟齬は発生せず、好きな環境で開発し、そのまま運用をクラウドに任せることができるのです。
Dockerが登場した時点で、Dockerコンテナをデプロイできるクラウドサービスが登場するであろうことは予想されていました。それがこんなに早い時期に、クラウドのトップベンダであるAmazonクラウドから登場するのは多くの人の予想を超えたものだったのではないでしょうか。
すでにRed HatはDockerを積極的に取り入れ、同社のOSであるRed Hat Linux Enterpriseはもちろん、PaaSであるOpenShiftでも採用していく方向ですし、ほとんどのLinuxディストリビューションでDockerが利用可能になります。当然、今後ほかのクラウドでもDockerコンテナをデプロイする機能は標準的なものとなっていくはずです。
Dockerの技術はクラウドに大きな変化を与えていくことになりそうです。
4/28 16:00追記) HerokuではRuby、Java、Python、Node.jsの言語サポートのほかに、内部でLXCコンテナ技術を用いており、Dockerと同様にこれを用いることでさまざまな言語のサポートが可能だというご指摘をいただきました。表記が正確でなかった点についてお詫びして追記いたします。
あわせて読みたい
IBMがクラウドマーケットプレイスを開設。セルフサービスでIaaS、PaaS、SaaS購入。オープンソースやサードパーティのサービスも
≪前の記事
大手クラウドベンダの相次ぐ値下げで、中小クラウドベンダの生き残りは厳しいと、IDCが警告