ちょっと話題の記事

[アップデート] デフォルトでEC2インスタンスがAuto Recoveryするようになりました

デフォルトでEC2インスタンスがAuto Recoveryするようになったアツいアップデートです
2022.03.31

CloudWatchアラーム設定祭りから開放される

こんにちは、のんピ(@non____97)です。

皆さんはEC2インスタンスに設定するAuto Recoveryの設定面倒だなと思ったことはありますか? 私はあります。

Auto Recoveryは物理ホストの電源やネットワーク接続喪失などAWSの基盤の問題で、EC2インスタンスがダウンしたとき自動的にインスタンスの復旧をしてくれる機能です。

復旧されたEC2インスタンスはインスタンスIDやIPアドレス、すべてのインスタンスメタデータを含め、元のインスタンスと同じものという優れものです。

しかし、従来はAuto Recoveryをするためには、EC2インスタンス毎にCloudWatchアラームで復旧アクションを定義してあげる必要がありました。

AWS CLIを使えば多少は楽ですが、EC2インスタンス一つ一つにAuto Recoveryの設定をするのは結構大変です。また、Auto Recovery対象のEC2インスタンスを指定する際はタグではなく、インスタンスIDで指定する必要があるため、EC2インスタンスをAMIからリストアした時などインスタンスIDが変わってしまった場合は、再度設定してあげる必要があります。

そのちょっと面倒なAuto Recoveryの設定がデフォルトで有効となりました。

このアップデート内容を確認してみたので紹介します。

ドキュメントの確認

英語と日本語のインスタンス復旧についてのドキュメントを見比べてみます。

  • 英語

    You can use the default configuration of the instance or create an Amazon CloudWatch alarm to automatically recover an instance. If an instance becomes impaired because of an underlying hardware failure or a problem that requires AWS involvement to repair, the instance is automatically recovered. Terminated instances cannot be recovered.

    Recover your instance - Amazon Elastic Compute Cloud

  • 日本語

    Amazon EC2 インスタンスをモニタリングする Amazon CloudWatch アラームを作成できます。この機能により、基盤ハードウェアの障害や、AWS による修復を必要とする問題によりインスタンスが正常に機能しなくなった場合に、自動的にそのインスタンスを復旧できます。終了したインスタンスは復旧できません。

    インスタンスの復旧 - Amazon Elastic Compute Cloud

英語のドキュメントではYou can use the default configuration of the instance or create an Amazon CloudWatch alarm to automatically recover an instance.とある通り、やはりCloudWatchアラームで設定していたAuto Recoveryと同等の機能のようですね。

設定の確認と変更

それでは適当にEC2インスタンスを作成して、どのような設定になっているか確認します。

EC2インスタンス作成後にコンソールからAuto Recovery周りのを設定を確認すると「インスタンスの自動復旧」といかにもな設定がありました。設定値は確かにデフォルトになっていますね。

インスタンスの自動復旧デフォルト

CloudWatchアラームを確認しましたがAuto Recovery関係のアラームはありませんでした。裏でAuto RecoveryのCloudWatchアラームが自動で作成されるといったものではないようですね。

CloudWatchアラーム

次に設定変更をしてみます。

インスタンスの自動復旧の設定を変更する際は、アクション-インスタンスの設定-自動復旧動作を変更をクリックします。

自動復旧動作を変更

すると、自動復旧動作を変更する画面が表示されます。

自動復旧動作の変更画面

試しにオフに変更して、保存をクリックします。

自動復旧動作をオフに変更

すると、「インスタンス i-xxxx のインスタンスの自動修復が正常に更新されました。」と表示されました。更新自体は一瞬で終わるようで、インスタンスの自動復旧オフとなっています。

インスタンスの自動復旧をオフ

CloudTrailでイベントを確認してみるとModifyInstanceMaintenanceOptionsというイベントがありました。確かにAutoRecoverydisabledとなっていますね。

{
    "eventVersion": "1.08",
    "eventTime": "2022-03-31T00:02:06Z",
    "eventSource": "ec2.amazonaws.com",
    "eventName": "ModifyInstanceMaintenanceOptions",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "ModifyInstanceMaintenanceOptionsRequest": {
            "InstanceId": "i-0805e181e7c1659ff",
            "AutoRecovery": "disabled"
        }
    },
    "responseElements": {
        "ModifyInstanceMaintenanceOptionsResponse": {
            "xmlns": "http://ec2.amazonaws.com/doc/2016-11-15/",
            "instanceId": "i-0805e181e7c1659ff",
            "autoRecovery": "disabled",
            "requestId": "a5ab6b51-1f76-4c41-b037-2eaf3bf078d5"
        }
    },
    "requestID": "a5ab6b51-1f76-4c41-b037-2eaf3bf078d5",
    "eventID": "547954f0-e72d-4743-85d4-12090ff6e80f",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "<AWSアカウントID>",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}

AWS CLIでも操作しようとAWS CLIのCommand Referenceを確認してみましたが、Auto Recoveryの設定を変更するようなコマンドは見当たりませんでした。

そもそも2022/3/31 10:00時点ではEC2のAPI ReferenceにもModifyInstanceMaintenanceOptionsの記載がないのでドキュメントが追いついていなさそうですね。

また、本アップデート前に起動していたEC2インスタンスの設定を確認しましたが、インスタンスの自動復旧デフォルトとなっていました。

稼働している全てのEC2インスタンスに設定しなくても良いのは親切設計ですね。

2022/4/1追記 : API ReferenceにもModifyInstanceMaintenanceOptionsが追加されました。他にも以下APIが更新されています。

  • CreateLaunchTemplate
  • CreateLaunchTemplateVersion
  • DescribeInstances
  • DescribeLaunchTemplateVersions
  • GetLaunchTemplateData
  • RunInstances

Auto Recoveryの動作確認

Auto Recoveryの動作確認をします。

と言いたいところですが、動作確認はできません。

以下記事で検証している通り、本当にAWS基盤側で問題が発生しないと動作を確認できないようです。

今日もまた運用が楽になった

デフォルトでEC2インスタンスがAuto Recoveryするようになったアップデートを紹介しました。

基本的にはインスタンスの自動復旧デフォルトで良いと思いますが、もしカスタマイズしたい場合はオフに変更して、CloudWatchアラームで制御すると良いと思います。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!