この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
本日は、お日がらもよく
EC2の停止保護について探りを入れてみたいと思います。
終了保護(Termination Protection)ではないです。
日本語だとちょっと紛らわしいですが、
終了は、あとかたもなく消えてしまいますが、
停止は、一時停止で、すぐに復活できる状態だよ。ぐらいにとらえてください。
EC2の停止保護について
間違いは誰にでもあるものですから、うっかりさんにもうれしいサービスになっているのかと、
期待を胸に検証していきたいと思います。
まずは結果から発表します!!
結果
- マネージメントコンソール → ×停止できない
- Lambda → ×停止できない
- RDPで接続後、Windowsの電源マークからシャットダウン → 〇停止できる
- SSH接続後、
sudo shutdown
→ 〇停止できる - AWS Systems Manager Session Manager から停止 → 〇停止できる
- コンソールからReboot → 〇再起動できる
- CLI(Cloud Shell) → ×停止できない
感想
それぞれ、どこから停止できるのか試してみましたが、
あれ、・・・意外と落とせちゃうのか。
という感想です。
実務で使うにはちょうどいい塩梅なのかわかりませんが、
落とせすぎても、あんまり意味がなさそう。
検証風景
検証作業中のスクショやログなどを各項目ごとに載せていきます。
1. マネージメントコンソール → ×停止できない
真っ赤ですね、disableApiStop
とお怒りのようです。
2. Lambda → ×停止できない
テスト結果がこちら
エラー結果が長くて見切れていますが、
Response { "statusCode": 500, "body": "An error occurred: An error occurred (OperationNotPermitted) when calling the StopInstances operation: The instance 'i-090ae2a92b6711dc6' may not be stopped. Modify its 'disableApiStop' instance attribute and try again." }
さきほどと同じ disableApiStop
が表示されています。
テストに使用したLambdaのコード↓
import boto3
def lambda_handler(event, context):
# 停止するEC2インスタンスIDを指定
instance_id = 'i-090ae2a92b6711dc6'
ec2 = boto3.client('ec2')
try:
# EC2インスタンスを停止
ec2.stop_instances(InstanceIds=[instance_id])
return {
'statusCode': 200,
'body': 'EC2 instance stop initiated successfully.'
}
except Exception as e:
return {
'statusCode': 500,
'body': f'An error occurred: {str(e)}'
}
3. RDPで接続後、Windowsの電源マークからシャットダウン → 〇停止できる
おなじみのWindows画面に、RDSクライアントからログインをして、
ここにある電源マーク(Power)から停止できるか、
ふつうにできますね。
4. SSH接続後、sudo shutdown
→ 〇停止できる
Tera Termでログインしまして、
shutdownコマンド入力後、停止するまで20秒ぐらいかかっていました。
5. Session Manager から停止 → 〇停止できる
言わずもがなかもしれませんが、
AWS Systems Manager Session Managerでも落ちます。
6. コンソールからReboot → 〇再起動できる
停止じゃなくて再起動はどうかな?と停止できなかったコンソールで試してみましたが、
問題なく再起動できました。
7. CLI(Cloud Shell) → ×停止できない
追加でCLI、今回はお手軽なのでCloud Shellを使ってみました。
でました!disableApiStop
が表示されています。
CLIでは落ちないようです。
それでは、ご覧いただきありがとうございました!またどこかで