Amazon EC2 で Stop Protection(停止保護)機能が発表されました

記事タイトルとURLをコピーする


コーヒーが好きな木谷映見です。

AWS Summit Japan 2022 が盛り上がっていますね!

昨日 2022 年 5 月 24 日、EC2 インスタンスの偶発的な停止を防ぐ「Stop Protection(停止保護)」機能が発表されました。今回はこの機能をさっそく試してみようと思います。 aws.amazon.com

最初に結論

EC2 インスタンスの停止保護を有効化しておくと、 AWS 側の誤った操作でインスタンスの停止を防ぐことができ、さらに休止と削除も防ぐことができます。 再起動、スケジュールされた停止、 OS からのシャットダウンを防ぐことはできませんので、ご注意ください。

ドキュメント

ドキュメントはこちらです。英語にすると「Enable Stop Protection」という項目が確認できます。 docs.aws.amazon.com

停止保護は、マネジメントコンソール、CLI、または API からインスタンスが誤って停止されるのを防ぎます。さらに、誤って休止、削除(終了)するのも防ぎます

停止保護を有効化する

EC2 インスタンスを起動します。
EC2 マネジメントコンソールの「インスタンス」から、「インスタンスの起動」をクリックします。
Name タグは「Stop-Protection-demo」としておきます。 キーペアだけは自身で所持しているものを設定し、基本デフォルト設定にしておきます。
「高度な詳細」を展開します。
「停止保護」という項目がありますので、これを有効化します。

インスタンスを起動します。
起動後、インスタンスの詳細を見ると「停止保護」が有効になっているのが確認できます。

停止を試す

マネジメントコンソールからインスタンスの停止を試す

インスタンスを停止しようとしてみます。
「インスタンスの状態」から、「インスタンスを停止」をクリックします。

以下のようなエラーが表示され、インスタンスの停止に失敗します。

The instance 'i-xxxxxxxxxxxxxxxxx' may not be stopped. Modify its 'disableApiStop' instance attribute and try again.

AWS CLI からインスタンスの停止を試す

停止保護を有効化した EC2 インスタンスの停止を AWS CLI で実行しようとすると、以下のようにエラーが出ます。

$ aws --version
aws-cli/2.7.0 Python/3.9.11 Linux/4.14.275-207.503.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

$ aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx

An error occurred (OperationNotPermitted) when calling the StopInstances operation: The instance 'i-xxxxxxxxxxxxxxxxx' may not be stopped. Modify its 'disableApiStop' instance attribute and try again.

再起動を試す

マネジメントコンソールからインスタンスの再起動を試す

インスタンスを再起動しようとしてみます。 「インスタンスの状態」から、「インスタンスを再起動」をクリックします。

停止保護が有効の状態で、再起動されました。

AWS CLI からインスタンスの再起動を試す

停止保護を有効化した EC2 インスタンスの再起動を AWS CLI で実行しようとすると、以下のように何事もなく正常に終了します。

$ aws --version
aws-cli/2.7.2 Python/3.9.11 Linux/4.14.276-211.499.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

$ aws ec2 reboot-instances --instance-ids i-xxxxxxxxxxxxxxxxx
$

休止を試す

マネジメントコンソールからインスタンスの休止を試す

インスタンスを休止しようとしてみます。
EC2 インスタンスを休止するには、起動時に「Stop - Hibernate behavior」を有効にしておく必要があります。

「インスタンスの状態」から、「インスタンスを休止」をクリックします。

以下のようなエラーが表示され、インスタンスの休止に失敗します。

The instance 'i-xxxxxxxxxxxxxxxxx' may not be stopped. Modify its 'disableApiStop' instance attribute and try again.

AWS CLI からインスタンスの休止を試す

停止保護を有効化した EC2 インスタンスの休止を AWS CLI で実行しようとすると、以下のようにエラーが出ます。

$ aws --version
aws-cli/2.7.2 Python/3.9.11 Linux/4.14.276-211.499.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

$ aws ec2 stop-instances \
>     --instance-ids i-xxxxxxxxxxxxxxxxx \
>     --hibernate

An error occurred (OperationNotPermitted) when calling the StopInstances operation: The instance 'i-xxxxxxxxxxxxxxxxx' may not be stopped. Modify its 'disableApiStop' instance attribute and try again.

削除を試す

マネジメントコンソールからインスタンスの削除を試す

インスタンスを削除(終了)しようとしてみます。
「インスタンスの状態」から、「インスタンスを終了」をクリックします。

インスタンスの削除に失敗します。

日本語と英語が混じっていますが、以下のエラーが表示されます。

インスタンス The instance 'i-xxxxxxxxxxxxxxxxx' may not be terminated. Modify its 'disableApiStop' instance attribute and try again. の終了に失敗しました。

AWS CLI からインスタンスの削除を試す

停止保護を有効化した EC2 インスタンスの削除(終了)を AWS CLI で実行しようとすると、以下のようにエラーが出ます。

$ aws --version
aws-cli/2.7.0 Python/3.9.11 Linux/4.14.275-207.503.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

$ aws ec2 terminate-instances --instance-ids i-xxxxxxxxxxxxxxxxx

An error occurred (OperationNotPermitted) when calling the TerminateInstances operation: The instance 'i-xxxxxxxxxxxxxxxxx' may not be terminated. Modify its 'disableApiStop' instance attribute and try again.

停止保護を無効化する

停止保護を無効化します。 [アクション] - [インスタンスの設定] - [停止保護を変更]をクリックします。

有効化のチェックを外して「保存」をクリックします。

停止保護が無効になります。この状態で「インスタンスを停止」すると、インスタンスが停止できます。

インスタンスにログインしてシャットダウン

停止保護が有効な状態で、OS上からシャットダウンしたらどうなるのでしょうか。再度停止保護を有効化して試します。
停止保護の有効化は、[アクション] - [インスタンスの設定] - [停止保護を変更]をクリックし、「有効化」にチェックを入れて保存するだけで簡単に有効化できます。

Amazon Linux 2 にログインし、シャットダウンコマンドを実行します。

# shutdown -h now

停止保護は有効ですが、シャットダウンし、インスタンスが停止しました。

考慮事項

  • 再起動は防ぐことはできません。

  • 停止保護を有効にしても、インスタンスを停止するスケジュールされたイベントがある場合、インスタンスを停止するのを防ぐことはできません。

  • 停止保護を有効にしても、インスタンスが異常な場合やスケールインイベント中に Auto Scaling がインスタンスを終了するのを防ぐことはできません。

  • Instance Store-Backedインスタンスの停止保護を有効にすることはできません。

  • スポットインスタンスの停止保護を有効にすることはできません。

emi kitani(執筆記事の一覧)

AS部LX課。2022/2入社、亀の歩みで頑張っています。コーヒーとサウナが好きです。AWS認定11冠