tech.guitarrapc.cóm

Technical updates

AWS Tools for Windows PowerShellでEC2インスタンスのTerminate Protectionを操作する

AWS EC2の操作はPowerShellで楽ができます。

今回は、 誤ってTerminateしたくない人の見方「Terminate Protection」をEC2インスタンスに対して有効化する方法です。

EC2 Instance の Terminate Protection

Terminate Protectionは、名のごとく、 Terminateを実行できないようにしてくれます。 この設定が有効になったEC2 Instanceは、 Terminateボタンがグレイアウトして無効になり、 Terminate Protectionを無効にしないとTerminateできないようになります。

特にAWS Management Consoleは、マウス操作のため、 StopやStart, Rebootの近くにTerminateがあるのは恐いものです。

PowerShell で Terminate Protectionを操作する

PowerShellでのAWS操作が初めての方は、前回の記事を参照してください。

AWS Tools for Windows PowerShell のススメ

Terminate Protectionは、 EC2の属性 (Attribute) として設定されています。 ということで、使うコマンドレットはこれです。

Get-EC2InstanceAttribute
Edit-EC2InstanceAttribute

EC2 Instanceの状態を取得するには、 Get-EC2InstanceAttribute Cmdletを利用します。 Terminate Protection状態を取得するならこうです。

Get-EC2InstanceAttribute -InstanceId i-xxxxxxx -Attribute disableApiTermination

Terminate Protectionは、 disableApiTerminationという名称なんですね。 有効にする場合はこのようにします。

Edit-EC2InstanceAttribute -InstanceId i-xxxxxxxx -Attribute disableApiTermination -Value $true

無効にする場合はこうです。

Edit-EC2InstanceAttribute -InstanceId i-xxxxxxxx -Attribute disableApiTermination -Value $false

指定したIPのInstanceを取得したい? それならこうです。

$IpAddress = "10.0.100.10"
(Get-EC2Instance).RunningInstance | where PrivateIpAddress -eq $IpAddress | Get-EC2InstanceAttribute -Attribute disableApiTermination

設定も簡単ですね。

$IpAddress = "10.0.100.10"
(Get-EC2Instance).RunningInstance | where PrivateIpAddress -eq $IpAddress | Edit-EC2InstanceAttribute -Attribute disableApiTermination -Value $false

まとめ

PowerShellは基本としてPipe Orientatedです。 Pipeが使えない利用なら、別にPowerShellではなくて .NETの方を使えばいいのです。

より効率書ける/利用できる場面に適したものを使えるといいですね。