【AWSサービス 基礎編】AWS Elastic Beanstalk でアプリをアップロードするだけで公開する

目次

概要

Web アプリケーションを AWS で公開しようとすると、EC2 インスタンスの起動、Web サーバーのインストール、セキュリティグループの設定、台数を保つ仕組みづくりなど、アプリケーションのコード以外の準備がたくさん必要になります。

AWS Elastic Beanstalk は、アプリケーションのコードをアップロードするだけで、それを動かすための EC2 インスタンスや Auto Scaling グループ、必要に応じてロードバランサーまでを自動で用意してくれるサービスです。インフラの細かい準備を任せて、アプリケーションの開発とデプロイに集中できます。Elastic Beanstalk 自体に追加料金はかからず、作成された EC2 インスタンスなどのリソースに対してだけ料金が発生します。

この記事では、PaaS という考え方と、Elastic Beanstalk が裏で作るリソース、環境タイプ、プラットフォーム、デプロイポリシーの基本を押さえます。そのうえで、記事内の小さな PHP ファイルを zip にしてアップロードし、低コストな単一インスタンス環境で公開します。続けてアプリケーションの新しいバージョンをデプロイし、環境のイベントとヘルスを確認します。EC2 インスタンスの基本は Amazon EC2 でインスタンスを起動しSSH接続する、Elastic Beanstalk が内部で使う CloudFormation は AWS CloudFormation でテンプレートからリソースを作成する で扱っています。

クラウドおさる

今日は「コードを渡すだけでサーバーが立つ」という話を確かめるのでござる。猿山でいえば、バナナの苗を長老会に預けるだけで、畑の開墾から水やり当番の手配までやってもらえるようなものでござるな!

zip をアップロードすると、Elastic Beanstalk が CloudFormation でリソース一式を作り、環境の URL で公開される
zip をアップロードすると、Elastic Beanstalk が CloudFormation でリソース一式を作り、環境の URL で公開される

この記事のメリット

  • PaaS とは何か、Elastic Beanstalk が EC2 や IaaS とどう違うかを理解できる
  • アプリケーション・アプリケーションバージョン・環境・プラットフォームの関係を把握できる
  • Elastic Beanstalk が裏で作るリソース(EC2・Auto Scaling・ELB・CloudFormation など)を理解できる
  • 単一インスタンス環境と負荷分散環境の違い、デプロイポリシー(All at once・Rolling・Immutable・Blue/Green)の使い分けを把握できる
  • zip をアップロードしてアプリを公開し、新しいバージョンをデプロイする流れを体験できる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

PaaS と Elastic Beanstalk

クラウドおさる

とひさん、Elastic Beanstalk は「PaaS」だと聞いたでござる。PaaS とは何でござるか?

土肥

PaaS は Platform as a Service の略だよ。ハードウェアや OS みたいな下回りのインフラを自分で管理しなくてよくて、アプリケーションのデプロイと管理に集中できるクラウドの使い方なんだ。AWS の資料でも、PaaS の例として Elastic Beanstalk が挙げられているよ。

クラウドおさる

EC2 とは何が違うのでござる? EC2 でもサーバーは借りられるでござるよ。

土肥

いい質問だね! EC2 は IaaS っていって、仮想サーバーやネットワーク、ストレージみたいな「部品」を借りる使い方なんだ。自由度は一番高いけど、OS の設定や Web サーバーのインストール、台数の管理は自分でやる必要がある。比べるとこんな感じだよ。

区分代表例自分で管理するもの
IaaSAmazon EC2OS・ミドルウェア・アプリケーション・台数やネットワークの構成
PaaSAWS Elastic Beanstalkアプリケーションのコードと環境の設定(インフラの用意・デプロイ・監視は Elastic Beanstalk が受け持つ)
クラウドおさる

EC2 は畑を借りて自分で耕す、Elastic Beanstalk は苗を渡せば畑ごと整えてもらえる、ということでござるな!

土肥

そうそう! しかも Elastic Beanstalk が作ったリソースは自分のアカウントの中にあって、必要ならカスタマイズもできるんだ。「全部お任せで中身が見えない」わけじゃないのがポイントだよ。それから、Elastic Beanstalk そのものには追加料金がかからなくて、動いている EC2 インスタンスなどのリソースの分だけ料金がかかるんだ。

クラウドおさる

お任せできるのに、畑の中にも入れるのでござるな。それは安心でござる。

アプリケーション・バージョン・環境・プラットフォーム

クラウドおさる

Elastic Beanstalk の画面には、アプリケーションや環境など、いろいろな言葉が出てくるでござる。どういう関係でござるか?

土肥

最初に押さえておきたい用語は 4 つだよ。

用語意味
アプリケーション環境・バージョン・環境設定をまとめる入れ物(論理的なグループ)
アプリケーションバージョンデプロイできるコードにラベルを付けたもの。アップロードした zip などのソースバンドルは Amazon S3 に保存される
環境アプリケーションバージョンを実行する AWS リソースのまとまり。1 つの環境で同時に動くバージョンは 1 つだけ
プラットフォームOS・言語ランタイム・Web サーバー・アプリケーションサーバーなどの組み合わせ
クラウドおさる

プラットフォームは何を選べるのでござるか?

土肥

Go、Java、.NET、Node.js、PHP、Python、Ruby に加えて、Docker にも対応しているよ。たとえば今回使う PHP のプラットフォームなら、Amazon Linux 2023 の上で PHP と Web サーバー(デフォルトは nginx)が動く構成を Elastic Beanstalk が用意してくれるんだ。だから自分で用意するのは PHP のファイルだけで済むんだよ。

クラウドおさる

苗(コード)の種類に合わせて、土や肥料(プラットフォーム)を選ぶわけでござるな。

土肥

うまいね! 1 つ注意があって、言語固有のプラットフォームで動かしている環境のプログラミング言語を変えたいときは、別のプラットフォームで新しい環境を作って切り替える必要があるんだ。

土肥

もう 1 つ補足すると、環境には HTTP リクエストを受ける「ウェブサーバー環境」と、Amazon SQS のキューからタスクを取り出して処理する「ワーカー環境」があって、これは作成後に変えられないよ。今回はウェブサーバー環境を使うね。

Elastic Beanstalk が裏で作るもの

クラウドおさる

コードをアップロードしたら、実際にはどんなリソースが作られるのでござるか?

土肥

今回のような単一インスタンスのウェブサーバー環境だと、主にこんなものが自動で作られるよ。

リソース役割
EC2 インスタンス選んだプラットフォームでアプリケーションを動かす仮想サーバー
Auto Scaling グループインスタンスを管理する。単一インスタンス環境では常に 1 台が動いている状態を保つ
インスタンスのセキュリティグループインターネットからポート 80(HTTP)へのアクセスを許可する
Elastic IP アドレス単一インスタンス環境のインスタンスに割り当てられ、環境のドメイン名はこの IP アドレスに解決される
Amazon S3 バケットアップロードしたソースコードやログなどの保存場所
CloudWatch アラーム負荷分散環境で、Auto Scaling のスケーリングのきっかけにする 2 つのアラーム(今回の単一インスタンス環境では作られない)
CloudFormation スタック上のリソースをまとめて作成し、設定変更を反映する
ドメイン名サブドメイン.リージョン.elasticbeanstalk.com 形式の URL
クラウドおさる

CloudFormation まで出てきたでござる。Elastic Beanstalk が CloudFormation を使っているのでござるか?

土肥

そうなんだ。Elastic Beanstalk は CloudFormation を使って環境のリソースをデプロイしたり設定を変えたりしているよ。だから CloudFormation のコンソールを見ると、Elastic Beanstalk が作ったスタックとそのリソースの一覧を確認できるんだ。実践でも中を覗いてみよう。

クラウドおさる

長老会に苗を預けると、裏で開墾係・見張り係・水路係に指示書(テンプレート)が回っているようなものでござるな。

土肥

ははは、その通り! ちなみに、ロードバランサーを使う環境だと、ここに Elastic Load Balancing のロードバランサーが加わって、環境のドメイン名はロードバランサーを指すようになるよ。

アプリケーションはバージョンと環境の入れ物。環境の中身は CloudFormation スタックが作る
アプリケーションはバージョンと環境の入れ物。環境の中身は CloudFormation スタックが作る

環境タイプ(単一インスタンスと負荷分散)

クラウドおさる

「単一インスタンス」と「ロードバランサーを使う環境」の 2 種類があるのでござるか?

土肥

そうだよ。環境タイプは 2 つあるんだ。

環境タイプ構成向いている用途
単一インスタンス環境Elastic IP アドレスを持つ EC2 インスタンス 1 台。ロードバランサーなし。Auto Scaling グループは使うが、最小・最大・希望はすべて 1開発・テスト・ステージング。コストを抑えたいとき
負荷分散環境(ロードバランシング)Elastic Load Balancing と Amazon EC2 Auto Scaling を使い、負荷に応じて台数を増減。複数 AZ で動かせる本番環境
クラウドおさる

単一インスタンスでも Auto Scaling グループを使うのに、台数は増えないのでござるか?

土肥

そうなんだ。最小・最大・希望がすべて 1 だから、負荷が増えても台数は増えない。ただし 1 台が動いている状態は保ってくれるよ。AWS のドキュメントでも、単一インスタンス環境は本番向きではないとされているんだ。デプロイ中や設定の更新中にインスタンスが再起動されると、しばらくアプリケーションが使えなくなることがあるからね。

クラウドおさる

試しに植えるのは小さな畑で、収穫祭に出すなら広い畑で、ということでござるな。

土肥

そういうこと! 環境タイプはあとから設定で変えられるから、まず単一インスタンスで作って、本番前に負荷分散に切り替える使い方もできるよ。コンソールの環境作成画面では、「インフラストラクチャ」のセクションで単一インスタンスか負荷分散かを選べるんだ。

デプロイポリシー

クラウドおさる

新しいバージョンのコードを出すときは、どうやって入れ替えるのでござるか?

土肥

そこで選ぶのがデプロイポリシーだよ。デフォルトは「一度にすべて(All at once)」なんだ。主なものを比べるとこうなるよ。

ポリシー動き方ダウンタイム単一インスタンス環境
All at once(一度にすべて)すべてのインスタンスに同時に新しいバージョンをデプロイ。最も速い短時間停止する使える
Rolling(ローリング)インスタンスをバッチに分けて順番にデプロイ。デプロイ中のバッチはサービスから外れるなし(ただし処理能力は一時的に下がる)使えない
Rolling with additional batch(追加バッチによるローリング)先に追加のバッチを起動してからローリング。処理能力を保つなし使えない
Immutable(イミュータブル)別の Auto Scaling グループに新しいインスタンスを一式起動してデプロイ。失敗したら新しいインスタンスを終了するだけで戻せるなし使える
Traffic splitting(トラフィック分割)新しいインスタンスを一式起動し、一部のトラフィックだけ新バージョンに流して確かめる(カナリアテスト)なし使えない(Application Load Balancer が必要)
クラウドおさる

一度にすべては「全員一斉に畑を植え替える」、ローリングは「列ごとに順番に植え替える」、イミュータブルは「隣に新しい畑を作ってから乗り換える」でござるな!

土肥

いい例えだね! もう 1 つ、Blue/Green デプロイっていう考え方も覚えておこう。これはデプロイポリシーの 1 つというより、環境ごと別に用意するやり方なんだ。

クラウドおさる

環境ごと別に、でござるか?

土肥

そう。今の環境(Blue)とは別に新しい環境(Green)を作って新しいバージョンをデプロイし、テストが済んだら「環境 URL のスワップ」で 2 つの環境の CNAME を入れ替えるんだ。トラフィックがすぐ新しいバージョンに切り替わって、問題があれば URL を入れ替え直せば戻せるよ。ただし DNS の切り替えなので、古い DNS レコードの有効期限が切れるまでは古い環境を消さないことが大事なんだ。

クラウドおさる

Immutable は「同じ環境の中で新しいインスタンス群を作る」、Blue/Green は「環境ごと別に作って URL を入れ替える」でござるか。名前は違えど似ているので、取り違えないよう気をつけるでござる。

デプロイ方法ごとに、v1 のインスタンスが v2 に入れ替わる様子
デプロイ方法ごとに、v1 のインスタンスが v2 に入れ替わる様子

ほかのサービスとの使い分け

クラウドおさる

「手軽に Web アプリを公開する」サービスは、ほかにもある気がするでござる。どう使い分ければよいでござるか?

土肥

よく比べられるのはこのあたりだね。

サービス特徴向いている場面
AWS Elastic Beanstalkコード(zip など)をアップロードすると、EC2・Auto Scaling・ロードバランサーなどを自動で用意する PaaS。作られたリソースは自分のアカウントにあり、カスタマイズできる対応言語の Web アプリを、インフラの準備をせずに公開・運用したいとき
Amazon Lightsail仮想サーバー・コンテナ・データベース・ロードバランサー・静的 IP などを、月単位の予測しやすい低価格で提供する個人のプロジェクトや学習で、シンプルにサーバーやサイトを立てたいとき
Amazon ECSフルマネージドのコンテナオーケストレーションサービスアプリケーションをコンテナとして動かし、デプロイや台数を細かく管理したいとき
土肥

ソースコードやコンテナイメージから Web アプリを直接デプロイできる AWS App Runner っていうサービスもあるけど、今は新規のお客さんには公開されていないから、名前だけ知っておけば大丈夫だよ。

クラウドおさる

小さな庵を月極めで借りるなら Lightsail、苗を渡して畑を任せるなら Elastic Beanstalk、鉢植え(コンテナ)を並べて管理するなら ECS、という感じでござるな!

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

ハンズオンガイド8 ステップ画面 10 枚

コンソールの横に開いて、チェックしながら進めましょう。

ガイドを開く

別タブで開きます。チェックはこのブラウザに保存されます。

ここでは、PHP ファイルを 1 つだけ入れた zip を用意し、Elastic Beanstalk の単一インスタンス環境を作成して公開します。Elastic Beanstalk が作ったリソースを確認したあと、内容を変えた新しいバージョンをデプロイし、環境のイベントとヘルスを確認します。

前提条件

  • リージョン: ap-northeast-1(東京)
  • AWS マネジメントコンソールにログイン済み(IAM ロールを作成できる権限があること)
  • 手元のパソコンでテキストファイルを作成し、zip ファイルに圧縮できること
  • 以下のリソースが作成済みであること
リソース種別リソース名用途
VPCeb-lab-vpc検証用 VPC(CIDR: 10.0.0.0/16)
パブリックサブネットeb-lab-public-subnet-1aap-northeast-1a のパブリックサブネット(CIDR: 10.0.1.0/24)
インターネットゲートウェイeb-lab-igwインターネット接続用
ルートテーブルeb-lab-public-rt0.0.0.0/0 をインターネットゲートウェイへ向けるルート。eb-lab-public-subnet-1a に関連付け済み

作成するリソース一覧

リソース種別リソース名用途
ソースバンドル(手元)eb-lab-v1.zip / eb-lab-v2.zipアップロードするアプリケーションのコード
IAM ロールaws-elasticbeanstalk-service-roleElastic Beanstalk のサービスロール(環境の作成時に自動で作られる。既にある場合はそれを選択)
IAM ロール(インスタンスプロファイル)aws-elasticbeanstalk-ec2-role環境の EC2 インスタンスが使うインスタンスプロファイル(環境の作成時に自動で作られる。既にある場合はそれを選択)
Elastic Beanstalk アプリケーションeb-lab-app環境とバージョンをまとめる入れ物
Elastic Beanstalk 環境eb-lab-envPHP プラットフォームの単一インスタンスのウェブサーバー環境
アプリケーションバージョンv1 / v2アップロードしたコードのバージョン

環境の EC2 インスタンス、セキュリティグループ、Elastic IP アドレス、Auto Scaling グループ、CloudFormation スタックは Elastic Beanstalk が自動で作成します。

アプリケーションのコードを zip にする

手元のパソコンで任意のフォルダを作り、以下の内容で index.php という名前のファイルを保存します。アクセスすると、バージョン名と、応答したサーバーのホスト名を表示するだけのページです。

<?php
$version = 'v1';
?>
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>eb-lab</title>
</head>
<body style="font-family: sans-serif; background: #e8f4ff;">
  <h1>Hello from Elastic Beanstalk (<?php echo $version; ?>)</h1>
  <p>Host: <?php echo htmlspecialchars(gethostname()); ?></p>
</body>
</html>

index.php を zip に圧縮し、ファイル名を eb-lab-v1.zip にします。ソースバンドルには親フォルダを含めてはいけないため、フォルダごとではなく index.php ファイルそのものを圧縮します。macOS や Linux のターミナルなら、index.php があるフォルダで次のコマンドを実行します。

zip eb-lab-v1.zip index.php

続けて、次のバージョン用のファイルも作っておきます。index.php の $version = 'v1'; を $version = 'v2'; に、background: #e8f4ff; を background: #fff4d6; に書き換えて保存し、同じように eb-lab-v2.zip という名前で圧縮します。

zip eb-lab-v2.zip index.php

環境を作成する

環境の作成は 1 枚のフォームで行います。上から「基本詳細」「プラットフォームの詳細」「アプリケーションコード」を入力し、そのあと折りたたまれた「サービスアクセス」「ネットワーク」のセクションを開いて設定します。

AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。

  • 上部の検索バーに Elastic Beanstalk と入力し、表示された「Elastic Beanstalk」を選択します
  • 「環境を作成」をクリックします(アプリケーションは、環境の作成と同時に作られます)
  • 「基本詳細」と「プラットフォームの詳細」「アプリケーションコード」で以下を設定します
  • アプリケーション名: eb-lab-app(「新しいアプリケーションが作成されます」と表示されます)
  • 環境名: eb-lab-env
  • ドメイン名プレフィックス: 空欄のまま(Elastic Beanstalk が自動で決めます)
  • プラットフォーム: PHP
  • プラットフォームブランチ・プラットフォームのバージョン: 表示された推奨のまま
  • アプリケーションコード: ローカルファイル を選び、「ファイルを選択」で eb-lab-v1.zip を選択
  • バージョンラベル: v1
「環境を作成」画面の基本詳細・プラットフォームの詳細・アプリケーションコード(アプリケーション名・環境名、プラットフォーム PHP、eb-lab-v1.zip、バージョンラベル v1 を入力した状態)
「環境を作成」画面の基本詳細・プラットフォームの詳細・アプリケーションコード(アプリケーション名・環境名、プラットフォーム PHP、eb-lab-v1.zip、バージョンラベル v1 を入力した状態)

環境のタイプ(ウェブサーバー環境・単一インスタンス)は、既定で選ばれているものをそのまま使います。

Elastic Beanstalk には 2 つの IAM ロールが必要です。サービスロールは Elastic Beanstalk が EC2 インスタンスを監視したり、プラットフォームを更新したりするために使い、EC2 インスタンスプロファイルはインスタンスがログの書き込みなどを行うために使います。

  • 「サービスアクセス – 任意」のセクションを開きます
  • 「サービスロール」と「EC2 インスタンスプロファイル」が、どちらも デフォルトロールを作成 になっていることを確認します。aws-elasticbeanstalk-service-role と aws-elasticbeanstalk-ec2-role という名前のロールが、環境の作成時に自動で作られます(既にこのロールがあるアカウントでは、別のロールを使用 を選んで既存のロールを選びます)
  • 「EC2 キーペア」は空欄のままにします(このハンズオンではインスタンスにログインしません)
「サービスアクセス」セクション(サービスロールと EC2 インスタンスプロファイルが「デフォルトロールを作成」の状態)
「サービスアクセス」セクション(サービスロールと EC2 インスタンスプロファイルが「デフォルトロールを作成」の状態)

VPC を指定しないとデフォルト VPC が使われるため、ここで前提条件の VPC を選びます。

  • 「ネットワーク – 任意」のセクションを開き、以下を設定します
  • VPC: eb-lab-vpc
  • インスタンスサブネット: eb-lab-public-subnet-1a が選ばれていることを確認します(VPC を選ぶと自動で入ります。入らない場合はドロップダウンから選びます)
  • EC2 セキュリティグループ: 選択しない(Elastic Beanstalk が作成します)
「ネットワーク」セクション(VPC に eb-lab-vpc、インスタンスサブネットに eb-lab-public-subnet-1a が入った状態)
「ネットワーク」セクション(VPC に eb-lab-vpc、インスタンスサブネットに eb-lab-public-subnet-1a が入った状態)
  • その他のセクションはデフォルトのままにし、ページ下部の「作成」をクリックします

単一インスタンス環境では、インスタンスに Elastic IP アドレスが自動で割り当てられるため、パブリック IP アドレスの設定は不要です。

環境の作成を待ってアクセスする

環境の概要画面に切り替わり、Elastic Beanstalk が環境の作成を始めます。作成中は下部の「イベント」タブに、リソースの作成状況が順に追加されていきます。初回の作成には数分かかります。

  • 「環境の概要」のヘルスが Ok(緑色)になるまで待ちます
  • 「実行中のバージョン」が v1、プラットフォームが PHP になっていることを確認します
eb-lab-env の環境の概要(ヘルスが Ok、ドメイン、実行中のバージョン v1、プラットフォームが表示された状態)
eb-lab-env の環境の概要(ヘルスが Ok、ドメイン、実行中のバージョン v1、プラットフォームが表示された状態)
クラウドおさる

環境ができた瞬間から、EC2 インスタンスと Elastic IP アドレス(パブリック IPv4 アドレス)の料金がかかり始めるでござる。Elastic Beanstalk 自体は無料でも、環境を終了するまで中のリソースは動き続けるので、ハンズオンが終わったら放置しないことでござるぞ。

「環境の概要」の「ドメイン」に表示されている URL(eb-lab-env.〜.ap-northeast-1.elasticbeanstalk.com のような形式)をクリックするか、左側ナビゲーションの「環境に移動」をクリックします。HTTP での接続のため、ブラウザに警告が表示されることがあります。

Hello from Elastic Beanstalk (v1) と、応答したサーバーのホスト名が表示されることを確認します。サーバーを自分で用意しなくても、zip をアップロードしただけでアプリが公開されたことが確認できます。

ブラウザで環境のドメインにアクセスした結果(Hello from Elastic Beanstalk (v1) が表示された状態)
ブラウザで環境のドメインにアクセスした結果(Hello from Elastic Beanstalk (v1) が表示された状態)

Elastic Beanstalk が作ったリソースを確認する

Elastic Beanstalk が裏で作ったリソースを CloudFormation から確認します。

  • 上部の検索バーに CloudFormation と入力し、表示された「CloudFormation」を選択します
  • 「スタック」の一覧で、Elastic Beanstalk が作成したスタックを選択します(スタック名は awseb-<環境 ID>-stack の形式で、環境 ID は Elastic Beanstalk の環境の概要に表示される e- で始まる ID です。「タグ」タブの elasticbeanstalk:environment-name が eb-lab-env になっているものが今回の環境のスタックです)
  • 「リソース」タブを選択します

Auto Scaling グループ(AWS::AutoScaling::AutoScalingGroup)、起動テンプレート(AWS::EC2::LaunchTemplate)、セキュリティグループ(AWS::EC2::SecurityGroup)、Elastic IP(AWS::EC2::EIP)などが、このスタックで作られていることが確認できます。負荷分散環境の場合は、ロードバランサーや CloudWatch アラームもこのスタックに含まれます。

CloudFormation スタックの「リソース」タブ(Auto Scaling グループ・起動テンプレート・セキュリティグループ・Elastic IP などが並んだ状態)
CloudFormation スタックの「リソース」タブ(Auto Scaling グループ・起動テンプレート・セキュリティグループ・Elastic IP などが並んだ状態)

EC2 コンソールの「インスタンス」を開くと、名前が eb-lab-env のインスタンスが 1 台起動していることも確認できます。Elastic Beanstalk は、環境の名前を Name タグとしてリソースに付けます。

新しいバージョンをデプロイする

Elastic Beanstalk のコンソールに戻り、eb-lab-v2.zip をデプロイします。

  • 上部の検索バーに Elastic Beanstalk と入力し、表示された「Elastic Beanstalk」を選択します
  • 左側ナビゲーションの「環境」を選択し、eb-lab-env を選択します
  • 環境の概要画面で「アップロードとデプロイ」をクリックします
  • 表示されたダイアログで以下を設定します
  • 「ファイルを選択」で eb-lab-v2.zip を選択
  • バージョンラベル: v2
「アップロードとデプロイ」ダイアログ(eb-lab-v2.zip を選択し、バージョンラベルに v2 を入力した状態)
「アップロードとデプロイ」ダイアログ(eb-lab-v2.zip を選択し、バージョンラベルに v2 を入力した状態)
  • 「デプロイ」をクリックします

デプロイの進み具合は、環境の概要の「イベント」タブに順に記録されます。ヘルスは一時的に灰色(Info)になることがありますが、デプロイが終わってアプリケーションがヘルスチェックに応答すると緑色の Ok に戻ります。この環境のデプロイポリシーはデフォルトの「一度にすべて(All at once)」で、インスタンスが 1 台だけなので、デプロイの間はアプリケーションが一時的に応答しなくなることがあります。

環境のイベントとヘルスを確認する

  • 環境の概要画面の下部で「イベント」タブを選択します

新しいバージョンのデプロイが始まったこと、インスタンスへのデプロイが完了したこと、環境の更新が正常に完了したことなどが、時刻つきで記録されていることが確認できます。デプロイがうまくいかないときは、まずこの「イベント」を見て、どの段階で止まったかを確かめます。

eb-lab-env の「イベント」タブ(v2 のデプロイの開始から完了までのイベントが記録された状態)
eb-lab-env の「イベント」タブ(v2 のデプロイの開始から完了までのイベントが記録された状態)
  • 環境の概要画面の「健全性とモニタリング」タブを選択します

「拡張インスタンスの状態」にインスタンスごとのヘルスステータスが表示されます。インスタンスのステータスが Ok になっていることを確認します。環境の概要に戻ると、「実行中のバージョン」が v2 に変わっていることも確認できます。

eb-lab-env の「健全性とモニタリング」タブ(「拡張インスタンスの状態」でインスタンスのステータスが Ok の状態)
eb-lab-env の「健全性とモニタリング」タブ(「拡張インスタンスの状態」でインスタンスのステータスが Ok の状態)

ブラウザで環境のドメインに再度アクセスし、Hello from Elastic Beanstalk (v2) が表示され、背景の色が変わっていることを確認します。

ブラウザで環境のドメインにアクセスした結果(Hello from Elastic Beanstalk (v2) が表示された状態)
ブラウザで環境のドメインにアクセスした結果(Hello from Elastic Beanstalk (v2) が表示された状態)

左側ナビゲーションの eb-lab-app の下にある「アプリケーションバージョン」を選択すると、v1 と v2 の 2 つのバージョンが並んでいることも確認できます。古いバージョンを選んでデプロイし直せば、前のバージョンに戻すこともできます。

クラウドおさる

サーバーには一度も触らずに、zip を渡すだけで v1 から v2 へ植え替えられたでござる。苗の履歴(アプリケーションバージョン)が残っているから、いざとなれば前の苗に戻せるのも心強いでござるな。

まとめ

  • AWS Elastic Beanstalk は、アプリケーションのコードをアップロードするだけで、実行に必要な AWS リソースを用意してデプロイ・監視・スケーリングまで受け持つ PaaS である。サービス自体に追加料金はなく、作られたリソースの分だけ料金がかかる
  • アプリケーションは環境・バージョン・設定をまとめる入れ物で、アップロードしたコードはアプリケーションバージョンとして S3 に保存される。環境はバージョンを実行するリソースのまとまりで、プラットフォームで言語や Web サーバーの組み合わせを選ぶ
  • Elastic Beanstalk は CloudFormation を使って、EC2 インスタンス・Auto Scaling グループ・セキュリティグループ・(環境タイプに応じて)Elastic IP やロードバランサーを作成する。作られたリソースは自分のアカウントにあり、確認・カスタマイズできる
  • 環境タイプは、Elastic IP を持つ 1 台で動く低コストな単一インスタンス環境(開発・テスト向け)と、ELB と Auto Scaling で台数を増減する負荷分散環境(本番向け)がある
  • デプロイポリシーは、速いが短時間止まる All at once、バッチごとに入れ替える Rolling、新しいインスタンス群で入れ替える Immutable などがある。Blue/Green は別の環境を作って環境 URL をスワップするやり方である
  • 手軽にサーバーを立てるなら Lightsail、コンテナを細かく管理するなら ECS と、目的に応じて使い分ける

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次