AWSのWindowsインスタンスでAuto Recoveryを設定しようとして、できなかった話

題名の通り、AWSのEC2コンソールから、WindowsインスタンスのAuto Recoveryを設定しようとしたところ、Auto Recoveryの選択肢がグレイアウトしており、選択できないという事がありました。こんな感じです。

f:id:goodbyegangster:20171204135819j:plain

原因調べるのに苦労したのですが、以下のknowledgeページを見つけました。

CloudWatch アラームの [Recover this instance] オプションの有効化

本文内の以下の文章が参考になります。

This(Cannot AutoRecovery) can occur when using the AWS CLI, an SDK, or a service such as CloudFormation to launch an EC2 instance based upon an AMI with a block device mapping that includes instance store volumes. If the EC2 console is used to launch an EC2 instance type that does not support instance store volumes (such as T2, M4, or C4), modified block device mappings are simply ignored.

aws cliコマンドで、WindowsのPublic AMIを覗いてみると、device mappingの定義部分で、実際のephrermental diskは付与されていないものの、mappingの定義はされています。以下みたくですね。

# aws ec2 describe-images --image-ids ami-4325fa25 --region ap-northeast-1
{
    "Images": [
        {
            "Architecture": "x86_64",
            "CreationDate": "2017-10-12T12:22:56.000Z",
            "ImageId": "ami-4325fa25",
            "ImageLocation": "amazon/Windows_Server-2016-English-Full-Base-2017.10.13",
            "ImageType": "machine",
            "Public": true,
            "OwnerId": "801119661308",
            "Platform": "windows",
            "State": "available",
            "BlockDeviceMappings": [
                {
                    "DeviceName": "/dev/sda1",
                    "Ebs": {
                        "Encrypted": false,
                        "DeleteOnTermination": true,
                        "SnapshotId": "snap-01444e3cf3c302f50",
                        "VolumeSize": 30,
                        "VolumeType": "gp2"
                    }
                },
                {
                    "DeviceName": "xvdca",
                    "VirtualName": "ephemeral0"
                },
                (中略)
                {
                    "DeviceName": "xvdcz",
                    "VirtualName": "ephemeral25"
                }
            ],
            "Description": "Microsoft Windows Server 2016 with Desktop Experience Locale English AMI provided by Amazon",
            "EnaSupport": true,
            "Hypervisor": "xen",
            "ImageOwnerAlias": "amazon",
            "Name": "Windows_Server-2016-English-Full-Base-2017.10.13",
            "RootDeviceName": "/dev/sda1",
            "RootDeviceType": "ebs",
            "SriovNetSupport": "simple",
            "VirtualizationType": "hvm"
        }
    ]
}

このdevice mappingの定義があることで、インスタンスストアを利用していると判断されてしまい、AutoRecoveryの設定が弾かれてしまうとのこと。インスタンスストアを利用しておらず、そもそもインスタンスストアを利用できないt2.familyであってもです。ひえっ。

この問題の回避方法するには、以下の方法でEC2をLaunchする必要があります。

  • AWSのEC2コンソールよりLaunch
  • aws cliコマンドでLauchする場合、device mappingをoverrideするオプションをつけて実行
  • CloudFormationでLaunchする場合、device mappingをoverrideするテンプレートを書いてあげる

すでに作成されたEC2インスタンスを変更する場合、一度AMIを取得した後、上記いづれかの方法でReLaunchする必要があります。結構な罠ですよね。