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アップデートから解放されるので、アプリケーション開発に集中できるようになります。

コメント