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?

個人的備忘録:ECS Exec を使ってコンテナ内で DB マイグレーションを行う方法をまとめてみた

Posted at

はじめに

ECS Exec を活用することで、ECS のデプロイを変更することなく、手動でコンテナ内に入りデータベースのマイグレーションを実行できます。

本記事では、その手順を詳しく解説します。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

書こうと思ったきっかけ

最近、ECS で運用されているアプリケーションのデータベースマイグレーションを実施する機会がありました。

その際、デプロイの手順を変更せずに手軽に実施できる方法として ECS Exec を活用しました。

この経験を基に、ECS Exec を使った手動マイグレーションの方法を共有したいと思い、この記事を書きました。

ECS Exec を使って手動マイグレーションを実行する手順

1. ECS Exec の事前設定

ECS Exec を利用して手動でマイグレーションを行うために、以下の事前設定を行います。

(1) ECS Exec が有効化されているか確認

ECS Exec を使用するには、タスク定義の enableExecuteCommandtrue になっている必要があります。以下のコマンドで有効化できます。

ECS サービスを更新する場合:

aws ecs update-service --cluster your-cluster \
  --service your-service \
  --enable-execute-command

タスク起動時に設定する場合:

aws ecs run-task --cluster your-cluster \
  --task-definition your-task \
  --enable-execute-command

(2) 必要な IAM ポリシーを付与

ECS Exec を利用するには、IAM ロールに以下のポリシーを追加します。

{
  "Effect": "Allow",
  "Action": [
    "ecs:ExecuteCommand",
    "ssm:StartSession",
    "ssm:SendCommand",
    "ssm:GetCommandInvocation"
  ],
  "Resource": "*"
}

2. 実行中の ECS タスクに接続

まず、現在実行中のコンテナを確認します。

aws ecs list-tasks --cluster your-cluster

例:

{
  "taskArns": [
    "arn:aws:ecs:region:account-id:task/your-cluster/task-id"
  ]
}

この task-id を使用して、コンテナに接続します。

aws ecs execute-command \
  --cluster your-cluster \
  --task task-id \
  --container your-container-name \
  --interactive \
  --command "/bin/sh"

これで ECS コンテナのシェルに入ることができます。

3. コンテナ内でマイグレーションを実行

ECS コンテナ内で、アプリケーションに応じたマイグレーションコマンドを実行します。

Django(Python)

python manage.py migrate

Flask(Alembic)

flask db upgrade

Node.js(TypeORM / Sequelize)

npx sequelize-cli db:migrate  # Sequelize
typeorm migration:run  # TypeORM

4. 接続を終了

マイグレーションが完了したら、以下のコマンドでコンテナシェルを終了します。

exit

まとめ

  • ECS Exec を有効化
  • タスク一覧を取得し、実行中のコンテナを特定
  • aws ecs execute-command でコンテナに接続
  • マイグレーションコマンドを実行
  • 完了後に exit で終了

この方法を使えば、ECS のデプロイを変更せずに簡単に手動でマイグレーションを実行できます!

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?