AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

EBS の終了時に削除を無効化する

インスタンスのスケールアップしようとして、 終了時に削除 って Teminate と Stop のどっちだ……? ってご不安になったので、起動中のインスタンスにアタッチされている EBS の設定を変更します。 とりあえず false にしておけば問題あんめえ、というお気持ち。

以下は AWS CLI がセットアップ済みである前提で記載しています。 まだなら brew install aws-cli aws configure あたりを実行してください。環境に合わせてパッケージ管理マネージャは読み替えてね。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination

記述がわかりにくすぎる(英語の一次情報の方もにたようなもん)。

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 インスタンスを選択して、ルートデバイスを参照してみてください。

f:id:donbulinux:20200304150055p:plain
こんなんなってればオッケーです