EC2 起動時・実行中に、アタッチされている EBS の DeleteOnTermination 属性 (合わせて削除) の値を変更する

# ０．はじめに

EC2 を作成する時や新しく EBS をアタッチする時などに、DeleteOnTermination 属性(合わせて削除)の値を設定するかと思いますが、後で変更したいッ!!

と、
思うことがありませんか？

# １．アタッチされている EBS の DeleteOnTermination 属性 (合わせて削除) の値を変更する

ということで、
私はあったので、問い合わせをしたところ、以下の様な回答を頂きました。

> インスタンスの起動時またはインスタンスの実行中に、EC2にアタッチされているEBSボリュームの DeleteOnTermination 属性(合わせて削除)の値(設定)を変更することができます。しかしながら、現時点では、 管理コンソールからの設定変更はサポートされておらず、コマンドラインを使用して設定の変更を行う必要があります。

なるほど。
どうやら、AWS CLI から出来るみたいです。

コンソールから設定を変更できる機能が無かったので、てっきり出来ないものかと思い、要望をあげたところ、丁寧なご回答を頂きました。

で、
以下のサイトも補足で教えて頂きました。

* [インスタンスの終了 \- Amazon Elastic Compute Cloud](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination)

ネットを調べてみると、
他にも参考になるサイトがいくつかありました。

* [delete\-on\-terminationを後から変更するのがとても大変 \| AWS情報ブログ](http://www.simpline.co.jp/tech/?p=505)
* [EBSボリュームのDeleteOnTerminationの設定を後から変える方法 \- Swing\-by](http://kasshy.hatenablog.com/entry/2016/02/05/144918)
* [AWS EC2 で Delete on Termination 設定を変更するワンライナー \- Kenichi Maehashi's Blog](http://blog.kenichimaehashi.com/?article=14380940810)

いやー、
知らなかったです。
そして、ありがとうございました。

で、
手順もわかったので、
以下のスクリプトを使って、
今の設定がどうなっているか調べながら、セコセコと変更しました。

```EC2-ModifyDeleteOnTermination.bash:
#!/bin/bash

# ---1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----

# ==============================================================================
#
# EC2-ModifyDeleteOnTermination.bash
#
#   * ex) $ ./EC2-ModifyDeleteOnTermination.bash
#
# ==============================================================================

mypath=${0%/*}
myname=${0##*/}
mybase=${myname%.*}
mydate=`date +'%Y-%m-%d'`

LOG()
{
    printf "[%-10s %-8s] (%06d) %-50s\n" \
    `date '+%Y-%m-%d %H:%M:%S'` "${LINENO}" "${1}"
    printf "[%-10s %-8s] (%06d) %-50s\n" \
    `date '+%Y-%m-%d %H:%M:%S'` "${LINENO}" "${1}">>"${mypath}/${myname}.log"
}

# ------------------------------------------------------------------------------
# Set
# ------------------------------------------------------------------------------

#LOG "<<<<<<<< Set >>>>>>>>"

# Confirm Argv
#if [ ${#} -lt 2 ]; then
#    LOG "[ERROR] Parameter Error !! (${0} ${1} ${2})"
#    LOG "Usage: ${myname} [User ID] [Password]"
#    exit -1
#fi

export AWS_ACCESS_KEY_ID=[アクセスキー]
export AWS_SECRET_ACCESS_KEY=[シークレットキー]
export AWS_DEFAULT_REGION=ap-northeast-1

# ------------------------------------------------------------------------------
# Program Start
# ------------------------------------------------------------------------------

#LOG "<<<<<<<< Program Start >>>>>>>>"

aws ec2 describe-instances | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'

EC2ID=[EC2インスタンスID]
aws ec2 describe-instances --instance-ids ${EC2ID} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'
DEVNM=[デバイス名]
VOLID=[ボリューム名]
aws ec2 modify-instance-attribute --instance-id ${EC2ID} --block-device-mappings "{\"DeviceName\":\"${DEVNM}\",\"Ebs\":{\"DeleteOnTermination\":true,\"VolumeId\":\"${VOLID}\"}}"
aws ec2 describe-instances --instance-ids ${EC2ID} | jq '.Reservations[].Instances[] | {Tags, InstanceId, BlockDeviceMappings}'


# ------------------------------------------------------------------------------
# Program End
# ------------------------------------------------------------------------------

#LOG "<<<<<<<< Program End >>>>>>>>"

# ---1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----
```

# ９９．ポイント

* コンソールに機能がなくても、AWS CLI では機能があったりするので、まずはネットで検索してみる。

# ＸＸ．まとめ

まぁ、当たり前のことではあるんですが、
「自分が困っていること」って、実は他にも同じ様に困っている人がいたりするんですよね。

だから、
まずはネットで調べてみて、それでも見つからなかったら、問い合わせしてみる。

そして、
自分の問題が解決出来たら、ちゃんと情報発信してシェアする。

実は、
下らない様な情報でも役に立つこともあるので、しっかりやっていかないとなと思います。

とりあえず、
AWS のヘルプ担当の方々、ありがとうございましたー♪