フォーム読み込み中
こんにちは。ソフトバンク株式会社の王文礼です。
Web アプリの開発者は、サーバやネットワーク、ファイアウォール、ロードバランサ、データベースなどのインフラの構築と管理のために、大量の時間を費やしてしまい、コーディング時間の確保が難しくなるのは、悩みの種です。
AWS Elastic Beanstalk は上記のような悩みを解決できます。本記事では、五つのデモを通じて使い方や機能を丁寧に解説します。今回は前編です。
後編はこちらからどうぞ
AWS Elastic Beanstalk は AWS が提供する PaaS サービスで、Web アプリの実行環境を自動的に作成してくれます。これを利用すると、Web アプリのデプロイメントと管理が簡単になります 。
開発者は単一の zip ファイルまたは war ファイルをアップロードして、簡単な設定を行うだけで、AWS Elastic Beanstalk はコンピューティング容量のプロビジョニング、ロードバランシング、スケーリング、データベース、アプリ状態モニタリングといったリソースの起動、構成および管理を自動的に行います。
AWS Elastic Beanstalk は以下のリソースやサービスをサポートします。
五つのデモを通じて、使い方や機能を解説します。
デモ①と②は、今回の前編で解説します。デモ③、④と⑤は、後編をご覧ください。
AWS Elastic Beanstalk デベロッパーガイドからサンプルコードをダウンロードします。記事作成時点では、以下のサンプルコードが提供されています。今回は nodejs.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.「ウェブアプリケーションの作成」ページで、以下の内容を設定します。
注)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 環境を終了または再構築する方法を教えてください をご参照ください。
ソフトバンクはAWS アドバンストティアサービスパートナーです
「はじめてのAWS導入」から大規模なサービス基盤や基幹システムの構築まで、お客さまのご要望にあわせて最適なAWS環境の導入を支援します。
条件に該当するページがございません