𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
AWS Elastic Beanstalk入門|SESエンジニアのためのPaaS活用ガイド【2026年版】

AWS Elastic Beanstalk入門|SESエンジニアのためのPaaS活用ガイド【2026年版】

AWSElastic BeanstalkPaaSデプロイSES
目次

「EC2のインフラ管理に時間を取られすぎている」——そんなSESエンジニアにとって、Elastic Beanstalkは最適な選択肢です。

AWS Elastic Beanstalkは、インフラの構築・管理を自動化しながら、アプリケーションのデプロイに集中できるPaaS(Platform as a Service)です。 本記事では、SES案件で求められるElastic Beanstalkのスキルを基礎から実践まで解説します。

この記事を3秒でまとめると

  • Elastic BeanstalkはEC2・ALB・RDSなどのインフラを自動構築するAWSのPaaS
  • Blue/Green デプロイ、Auto Scaling、ヘルスモニタリングを標準で提供
  • SES案件ではWebアプリ・API開発の基盤として需要が高い

Elastic Beanstalkとは何か

PaaSとしての位置づけ

Elastic Beanstalk(EB)は、AWSが提供するPaaSです。EC2を直接管理する「IaaS」と、サーバーレスの「FaaS(Lambda)」の中間に位置します。

  • IaaS(EC2直接管理): インフラの完全制御が可能だが、管理負荷が高い
  • PaaS(Elastic Beanstalk): アプリのデプロイに集中でき、インフラは自動管理
  • FaaS(Lambda): サーバー管理不要だが、実行時間やランタイムに制約がある

EBは「インフラの自動管理」と「カスタマイズ性」を両立しており、SES案件で最も採用されやすいデプロイ方式の一つです。

サポートされるプラットフォーム

Elastic Beanstalkは以下のプラットフォームをサポートしています。

プラットフォームバージョン例用途
Node.js20, 22Web API、SSR
Python3.11, 3.12Django、FastAPI
Java17, 21Spring Boot
.NET8.0ASP.NET Core
Go1.21, 1.22REST API
PHP8.2, 8.3Laravel
Ruby3.2, 3.3Rails
Dockerマルチコンテナ対応任意のランタイム

Elastic Beanstalkのアーキテクチャ全体像

環境構築のステップバイステップ

EB CLIのインストール

# EB CLIのインストール(pipx推奨)
pipx install awsebcli

# バージョン確認
eb --version

# AWS認証情報の確認
aws sts get-caller-identity

プロジェクトの初期化

# プロジェクトディレクトリで初期化
eb init

# 対話形式での設定
# 1. リージョン選択: ap-northeast-1(東京)
# 2. アプリケーション名: my-web-app
# 3. プラットフォーム: Node.js 20
# 4. CodeCommit連携: No
# 5. SSH: Yes(デバッグ用)

環境の作成

# 環境作成(Web Server環境)
eb create my-app-production \
  --instance_type t3.small \
  --region ap-northeast-1 \
  --elb-type application \
  --vpc.id vpc-xxxxxxxx \
  --vpc.ec2subnets subnet-private-a,subnet-private-b \
  --vpc.elbsubnets subnet-public-a,subnet-public-b \
  --vpc.securitygroups sg-xxxxxxxx \
  --database.engine postgres \
  --database.instance db.t3.micro \
  --database.size 20 \
  --envvars NODE_ENV=production,PORT=8080

.ebextensions での環境カスタマイズ

.ebextensions ディレクトリに設定ファイルを配置することで、環境を細かくカスタマイズできます。

# .ebextensions/01-nginx.config
files:
  "/etc/nginx/conf.d/proxy.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      upstream nodejs {
        server 127.0.0.1:8080;
        keepalive 256;
      }
      
      server {
        listen 80;
        
        # ヘルスチェック用
        location /health {
          proxy_pass http://nodejs;
          proxy_http_version 1.1;
          proxy_set_header Connection "";
        }

        # gzip圧縮
        gzip on;
        gzip_comp_level 4;
        gzip_types text/plain text/css application/json application/javascript text/xml;
        
        # セキュリティヘッダー
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

        location / {
          proxy_pass http://nodejs;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Proto $scheme;
        }

        # 静的ファイルのキャッシュ
        location /static/ {
          alias /var/app/current/public/;
          expires 30d;
          add_header Cache-Control "public, immutable";
        }
      }
# .ebextensions/02-packages.config
packages:
  yum:
    postgresql-devel: []

commands:
  01_timezone:
    command: "ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime"
# .ebextensions/03-autoscaling.config
option_settings:
  aws:autoscaling:asg:
    MinSize: 2
    MaxSize: 8
    
  aws:autoscaling:trigger:
    MeasureName: CPUUtilization
    Statistic: Average
    Unit: Percent
    UpperThreshold: 70
    LowerThreshold: 30
    UpperBreachScaleIncrement: 2
    LowerBreachScaleIncrement: -1
    
  aws:elasticbeanstalk:environment:
    ServiceRole: aws-elasticbeanstalk-service-role
    
  aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced

デプロイ戦略

デプロイポリシーの選択

Elastic Beanstalkは複数のデプロイポリシーを提供しています。

ポリシーダウンタイムデプロイ速度ロールバック追加コスト
All at onceあり最速手動再デプロイなし
Rollingなし中速手動再デプロイなし
Rolling with additional batchなし中速手動再デプロイ一時的
Immutableなし低速自動(新インスタンス削除)一時的
Blue/Greenなし中速DNS切替常時2環境

Blue/Green デプロイの実装

本番環境では、ゼロダウンタイムのBlue/Greenデプロイが推奨です。

# 新しい環境(Green)の作成
eb create my-app-green \
  --instance_type t3.small \
  --cname my-app-green \
  --envvars NODE_ENV=production

# Greenへのデプロイ
eb deploy my-app-green

# ヘルスチェックの確認
eb health my-app-green

# CNAMEスワップ(Blue → Green に切替)
eb swap my-app-production --destination_name my-app-green

# 旧環境(Blue)の削除(問題なければ)
eb terminate my-app-blue

Immutable デプロイの設定

# .ebextensions/04-deploy.config
option_settings:
  aws:elasticbeanstalk:command:
    DeploymentPolicy: Immutable
    HealthCheckSuccessThreshold: Ok
    IgnoreHealthCheck: false
    Timeout: 600
    
  aws:elasticbeanstalk:managedactions:
    ManagedActionsEnabled: true
    PreferredStartTime: "Tue:09:00"
    
  aws:elasticbeanstalk:managedactions:platformupdate:
    UpdateLevel: minor
    InstanceRefreshEnabled: true

環境変数とシークレット管理

環境変数の設定

# 個別設定
eb setenv DATABASE_URL=postgresql://user:pass@host:5432/db
eb setenv REDIS_URL=redis://host:6379
eb setenv API_KEY=your-api-key

# 一括設定
eb setenv \
  DATABASE_URL=postgresql://user:pass@host:5432/db \
  REDIS_URL=redis://host:6379 \
  NODE_ENV=production \
  LOG_LEVEL=info

AWS Secrets Managerとの連携

機密情報はSecrets Managerで管理し、EBから安全にアクセスします。

# .ebextensions/05-secrets.config
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/01_fetch_secrets.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash
      # Secrets Managerから環境変数を設定
      SECRET=$(aws secretsmanager get-secret-value \
        --secret-id my-app/production \
        --query SecretString \
        --output text \
        --region ap-northeast-1)
      
      # 環境変数ファイルに書き出し
      echo "$SECRET" | jq -r 'to_entries[] | "\(.key)=\(.value)"' > /opt/elasticbeanstalk/deployment/env

AWS Secrets Managerガイドで、シークレット管理の詳細を解説しています。

モニタリングとアラート

Enhanced Health Reportingの活用

# .ebextensions/06-monitoring.config
option_settings:
  aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced
    
  aws:elasticbeanstalk:cloudwatch:logs:
    StreamLogs: true
    DeleteOnTerminate: false
    RetentionInDays: 14
    
  aws:elasticbeanstalk:cloudwatch:logs:health:
    HealthStreamingEnabled: true
    DeleteOnTerminate: false
    RetentionInDays: 7

CloudWatchアラームの設定

Resources:
  CPUAlarmHigh:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: "CPU使用率が80%を超えました"
      MetricName: CPUUtilization
      Namespace: AWS/EC2
      Statistic: Average
      Period: 300
      EvaluationPeriods: 2
      Threshold: 80
      ComparisonOperator: GreaterThanThreshold
      AlarmActions:
        - !Ref NotificationTopic
        
  HealthyHostAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmDescription: "正常なホスト数が閾値を下回りました"
      MetricName: HealthyHostCount
      Namespace: AWS/ApplicationELB
      Statistic: Minimum
      Period: 60
      EvaluationPeriods: 2
      Threshold: 1
      ComparisonOperator: LessThanOrEqualToThreshold
      AlarmActions:
        - !Ref NotificationTopic
        
  NotificationTopic:
    Type: AWS::SNS::Topic
    Properties:
      Subscription:
        - Endpoint: [email protected]
          Protocol: email

ログの確認

# 最新ログの取得
eb logs

# 特定の環境のログ
eb logs --environment my-app-production

# リアルタイムログ(ストリーミング)
eb logs --stream

# CloudWatch Logsでの検索
aws logs filter-log-events \
  --log-group-name /aws/elasticbeanstalk/my-app-production/var/log/web.stdout.log \
  --filter-pattern "ERROR" \
  --start-time $(date -v-1H +%s000)

AWS CloudWatchモニタリングガイドも参考にしてください。

パフォーマンスチューニング

インスタンスタイプの選定

SES案件でよく使われるインスタンスタイプの選定ガイドです。

ユースケース推奨インスタンス理由
開発・ステージングt3.smallコスト重視、バースト対応
小規模Webアプリt3.mediumバランス型
API サーバーc6g.largeCPU重視(Graviton)
メモリ集約型r6g.largeメモリ重視(キャッシュ多用)
大規模本番c6g.xlarge高パフォーマンス

Auto Scalingの最適化

# .ebextensions/07-autoscaling-advanced.config
option_settings:
  aws:autoscaling:asg:
    MinSize: 2
    MaxSize: 10
    Cooldown: 300
    
  aws:autoscaling:trigger:
    MeasureName: CPUUtilization
    Statistic: Average
    Unit: Percent
    Period: 1
    BreachDuration: 3
    UpperThreshold: 70
    UpperBreachScaleIncrement: 2
    LowerThreshold: 30
    LowerBreachScaleIncrement: -1

Resources:
  AWSEBAutoScalingGroup:
    Type: AWS::AutoScaling::AutoScalingGroup
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300
      
  # リクエスト数ベースのスケーリングポリシー
  RequestCountScaleUp:
    Type: AWS::AutoScaling::ScalingPolicy
    Properties:
      AutoScalingGroupName: !Ref AWSEBAutoScalingGroup
      PolicyType: TargetTrackingScaling
      TargetTrackingConfiguration:
        PredefinedMetricSpecification:
          PredefinedMetricType: ALBRequestCountPerTarget
          ResourceLabel: !GetAtt AWSEBLoadBalancer.LoadBalancerFullName
        TargetValue: 1000

CI/CDパイプラインの構築

GitHub Actionsとの連携

# .github/workflows/deploy.yml
name: Deploy to Elastic Beanstalk

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - name: Install dependencies
        run: npm ci
        
      - name: Run tests
        run: npm test
        
      - name: Build
        run: npm run build
        
      - name: Generate deployment package
        run: |
          zip -r deploy.zip . \
            -x "node_modules/*" \
            -x ".git/*" \
            -x "tests/*" \
            -x ".github/*"
      
      - name: Deploy to EB
        uses: einaregilsson/beanstalk-deploy@v22
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          application_name: my-web-app
          environment_name: my-app-production
          version_label: ${{ github.sha }}
          region: ap-northeast-1
          deployment_package: deploy.zip
          wait_for_environment_recovery: 120

AWS CodePipeline CI/CDガイドで、AWSネイティブのCI/CDパイプラインも解説しています。

トラブルシューティング

よくある問題と解決策

1. デプロイ失敗:ヘルスチェックタイムアウト

# ヘルスチェックの確認
eb health --refresh

# プロセスの確認
eb ssh
ps aux | grep node
curl -v http://localhost:8080/health

原因の多くは、アプリがヘルスチェックポートでリッスンしていないことです。Procfileで正しいポートを指定してください。

# Procfile
web: node dist/server.js

2. 環境変数が反映されない

# 現在の設定確認
eb printenv

# 設定の再適用
eb config --update

3. ストレージ不足

# .ebextensions/08-storage.config
option_settings:
  aws:autoscaling:launchconfiguration:
    RootVolumeType: gp3
    RootVolumeSize: 30
    RootVolumeIOPS: 3000
    RootVolumeThroughput: 125

SES案件でのElastic Beanstalk活用

求められるスキルセット

SES案件でElastic Beanstalkを扱う場合、以下のスキルが求められます。

  • 基本: EB CLIの操作、環境構築、デプロイ
  • 中級: Blue/Greenデプロイ、Auto Scaling設定、.ebextensionsカスタマイズ
  • 上級: Docker対応、マルチコンテナ、VPC設計、CI/CD構築

EB vs ECS vs EKS の選定基準

基準Elastic BeanstalkECS FargateEKS
学習コスト低い中程度高い
カスタマイズ性中程度高い非常に高い
運用負荷低い中程度高い
スケーラビリティ中程度高い非常に高い
適するチーム規模1〜10名5〜50名10名以上
月額コスト目安$50〜$500$100〜$1000$200〜$5000

AWS ECS Fargate ガイドAWS EKS ガイドも参考にしてください。

まとめ:Elastic BeanstalkでSES案件の幅を広げる

Elastic Beanstalkは「インフラ管理の自動化」と「アプリケーション開発への集中」を両立するAWSのPaaSです。

  • 簡単なデプロイ: eb deploy 一つで本番環境にデプロイ
  • 自動スケーリング: トラフィックに応じたインスタンス数の自動調整
  • ゼロダウンタイム: Blue/Green デプロイとImmutableデプロイをサポート
  • 充実したモニタリング: Enhanced Health Reporting と CloudWatch連携

SESエンジニアにとって、Elastic BeanstalkはAWS案件の入り口として最適なサービスです。EB での経験を基盤に、ECS/EKSなどのコンテナサービスへステップアップしていきましょう。


AWSシリーズの他の記事も読む

👉 AWS入門ガイド 👉 AWS ECS Fargate ガイド 👉 AWS CodePipeline CI/CDガイド 👉 SES BASEで案件を探す

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修