💻

【AWS】dockerやcronが稼働中のEC2のインスタンスタイプを変更した話

に公開

はじめに

AWS EC2のインスタンスタイプを変更する方法の記事はたくさん出てきますが、
主要で動かしているプロセスもきちんと維持されるか、など実務レベルでは意外と書かれていない記事が多かったため、備忘録として記載します。

dockerで何か動かしている場合

例えば以下は適当ですが何かしらdockerで起動しているものがあるとします。
これがインスタンスタイプの変更後に自動で上がるのか、分からないと気になりますよね。

[root@ip-10-1-1-10 ec2-user]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS          PORTS     NAMES
79dbb0025ba4   anythingimage:latest   "/usr/bin/anycommand…"   6 months ago   Up 6 months               anything_container

以下のコマンドで、dockerサービスが自動起動するようになっていれば、
変更後も自動で上がってくることが分かりました。

[root@ip-10-1-1-10 ec2-user]# systemctl is-enabled docker
enabled

実際にインスタンスタイプを変更した後も、以下のように自動でUpと表示されていることを確認できました。

[root@ip-10-1-1-10 ec2-user]# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                PORTS     NAMES
79dbb0025ba4   anythingimage:latest   "/usr/bin/anycommand…"   6 months ago   Up About a minute               anything_container

cronで何か動かしている場合

例えば以下のように定期的にcron.shを実行している環境があるとしましょう。
これもインスタンスタイプの変更をしたあと、起動しても設定は生きているのでしょうか?

[root@ip-10-1-1-10 ec2-user]# crontab -l
0 * * * * /root/bin/cron.sh >/dev/null 2>&1

OSの種類など様々なケースがあると思うので、
なぜ今回は設定が維持されたのか、を少し深堀りしてみました。

今回検証しているosは以下の通りです。

[root@ip-10-1-1-10 ec2-user]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2023"
...(※略)

設定が生きているか?の答えはYesだったのですが、
理由はマウントさせているEBSにその設定が残っていたからです。

例えば以下のように50GのEBSボリュームが/にマウントされている状況だとします。

[root@ip-10-1-1-10 ec2-user]# lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1       259:0    0  50G  0 disk
├─nvme0n1p1   259:2    0  50G  0 part /
├─nvme0n1p127 259:3    0   1M  0 part
└─nvme0n1p128 259:4    0  10M  0 part /boot/efi

crontab -lで得られるcronの情報は、以下に保管されています。
それがEBS内にあるため、インスタンスが変わっても同じdiskの内容を参照しているので設定が残っているということです。

[root@ip-10-1-1-10 ec2-user]# sudo cat /var/spool/cron/root
0 * * * * /root/bin/cron.sh >/dev/null 2>&1

ですので、インスタンスタイプを変更するときは、
概ね状態は維持されるケースが多いとは思いますが、
必要なものがどこに保存されていて、起動したときに自動で立ち上がるのかどうか?といった情報をきちんと整理しておくことが重要だと感じました。

EC2のインスタンスタイプを変更する手順

実際にインスタンスタイプを変更する手順について、既存の記事がたくさんありますが、せっかくですので簡単に記載いたします。

まずはインスタンスタイプを変更したいインスタンスにチェックを入れ、「インスタンスの状態」から「インスタンスの停止」を選択します。
ec2-01

確認が出ますので、このまま「停止」を選択します。
ec2-02

完全に停止すると、以下のように「インスタンスの状態」→「インスタンスの設定」→「インスタンスタイプを変更」を選択できるようになります。
ec2-03

変更できるのは同じアーキテクチャのインスタンスです。
変更後、スペックや価格がどのように変更されるのか案内表示してくれます。
内容を確認して、「インスタンスタイプを変更」を選択します。
ec2-04

変更後、忘れずに「インスタンスの状態」から「インスタンスを開始」を選択します。
ec2-05

おわりに

意外とEC2インスタンスタイプを変更する機会がなかったため、備忘録として記載しました。
古いインスタンスタイプで動いている場合、似たスペックでも高性能で安いインスタンスに変更できるケースは少なくないと思うので、
本記事でちょっと気になったら参考になれば幸いです。

ここまで読んでいただきありがとうございました。

Discussion