AWS Elastic Beanstalkは、Java、PHP、.NET、Node.js、Python、Ruby、Goのアプリケーション向け実行環境のPaaSだ。Beanstalk(ビーンスターク=豆の木)という名称は「ジャックと豆の木」に由来する。負荷に合わせて処理性能をスケーリングさせたり、随時アプリケーションを更新したりして、システムを柔軟に育てられる、という意味だ。

 Beanstalkの提供が始まったのは2011年で、実績がある。主に二つの用途で使われてきた。

 一つは、アプリケーションの実行基盤だ。Apache HTTP Server、Nginx、Phusion Passenger、IISというWebサーバー、負荷分散やオートスケーリングの機能などを備えており、簡単な設定でアプリケーションを動作させることができる。

 もう一つの用途はコンテナ基盤。Beanstalkは簡易なコンテナ基盤として、バッチ処理などに使われてきた。最近はAWS LambdaやAWS Batchにその役目を譲りつつある。

 本稿ではアプリケーション実行基盤としてのBeanstalkを取り上げる。

 Beanstalkの特徴として、実行基盤の自由度が高いことが挙げられる。

 一般に、アプリケーション実行基盤のPaaSはバックエンドが隠蔽されて、カスタマイズの余地が小さい。そのため、実行基盤に合ったアプリケーションを用意する必要がある。これは、特に既存アプリケーションをPaaSに展開するとき問題になる。

 一方、Beanstalkではカスタマイズの制約が少ない。インスタンスの種類やサイズ、オートスケーリングの条件など、構成・設定の大半はカスタマイズ可能だ。

 その理由は、Beanstalkで作る実行基盤は、EC2やAuto Scaling、ELB(Elastic Load Balancing)、CloudWatchなど、AWSのサービス(リソース)を組み合わせて実現したものだからだ。構築した実行基盤は、CloudFormationスタック(AWSリソースの集合)として保存される(図1)。Beanstalk独自のリソースとして、EC2インスタンスに導入する「Beanstalk状態エージェント」があるが、基盤の構成変更の制約にはほとんどならない。

図1 Beanstalkで構築したアプリケーション実行基盤の構成
図1 Beanstalkで構築したアプリケーション実行基盤の構成
[画像のクリックで拡大表示]

 そのため、Beanstalkのアプリケーション実行基盤は自由にカスタマイズできる。アプリケーション実行環境としてBeanstalkの用途は広い。

VPC内に実行基盤を配置

 ここからBeanstalkの特徴的な機能を二つ取り上げる。VPC(Virtual Private Cloud)対応とアプリケーションの更新だ。順に説明する。

 Beanstalkのリソースは、ユーザーごとの論理的に独立したネットワークVPCに配置できる。クラウド上に構築したアプリケーションサーバーというと、インターネット向けに公開するもの、というイメージがあるかもしれない。もちろんBeanstalkはその用途に使えるが、業務システムのようなインターネットに公開しないシステムにも利用できる。

 その場合は、VPCにリソースを配置したうえで、オンプレミス環境とAWSとを専用線接続サービスAWS Direct ConnectやVPNで結ぶ。