MENU

【AWS】EC2からECS Fargateへの移行ガイド — ダウンタイムゼロを目指す実践手順

EC2で運用しているWebアプリケーションをECS Fargateに移行したい — そんな要望は増えています。サーバー管理から解放され、スケーリングも容易になるECS Fargateですが、移行時にはいくつかの落とし穴があります。この記事では、ダウンタイムを最小限にしながら移行する手順を解説します。

目次

移行前に確認すべきこと

まず現行のEC2環境を棚卸しします。以下のポイントを確認してください。

アプリケーションの依存関係 — ローカルファイルシステムへの書き込み、cronジョブ、特殊なOS設定など、コンテナ化の障壁になるものを洗い出します。

セッション管理 — EC2上でファイルベースのセッションを使っている場合、ElastiCache(Redis)やDynamoDBに移行が必要です。

ログの出力先 — コンテナでは標準出力にログを出すのが基本です。ファイルに書いている場合はアプリの修正が必要です。

Dockerfileの作成

PHPアプリケーション(Apache)の典型的なDockerfileの例です。

FROM php:8.3-apache

# 必要なPHP拡張をインストール
RUN docker-php-ext-install pdo pdo_mysql opcache

# Apache mod_rewrite有効化
RUN a2enmod rewrite headers

# php.ini設定
COPY ./docker/php.ini /usr/local/etc/php/conf.d/custom.ini

# アプリケーションコードをコピー
COPY ./src /var/www/html/

# ヘルスチェック用
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f https://cloudmemos.blog/ || exit 1

EXPOSE 80

ECSタスク定義のポイント

{
  "family": "webapp",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "containerDefinitions": [
    {
      "name": "app",
      "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/webapp:latest",
      "portMappings": [
        {
          "containerPort": 80,
          "protocol": "tcp"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/webapp",
          "awslogs-region": "ap-northeast-1",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "environment": [
        { "name": "APP_ENV", "value": "production" }
      ],
      "secrets": [
        {
          "name": "DB_PASSWORD",
          "valueFrom": "arn:aws:ssm:ap-northeast-1:123456789012:parameter/production/db_password"
        }
      ]
    }
  ]
}

ALBでの切り替え戦略

ダウンタイムゼロの移行には、ALB(Application Load Balancer)の加重ターゲットグループを活用します。

手順としては、まずEC2のターゲットグループ(重み100%)で稼働している状態から始めます。次にECS Fargateのターゲットグループを追加し重み0%に設定します。動作確認後、ECSの重みを10%→50%→100%と段階的に引き上げ、最終的にEC2ターゲットグループを削除します。

# ALBリスナールールで加重ルーティング
aws elbv2 modify-rule \
  --rule-arn arn:aws:elasticloadbalancing:... \
  --actions '[
    {
      "Type": "forward",
      "ForwardConfig": {
        "TargetGroups": [
          {"TargetGroupArn": "arn:...ec2-tg", "Weight": 50},
          {"TargetGroupArn": "arn:...ecs-tg", "Weight": 50}
        ]
      }
    }
  ]'

移行後のチェックリスト

移行が完了したら、CloudWatch Logsでエラーログを監視し、ALBのターゲットヘルスを確認します。ECSサービスのDesired CountとRunning Countが一致しているか確認し、Auto Scalingポリシーの動作テストも忘れずに行いましょう。最後に、旧EC2インスタンスを即削除せず1〜2週間は残しておくと安心です。

まとめ

EC2からECS Fargateへの移行は、準備さえしっかりすればスムーズに進みます。ALBの加重ルーティングを使えばダウンタイムゼロも実現可能です。移行後はサーバーのパッチ当てやOSアップデートから解放されるので、アプリケーション開発に集中できるようになります。

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

この記事を書いた人

コメント

コメントする

目次