インスタンスのスケールアップしようとして、 終了時に削除
って Teminate と Stop のどっちだ……? ってご不安になったので、起動中のインスタンスにアタッチされている EBS の設定を変更します。
とりあえず false
にしておけば問題あんめえ、というお気持ち。
以下は AWS CLI がセットアップ済みである前提で記載しています。
まだなら brew install aws-cli
aws configure
あたりを実行してください。環境に合わせてパッケージ管理マネージャは読み替えてね。
記述がわかりにくすぎる(英語の一次情報の方もにたようなもん)。
json を作る
AWS CLI 経由でしか変更できないようなので、 AWS CLI 実行時に指定する、変更内容を記載した json ファイルを作成します。
今回は /tmp/
で作業します。
cd /tmp/ vi change.json
change.json
DeviceName
は、変更したい EBS をアタッチしている EC2 インスタンスを選択して「ルートデバイス」を確認すれば書いてあります。
最近の NVME 接続 ( Nitro でしたっけ? ) だと /dev/xvda
で、 HVM ベースとかのちょっと古いやつだと /dev/sda1
とかのはずです。
[ { "DeviceName": "/dev/xvda", "Ebs": { "DeleteOnTermination": false } } ]
リージョンを指定しておく
~/.aws/config
に記載されているプロファイルにリージョンが書いてないとエラーが出ます。
You must specify a region. You can also configure your region by running "aws configure".
僕はプロファイル指定して実行しようとして、 default
にはリージョン書いてあるけど、指定したプロファイルには記載してなくて上記のエラーでたので、似たような状態の人は確認してみてください。
~/.aws/config
[default] output = json region = ap-northeast-1
実行する
以下で実行できます。
aws ec2 modify-instance-attribute --instance-id ${インスタンスのID} --block-device-mappings file://change.json
プロファイル指定する場合は、以下のようにロングオプションを付与すればオッケーです。
aws ec2 modify-instance-attribute --instance-id ${インスタンスのID} --block-device-mappings file://change.json --profile ${プロファイル名}
json ファイル指定のパスについて
file://
形式で指定しないとだめなんすねえ、普通にパス記載したら怒られちゃった。
Error parsing parameter '--block-device-mappings': Expected: '=', received: 'EOF' for input:
確認する
マネジメントコンソールを一度リロードしてから、対象の EC2 インスタンスを選択して、ルートデバイスを参照してみてください。