とあるお客様にて4年以上使用しているEC2のM3インスタンス。
C5、M5のインスタンスが使用できるようになったのを機に、費用削減と性能アップの観点からインスタンスタイプ変更の依頼を受け、対応させていただいた記録です
対応前の状況
OS:AmazonLinux
「リモート攻撃成功の可能性が大きい脆弱性のみ対策実施」
という運用方針のためカーネルを含んだ多数のパッケージが古い状態のまま
当然C5、M5のインスタンスに必須のENA/NVMe非対応のカーネルのため、カーネルのアップデートは必須
対応方針
作業時にサービス停止が必須な事から、この機会にカーネルを含めた全てをアップデート
ただし、サイトの動作に関わるものについてはアップデートしない
対応手順
crond停止
バッチ処理をcrondで実行させているため、意図しないバッチ処理実行を抑止
# service crond stop
# chkconfig crond off
バックアップ
●/etc 配下にある、必要なミドルウェアの設定
●/etc/init.d 配下にある、必要なミドルウェアの起動スクリプト
●バックアップ用AMI作成(EC2 Snapshotでも可)
アップデート
yum update で基本的にはOK。ただし現行パッケージがあまりに古い場合など依存関係でエラーとなる場合がある(実際エラーが発生)。その場合はエラーの元となるパッケージのremoveが必要。クローンを作成し、サイトの動作を含めた事前検証必須。
前述対応方針の通り、アップデートしたくないパッケージもあったため、投入したコマンドは以下の通り
yum remove xxxxxxxxx xxxxxxxxxx
yum update --exclude=xxxxxxx* --exclude=xxxxxx*
設定リストア
バックアップを取得した/etc、/etc/init.d配下のファイルを元の場所へ
ENAドライバ確認
OSを再起動し以下コマンドを投入。ERRORとならず、バージョン情報が表示されればOK
# modinfo ena
filename: /lib/modules/4.14.42-52.37.amzn1.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version: 1.5.0g
~以下省略~
Cloud Initの設定変更
稼働中ホストから作成したAMIでクローンを作成する場合、セキュリティ的に問題のあるパッケージはCloud Initが勝手にアップデートするみたい(実際そうなってた)。
なので、意図したバージョンのパッケージで起動させたいので、その設定を無効化
localeをデフォルトから変更している場合はその指定も
vi /etc/cloud/cloud.cfg
---- 修正内容 ----
repo_upgrade: none
locale: xxxxx,xxxxxxx
その他の変更
この環境ではeth1関連の設定変更(削除)も必要でした
mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.bak
vi /etc/sysconfig/network-scripts/ifcfg-eth1
---- 修正内容 ----
HWADDR=削除
インスタンス属性変更
たぶんこれが一番のキモ
インスタンス変更対象ホストをシャットダウン
aws-cliにて対象インスタンスが操作できるホストから以下のコマンドを実行
aws ec2 modify-instance-attribute --region ap-northeast-1 --instance-id i-xxxxxxxxxx --ena-support
確認
aws ec2 describe-instances --region ap-northeast-1 --instance-ids i-xxxxxxxx --query 'Reservations[].Instances[].EnaSupport'「aws ec2 describe-instances」が「true」であればOK
これでC5/M5に変更する準備は完了
この状態からC5/M5用の新AMIを作成し、現行のEC2インスタンスをTerminateした後、新AMIから同じ構成でC5/M5インスタンスを起動すれば終了。
停止していたcrondの起動をお忘れなく
ちなみに
詳細な構成は公開できませんが、インスタンスタイプ変更後の状況は
EC2月額費用:$446→$316(Standard→GP2にも関わらず)
CPU負荷:ほぼ半分に減少