0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2からECSへの移行で変わること・変わらないこと完全ガイド

Posted at

はじめに

AWSのEC2からECSへの移行を検討している方向けに、実際の運用作業がどのように変わるのか、どこが変わらないのかを詳しくまとめました。

Railsアプリケーションの移行を想定していますが、他のアプリケーションでも参考になる内容です。

移行による作業変化の全体像

項目 現状(EC2) ECS移行後 備考
デプロイ Capistrano CodeBuild → ECRプッシュ → ECSサービス更新 ビルド時間は増加するが自動化レベル向上
ロールバック currentリンク変更(数秒) 前タスク定義でサービス更新(1-3分) Circuit Breakerで自動ロールバック可能
コンテナ内作業 SSH直接アクセス aws ecs execute-command ECS Exec有効化が必要
マイグレート/Rake SSH → 直接実行 aws ecs execute-command ECS Exec有効化が必要
コンソール実行 SSH → rails console ECS Exec → rails console アクセス方法のみ変更
新ツール導入 サーバーに直接インストール Dockerfile修正 → ビルド 全環境で確実に同じ構成
台数変更 AutoScaling Group画面 ECS Service画面 より簡単で即効性あり
AutoScaling CloudWatch CPU → ASG CloudWatch CPU → ECS Service 同様の仕組み、スケール速度は向上
メインテナンス ALB weight調整
DB接続 bastion経由SSH
ログ監視 直接ファイルアクセス CloudWatch Logs + fluentd ログ集約が向上
NewRelic エージェント直接インストール コンテナ内またはサイドカー 設定方法が変わるが機能は同等
環境変数 環境ファイル直接編集 タスク定義 or Parameter Store より安全な管理が可能
Rubyバージョンアップ rbenv install → global設定 Dockerfileのベースイメージ変更 方法は変わるが工数は同等
Railsバージョンアップ Gemfile修正 → bundle update Gemfile修正 → コンテナビルド bundleがビルド時に移行
Gemアップデート bundle update → 再起動 Gemfile修正 → コンテナビルド bundleがビルド時に移行
接続監視 auditd → audit.log確認 CloudTrailでECS Exec監視 CloudTrailでAPI実行監視
ファイル差分検証 auditd → 改ざん検知 サイドカーコンテナの利用 セキュリティツールのサイドカー実装

詳細解説

デプロイとロールバック

EC2時代のCapistranoによるデプロイは、リリースディレクトリを作成してcurrentシンボリックリンクを切り替える方式でした。ロールバックも瞬時に完了します。

# EC2でのロールバック(数秒)
cap production deploy:rollback

ECS移行後は、CodeBuildでコンテナイメージをビルドし、ECSサービスを更新する方式に変わります。

# ECSでのロールバック(1-3分)
aws ecs update-service --service myapp --task-definition myapp:123

Circuit Breakerを有効にすることで、デプロイ失敗時の自動ロールバックが可能です。

deploymentConfiguration:
  deploymentCircuitBreaker:
    enable: true
    rollback: true

コンテナ内での作業

SSH接続から ECS Exec への変更が最も大きな違いです。

# EC2時代
ssh user@server
rails console

# ECS移行後
aws ecs execute-command \
  --cluster cluster-name \
  --task task-id \
  --container container-name \
  --command "/bin/bash" \
  --interactive

# コンテナ内で
rails console

マイグレートやRakeタスクも同様にECS Exec経由で実行します。

AutoScaling

CloudWatchメトリクスを使用したスケーリングは同様に利用可能ですが、より高速になります。

# ECS Service Auto Scaling設定例
aws application-autoscaling put-scaling-policy \
  --policy-name cpu-scaling \
  --service-namespace ecs \
  --scalable-dimension ecs:service:DesiredCount \
  --resource-id service/cluster-name/service-name \
  --policy-type TargetTrackingScaling \
  --target-tracking-scaling-policy-configuration '{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ECSServiceAverageCPUUtilization"
    }
  }'

バージョンアップ作業

Rubyバージョンアップは、rbenvでの管理からDockerfileのベースイメージ変更になります。

# 変更前
FROM ruby:3.1

# 変更後
FROM ruby:3.2

Rails/Gemのアップデートは基本的に同じ手順ですが、bundle処理がビルド時に実行されます。

セキュリティ監視

システムauditの考え方が大きく変わります。

  • SSH接続監視: auditdログ確認 → CloudTrailでECS Exec監視
  • ファイル改ざん検知: auditdによる監視 → サイドカーコンテナでのセキュリティツール実装

イミュータブルなコンテナでは、実行時のファイル改ざんリスクが大幅に削減されます。

変わらないもの

データベース接続

SequelProなどのDBクライアントツールは、bastionサーバー経由のSSH接続設定をそのまま利用できます。

SequelPro → bastion(SSH) → RDS

メインテナンスモード

ALBのweight調整による段階的なメンテナンスは、ECSでも同様に実行できます。

複数ログ出力

Railsアプリケーションが出力する複数のログファイルは、CloudWatch Logs + fluentdサイドカーで問題なく処理できます。

移行のメリット

1. 運用の自動化

  • 一貫したビルドプロセス: CodeBuildによる標準化
  • 自動ロールバック: Circuit Breakerによる障害時の自動復旧

2. 環境の一貫性

  • 開発・本番環境の統一: Dockerコンテナによる環境差分の排除
  • 予期しない変更の防止: イミュータブルインフラによる安定性向上

3. スケーラビリティの向上

  • 高速なスケール: コンテナ起動によるEC2インスタンス起動より高速な処理
  • きめ細かな制御: CPU・メモリ使用率に基づく柔軟なスケーリング

4. 監視の向上

  • ログ集約: CloudWatch Logsによる一元管理
  • API監視: CloudTrailによるECS操作の追跡

移行時の注意点

1. デプロイ時間

コンテナイメージのビルド時間により、デプロイ時間が増加する可能性があります。

2. 学習コスト

ECS ExecやCodeBuildなど、新しいツールセットへの習熟が必要です。

3. ミドルウェアのバージョン管理

Dockerfileでのバージョン固定が重要です。

# ❌ 危険
FROM ubuntu:latest

# ✅ 推奨
FROM ubuntu:20.04
RUN apt-get install postgresql-client=12.9-0ubuntu0.20.04.1

まとめ

EC2からECSへの移行は、運用作業の本質は変わらず自動化とインフラの安定性が大幅に向上します。

特に重要なポイント:

  • デプロイ・ロールバックは時間が増加するが、信頼性が向上
  • SSH接続からECS Execへの変更は必要だが、作業内容は同等
  • セキュリティ監視はより簡素で効果的になる
  • データベース接続や基本的な運用手順は変更不要

移行を検討されている方の参考になれば幸いです。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?