AWS Elastic BeanstalkでLinuxアプリをデプロイする方法|環境設定とローリングデプロイ・マルチAZ・VPC統合の設計パターン入門

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)AWS(Amazon Linux) > AWS Elastic BeanstalkでLinuxアプリをデプロイする方法|環境設定とローリングデプロイ・マルチAZ・VPC統合の設計パターン入門
「Elastic Beanstalkを使えばデプロイが楽になると聞いたけど、eb createしたら想定外のパブリックサブネットにEC2が配置された」「ヘルスチェックが通らずデプロイが失敗し続ける」——そんなトラブルの多くは、Elastic Beanstalkが裏で作るリソース(ALB・Auto Scaling・セキュリティグループ)の動作を把握せずに使い始めることが原因です。

AWS Elastic Beanstalkは「インフラ設定をAWSに任せてアプリ開発に集中する」ためのPaaSサービスですが、本番運用ではローリングデプロイの設定・マルチAZ構成・VPC統合を適切に設計しないと、ダウンタイムが発生したり、プライベートサブネットに配置すべきEC2がインターネットに直接さらされたりします。

この記事では、Amazon Linux 2023 / EB CLI 3.21.x / AWS CLI v2.15.x で動作確認した実機手順をもとに、eb init から始まり、ローリングデプロイ設定・マルチAZ構成・VPC統合・カスタムAMI活用まで、Elastic Beanstalkの本番設計パターンを解説します。

この記事のポイント

・eb init → eb create の2ステップで環境が作成できる
・ローリングデプロイは .ebextensions/deploy.config の DeploymentPolicy で制御する
・マルチAZ構成は Availability Zones と MinSize を組み合わせて設計する
・VPC統合は eb create --vpc.id / --vpc.ec2subnets / --vpc.elbsubnets で指定する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

AWS Elastic Beanstalkとは何か(EC2・ALB・Auto Scalingを束ねる仕組み)

Elastic Beanstalkは、EC2インスタンス・ALB(Application Load Balancer)・Auto Scalingグループ・セキュリティグループ・CloudWatch監視をひとまとめに自動プロビジョニングするPaaSサービスです。

開発者はアプリケーションコードとデプロイ設定を渡すだけで、インフラの作成・更新・ロールバックをAWSが管理します。ただし「自動で作ってくれる」からこそ、設定を省略すると意図しない構成になりやすいという落とし穴があります。

Elastic Beanstalkが作成する主なリソースは以下のとおりです。

EC2インスタンス: アプリを動かすサーバー本体(AMI・インスタンスタイプを指定可)
ALB(またはCLB/NLB): トラフィックをEC2に分散するロードバランサー
Auto Scalingグループ: インスタンス数を自動で増減させる仕組み
S3バケット: アプリのバージョン(zipアーカイブ)を保存するストレージ
CloudWatchアラーム: Auto Scalingのトリガー監視

これらが連携して動いているため、「VPCを指定しない」「サブネットを指定しない」といった設定の省略がトラブルの原因になります。次のセクションから具体的な手順を見ていきましょう。

事前準備とeb initで環境を初期化する

1. EB CLIのインストール

EB CLIはpipでインストールします。Amazon Linux 2023で確認した手順は以下のとおりです。

# Python 3がインストール済みであることを前提とする $ pip3 install awsebcli --upgrade

インストール確認は以下のコマンドで実施します。

$ eb --version EB CLI 3.21.0 (Python 3.11.4)

2. eb initでアプリを初期化する

プロジェクトのルートディレクトリで eb init を実行します。対話形式でリージョン・アプリ名・プラットフォームを選択します。

$ eb init Select a default region 1) us-east-1 : US East (N. Virginia) ... 11) ap-northeast-1 : Asia Pacific (Tokyo) (default is 3): 11 Enter Application Name (default is "myapp"): my-linux-app Application my-linux-app has been created. Select a platform. 1) .NET Core on Linux 2) Docker 3) Go 4) Node.js 5) PHP 6) Python ... (make a selection): 6 Select a platform branch. 1) Python 3.11 running on 64bit Amazon Linux 2023 2) Python 3.9 running on 64bit Amazon Linux 2023 (default is 1): 1

初期化が完了すると、プロジェクト直下に `.elasticbeanstalk/config.yml` が生成されます。このファイルにリージョン・アプリ名・ブランチ情報が記録されます。

eb createで環境を作成する

1. 基本的な環境作成コマンド

eb create は環境名を指定して実行します。`--elb-type application` でALBを選択し、`--instance-types` でEC2インスタンスタイプを指定します。

$ eb create my-env \ --region ap-northeast-1 \ --elb-type application \ --instance-types t3.small

実行すると、アプリのzipアーカイブがS3にアップロードされ、EC2・ALB・Auto Scalingグループが順次作成されます。

Creating application version archive "app-v1.0". Uploading my-linux-app/app-v1.0.zip to S3. This may take a while. Upload Complete. Environment details for: my-env Application name: my-linux-app Region: ap-northeast-1 Deployed Version: app-v1.0 Environment ID: e-xxxxxxxxxxxx Platform: Python 3.11 running on 64bit Amazon Linux 2023/4.0.8 Tier: WebServer-Standard-1.0 CNAME: my-env.eba-xxxxxxxxxx.ap-northeast-1.elasticbeanstalk.com 2026-09-19 06:28:15 INFO Successfully launched environment: my-env

2. 環境URLの確認

環境のエンドポイントURL(CNAME)は eb status コマンドで確認できます。

$ eb status my-env Environment details for: my-env Application name: my-linux-app Region: ap-northeast-1 CNAME: my-env.eba-xxxxxxxxxx.ap-northeast-1.elasticbeanstalk.com Updated: 2026-09-19 06:28:15.000000+00:00 Status: Ready Health: Green

ローリングデプロイとBlue/Greenデプロイの設定

本番環境でダウンタイムなくデプロイするには、デプロイポリシー(DeploymentPolicy)の設定が必須です。

1. .ebextensionsでデプロイポリシーを設定する

プロジェクトルートの `.ebextensions/` ディレクトリに設定ファイルを置くことで、デプロイポリシーをコードで管理できます。

# .ebextensions/deploy.config option_settings: aws:elasticbeanstalk:command: DeploymentPolicy: Rolling BatchSizeType: Percentage BatchSize: "30" MinInstancesInService: 1

主なDeploymentPolicyの設定値は以下のとおりです。

AllAtOnce: 全インスタンスを一括更新。高速だが更新中はダウンタイムが発生する
Rolling: BatchSizeで指定した割合ずつ順番に更新。MinInstancesInServiceで最小稼働数を保証
RollingWithAdditionalBatch: 更新中も全容量を維持する(追加のEC2を起動してから更新)
Immutable: 新しいAuto Scalingグループを作成して切り替え。最も安全だが時間がかかる

本番環境では「Rolling」または「Immutable」を選択するのが一般的です。

2. Blue/Greenデプロイ(eb swap)

より安全にデプロイするなら、別の環境(Green)を作成して切り替えるBlue/Greenデプロイが使えます。

# Greenの環境(v2)を作成 $ eb create my-env-green \ --region ap-northeast-1 \ --elb-type application \ --instance-types t3.small # Green環境へデプロイして動作確認後、CNAMEをBlueとSwap $ eb swap my-env --destination_name my-env-green

eb swap は2つの環境のCNAMEを瞬時に交換します。問題が発生した場合はもう一度 eb swap を実行するだけでロールバックできます。

マルチAZ構成とAuto Scalingの設計

単一AZ構成では、そのAZに障害が発生すると全インスタンスが停止します。本番環境では必ず複数AZに分散させます。

1. 複数AZ設定

# .ebextensions/autoscaling.config option_settings: aws:autoscaling:asg: MinSize: 2 MaxSize: 4 Availability Zones: Any 2 aws:autoscaling:trigger: MeasureName: CPUUtilization Unit: Percent UpperThreshold: 70 LowerThreshold: 30 UpperBreachScaleIncrement: 1 LowerBreachScaleIncrement: -1

`Availability Zones: Any 2` は「任意の2つのAZを使う」指定です。`Any 3` にすれば3AZ冗長になります。`MinSize: 2` と組み合わせることで、最低でも2つのインスタンスが別AZに配置されます。

2. ヘルスチェックの閾値設定

Auto Scalingの動作に影響するヘルスチェックも設定します。

option_settings: aws:elasticbeanstalk:environment:process:default: HealthCheckPath: /health HealthCheckInterval: 30 HealthyThresholdCount: 3 UnhealthyThresholdCount: 5

`/health` エンドポイントで HTTP 200 を返せる実装をアプリ側に用意してください。デフォルトの `/` に対するヘルスチェックは、リダイレクトや認証が入っているとUnhealthyになりやすいため注意が必要です。

VPC・サブネット・セキュリティグループとの統合設計

Elastic Beanstalkをデフォルトで作成すると、AWSのデフォルトVPCのパブリックサブネットにEC2が配置されます。本番環境では既存のVPCのプライベートサブネットにEC2を配置し、ALBだけパブリックサブネットに置く設計が標準的です。

1. VPCを指定してeb createする

$ eb create my-env-prod \ --vpc.id vpc-0a1b2c3d4e5f6a7b8 \ --vpc.ec2subnets subnet-priv-1a,subnet-priv-1c \ --vpc.elbsubnets subnet-pub-1a,subnet-pub-1c \ --vpc.elbpublic \ --vpc.publicip false \ --elb-type application \ --instance-types t3.medium \ --region ap-northeast-1

オプションの意味は以下のとおりです。

--vpc.id: 配置先VPCのID
--vpc.ec2subnets: EC2を配置するプライベートサブネットのID(カンマ区切りで複数AZ分指定)
--vpc.elbsubnets: ALBを配置するパブリックサブネットのID(カンマ区切りで複数AZ分指定)
--vpc.elbpublic: ALBにパブリックIPを割り当て(インターネット向け)
--vpc.publicip false: EC2にパブリックIPを割り当てない(プライベート配置)

`--vpc.ec2subnets` と `--vpc.elbsubnets` に複数AZのサブネットIDを指定することで、EC2とALBがそれぞれマルチAZに分散配置されます。

2. セキュリティグループの分離設計

セキュリティグループは「ALB用」と「EC2用」を分離して作成し、EC2はALBのSGからのみポートを許可する設計にします。

# .ebextensions/securitygroups.config option_settings: aws:autoscaling:launchconfiguration: SecurityGroups: sg-ec2-for-beanstalk aws:elbv2:loadbalancer: SecurityGroups: sg-alb-for-beanstalk

sg-ec2-for-beanstalk のインバウンドルールは「sg-alb-for-beanstalk からのポート8080のみ許可」にすることで、EC2をALB経由のみでアクセス可能にします。

AWSのVPC基礎から習得したい方は、AWSマスターセミナー初級編で体系的に学べます。VPCのサブネット設計・ルーティング・NAT Gatewayまでハンズオンで習得できる内容です。

カスタムAMIとプラットフォームの活用

Elastic Beanstalkではデフォルトで用意されたAmazon Linux 2023ベースのAMIを使いますが、カスタムAMIを使うことで初期化時間の短縮・セキュリティ設定の統一が実現できます。

1. カスタムAMIを指定する

option_settings: aws:autoscaling:launchconfiguration: ImageId: ami-0abc1234567890def

カスタムAMIはElastic Beanstalkの標準AMIをベースに作成します。Elastic BeanstalkのエージェントやSSMエージェントが含まれているAMIでないと、環境の管理が正常に動作しない点に注意してください。

2. eb platform listでプラットフォームを確認する

利用可能なプラットフォームのARNは eb platform list で確認できます。

$ eb platform list --region ap-northeast-1 2>&1 | grep "Python 3.11" arn:aws:elasticbeanstalk:ap-northeast-1::platform/Python 3.11 running on 64bit Amazon Linux 2023/4.0.8

eb create や eb upgrade で `--platform` オプションに上記ARNを指定することで、特定のプラットフォームバージョンに固定できます。

トラブルシュート(デプロイ失敗・ヘルスチェック異常の対処)

1. eb logsでエラーを確認する

デプロイ失敗時はまず eb logs でログを取得します。

$ eb logs my-env ============= i-0a1b2c3d4e5f6a7b8 ============== /var/log/eb-engine.log ----- [2026-09-19T06:32:00.000Z] INFO [PID 1234] - Executing deployment script. [2026-09-19T06:32:15.000Z] ERROR [PID 1234] - Command failed: /var/app/staging/.platform/hooks/prebuild/01_setup.sh [2026-09-19T06:32:15.000Z] ERROR [PID 1234] - Error: command failed with exit code 1 /var/log/web.stdout.log ----- ModuleNotFoundError: No module named 'requests'

この例では `requirements.txt` に `requests` が書かれていなかったことが原因です。

2. よくある失敗パターンと対処

ヘルスチェック失敗(Degraded/Severe): アプリが `HealthCheckPath` に HTTP 200 を返しているか確認する。起動に時間がかかるアプリでは `HealthCheckInterval` と `UnhealthyThresholdCount` を増やす
Command failed (exit code 1): `.platform/hooks/` に置いたシェルスクリプトのパーミッション(chmod +x)や構文エラーを確認する
timeout during deployment: `aws:elasticbeanstalk:command` の `Timeout` パラメータ(デフォルト600秒)を延ばす
No healthy instances in the auto scaling group: セキュリティグループのインバウンドルールでALBからEC2の通信ポートが許可されているか確認する

3. eb healthで詳細ステータスを確認する

$ eb health my-env --refresh id status cause ────────────────────────────────────────────────────────────────── i-0a1b2c3d4e5f Ok - i-0f9e8d7c6b5a Ok -

インスタンス単位のヘルスステータスを確認できます。特定のインスタンスだけ Degraded の場合、そのインスタンスのログを重点的に調べます。

本記事のまとめ

やりたいこと コマンドまたは設定
EB CLIをインストールする pip3 install awsebcli --upgrade
アプリを初期化する eb init
ALB付き環境を作成する eb create 環境名 --elb-type application
ローリングデプロイを設定する .ebextensions/deploy.config の DeploymentPolicy: Rolling
マルチAZ構成にする .ebextensions/autoscaling.config の Availability Zones: Any 2
既存VPCに配置する eb create --vpc.id / --vpc.ec2subnets / --vpc.elbsubnets
Blue/Greenデプロイを実施する eb swap 元環境 --destination_name 新環境
デプロイ失敗の原因を調べる eb logs 環境名
インスタンスのヘルスを確認する eb health 環境名 --refresh

Elastic Beanstalkの設計は、AWSインフラの「型」を知っていれば迷わない

Elastic Beanstalkの設定を正しく組むには、VPC・サブネット・セキュリティグループ・Auto ScalingといったAWSインフラの基本設計を理解していることが前提になります。独学で断片的に覚えるより、現場で実際に使われる設計パターンを一度体系的に身につけることで、トラブルなく本番運用できるようになります。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、AWSを含む現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。