五つのデモで AWS Elastic Beanstalk を学ぼう ~ 前編

2022年9月28日掲載

五つのデモで AWS Elastic Beanstalk を学ぼう ~ 前編

こんにちは。ソフトバンク株式会社の王文礼です。

Web アプリの開発者は、サーバやネットワーク、ファイアウォール、ロードバランサ、データベースなどのインフラの構築と管理のために、大量の時間を費やしてしまい、コーディング時間の確保が難しくなるのは、悩みの種です。

AWS Elastic Beanstalk は上記のような悩みを解決できます。本記事では、五つのデモを通じて使い方や機能を丁寧に解説します。今回は前編です。

目次

AWS Elastic Beanstalk とは

AWS Elastic Beanstalk は AWS が提供する PaaS サービスで、Web アプリの実行環境を自動的に作成してくれます。これを利用すると、Web アプリのデプロイメントと管理が簡単になります 。

開発者は単一の zip ファイルまたは war ファイルをアップロードして、簡単な設定を行うだけで、AWS Elastic Beanstalk はコンピューティング容量のプロビジョニング、ロードバランシング、スケーリング、データベース、アプリ状態モニタリングといったリソースの起動、構成および管理を自動的に行います。

AWS Elastic Beanstalk は以下のリソースやサービスをサポートします。

  • プラットフォーム:Go、Java、.NET、Node.js、PHP、Python、Ruby、Tomcat
  • オペレーティングシステム:Amazon Linux AMI、Windows Server AMI 
  • コンテナ:Amazon Linux 2 上で動作する Docker/ECS
  • ストレージ:Amazon S3、Amazon EFS
  • データベース:Amazon DynamoDB、Amazon RDS、Microsoft SQL Server、MySQL、PostgreSQL、Oracle

デモ内容

五つのデモを通じて、使い方や機能を解説します。

  • デモ①:単一インスタンス環境にアプリをデプロイ
  • デモ②:アプリのアップデート
  • デモ③:Blue-Green デプロイメント
  • デモ④:ワーカー環境の作成
  • デモ⑤:高可用性環境の作成

デモ①と②は、今回の前編で解説します。デモ③、④と⑤は、後編をご覧ください。

コードの準備

AWS Elastic Beanstalk デベロッパーガイドからサンプルコードをダウンロードします。記事作成時点では、以下のサンプルコードが提供されています。今回は nodejs.zip を使います。

  • Docker - docker.zip
  • 複数コンテナ Docker – docker-multicontainer-v2.zip
  • 事前設定済み Docker (Glassfish) – docker-glassfish-v1.zip
  • Go – go.zip
  • Corretto – corretto.zip
  • Tomcat – tomcat.zip
  • Linux 上の .NET Core – dotnet-core-linux.zip
  • .NET – dotnet-asp-v1.zip
  • Node.js – nodejs.zip
  • PHP – php.zip
  • Python – python.zip
  • Ruby – ruby.zip

サンプルコードのダウンロード

1. nodejs.zip をダウンロードして、「MyApp-version-green.zip」と名付けて保存します。

2.「MyApp-version-green.zip」を解凍して、ソースバンドルの中身を確認します。

3. html ファイルを開いてみます。緑色背景の Web ページが表示されます。

サンプルコードをいじって、別バージョンを作る

4. デモは、二つのバージョンが必要のため、html ファイルを編集してバージョン 2 を作ります。例えば、元の緑色背景を青色背景に変更して、ソースバンドルを「MyApp-version-blue.zip」と名付けて保存します。

これで、コードの準備が完了しました。

デモ①:単一インスタンス環境にアプリをデプロイ

単一インスタンス環境とは

単一インスタンス環境(シングルインスタンス環境)には、Elastic IP アドレスを使う一つの Amazon EC2 インスタンスが使用されます。単一インスタンス環境でも EC2 Auto Scaling グループが作成されますが、インスタンスの最小数、最大数および希望容量は全て 1 に設定されます。したがって、負荷が増加しても、新しいインスタンスが起動されることがありません。

単一インスタンス環境はコストを抑えることができます。トラフィックの少ないアプリや開発環境に適します。

デモ①では、「MyApp」というアプリと「Production」という単一インスタンス環境を作成して、コード「MyApp-version-green.zip」を「Production 環境」にデプロイします。

アプリの作成

1. AWS Elastic Beanstalk コンソールにアクセスします。

2. アプリがない場合、下記のような初期画面が表示されます。「Create Application」をクリックします。

3.「ウェブアプリケーションの作成」ページで、以下の内容を設定します。

  • アプリケーション名に任意の名称を入力します。ここでは「MyApp」を記入します。
  • プラットフォームを選択します。「Node.js」を選択します。
  • プラットフォームのブランチ、プラットフォームのバージョンはデフォルトのままにします。
  • 「より多くのオプションの設定」をクリックします。※「アプリケーションの作成」をクリックしないようにご注意ください。

注)AWS Elastic Beanstalk は、初回のアプリ作成時だけ、アプリの実行環境も同時に作成されるため、ここで「アプリケーションの作成」をクリックすると、「Myapp-env」という名称の環境が自動で作成されます。これを避けるために、いったん「より多くのオプションの設定」をクリックします。そうすると、環境が作成されず、アプリのみが作成されます。

4. この時点で、環境が作成されず、アプリのみが作成されました。サイドバーの「アプリケーション」をクリックします。

注)「より多くのオプションの設定」をクリックした後の画面で、環境名が「Myapp-env」とデフォルトで設定されることが分かります。

Production 環境の作成

5.「アプリケーション」ページで、「MyApp」>「新しい環境の作成」の順にクリックします。

6.「ウェブサーバー環境」にチェックを入れて、「選択」をクリックします。

7.「Production 環境」を作成します。環境名に「Production」、バージョンラベルに「myapp-green」を記入します。プラットフォームを「Node.js」を選択し、「MyApp-version-green.zip」をアップロードしてから、「環境の作成」をクリックします。

8.「Production 環境」の作成が開始され、デフォルトで単一インスタンス環境が作成されます。約 3 分後に環境の作成が完了します。

9. 各サービスのコンソールを確認すると、以下のリソースが作成されたことが分かります。

リソース

注記

EC2 インスタンス(Elastic IP 付)

Elastic IP は 5 個に制限されていることにご注意ください。

セキュリティグループ

-

Auto Scaling グループ

単一インスタンス環境のため、インスタンスの最小数/最大数/希望容量は全て 1 に設定されています。

EBS ボリューム

-

S3 バケット

アプリケーションバージョンやソースバンドル、ログファイルなどを保存します。

バケットに保存するオブジェクト、そして手動で削除する必要があるオブジェクトについての詳細は、Using Elastic Beanstalk with Amazon S3 を参照ください。

CloudFormation スタック


Elastic Beanstalk の内部では、CloudFormation を使ってリソースの作成とメンテナンスを行います。

10. 環境 URL をクリックします。

11. 緑色背景の Web ページが表示されます。アプリを「Production 環境」へのデプロイメントが成功しました。

12. 「Production 環境」ページで、「設定」をクリックして、容量とロードバランサを確認してみます。環境タイプは単一のインスタンスとなって、ロードバランサは作成されていないことが示されています。

デモ②:アプリのアップデート

まず、アプリ「MyApp」に「Development 環境」を追加して、「Development 環境」に新バージョンのコード「MyApp-version-blue.zip」をアップロードします。

次に、「Development 環境」で新バージョンに問題がないことを確認できたら、新バージョンを「Production 環境」にデプロイすることで、アプリをアップデートします。

Development 環境の作成

1.「MyApp」>「新しい環境の作成」の順にクリックします。

2.「Development 環境」を作成します。環境名に「Development」、バージョンラベルに「myapp-blue」を記入します。プラットフォームを「Node.js」を選択し、コード「MyApp-version-blue.zip」をアップロードしてから「環境の作成」をクリックします。

注)デモ①の「Production 環境の作成」と同じやり方のため、画像を省きます。

3. 「Development 環境」の作成が完了となったら、アプリ「MyApp」の中に、二つの環境が存在することを確認できます。

4. 「Development 環境」の URL をクリックすると、青色背景の Web ページが表示されます。新版アプリを「Development 環境」へのデプロイメントに成功しました。

アプリのアップデート

5. 新版アプリを「Production 環境」にデプロイします。「アプリケーションバージョン」>「myapp-blue」を選択した状態で、「アクション」>「デプロイ」の順にクリックします。

6. 環境は「Production」を選択して、「デプロイ」をクリックします。

7. 「Production 環境」でも「myapp-blue」が実行されます。

8.「Production 環境」の URL をクリックします。青色背景の Web ページが表示され、アプリのアップデートが成功しました。

注)シンプルな Web サイトでも、多少のタイムラグが発生します。アップデートが終わった直後、更新内容が反映されない場合、数分後に再度ご確認ください。

9. 再度「アプリケーションバージョン」を確認してみましょう。「myapp-blue」は二つの環境にデプロイされています。一方、「myapp-green」は 「Production 環境」から消えました。言い換えると、一つのバージョンは複数の環境にデプロイできますが、一つの環境では一つのバージョンしか実行できません。

注)「アプリケーションバージョン」が表示されていない場合、サイドバーの「アプリケーション」をクリックし、表示されたアプリ名「MyApp」をクリックしたら、「アプリケーションバージョン」が現れます。

注意点

バージョンをアップデートする際、AWS Elastic Beanstalk は in-place アップデートを実行するため、一時的にユーザがアプリを利用できなくなる可能性があります。これを回避するには、blue-green デプロイメントという手法があります。blue-green デプロイメントについて後編で解説します。

クリーンアップ

前編はここまでにしておきます。後編では、デモ①とデモ②で作ったアプリと環境を使用しますが、直ぐに後編をご覧にならない場合、無駄な課金を防ぐために、作成したリソースを削除しましょう。

1.「アプリケーション」ページで、「MyApp」を選択した状態で、「アクション」>「アプリケーションの削除」の順にクリックします。

注)「MyApp」に属する環境や関連付けられたリソースも同時に削除されますが、S3 に保管されているオブジェクトは、場合によって手動で削除する必要があります。詳細は Using Elastic Beanstalk with Amazon S3 を参照ください。

2. 念のため、アプリ削除完了後、EC2 インスタンス、Elastic IP、セキュリティグループ、Auto Scaling グループ、EBS ボリューム、S3 バケット、CloudFormation スタックが削除されたかどうかを確認したほうが良いでしょう。

注)リソースがうまく削除できない場合、AWSEBSecurityGroup の削除に失敗したときに、AWS Elastic Beanstalk 環境を終了または再構築する方法を教えてください をご参照ください。

関連サービス

Amazon Web Services (AWS)

ソフトバンクはAWS アドバンストティアサービスパートナーです

「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。

おすすめの記事

条件に該当するページがございません