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状態エージェント」があるが、基盤の構成変更の制約にはほとんどならない。
そのため、Beanstalkのアプリケーション実行基盤は自由にカスタマイズできる。アプリケーション実行環境としてBeanstalkの用途は広い。
VPC内に実行基盤を配置
ここからBeanstalkの特徴的な機能を二つ取り上げる。VPC(Virtual Private Cloud)対応とアプリケーションの更新だ。順に説明する。
Beanstalkのリソースは、ユーザーごとの論理的に独立したネットワークVPCに配置できる。クラウド上に構築したアプリケーションサーバーというと、インターネット向けに公開するもの、というイメージがあるかもしれない。もちろんBeanstalkはその用途に使えるが、業務システムのようなインターネットに公開しないシステムにも利用できる。
その場合は、VPCにリソースを配置したうえで、オンプレミス環境とAWSとを専用線接続サービスAWS Direct ConnectやVPNで結ぶ。