EC2 コンソールでアラームを作成する際、[Recover this instance] (このインスタンスの復元) オプションが無効になっているのはなぜですか?
最終更新日: 2018 年 12 月 12 日
Amazon Elastic Compute Cloud (Amazon EC2) コンソールで Amazon CloudWatch アラームを作成しようとしています。基盤となるハードウェア障害によって障害が発生した場合に EC2 インスタンスを復旧し、アラームがトリガーされたときに通知を送信したいと考えています。しかし、[Create Alarm] (アラームの作成) ページの [Recover this instance] (このインスタンスの復元) の [Take the action] (アクションの実行) オプションは、グレーアウト (無効化) されています。アラーム通知オプションも無効になります。これらのオプションをオンに戻すにはどうすればよいですか?
簡単な説明
EC2 インスタンスでインスタンスストアボリュームが使用されていると CloudWatch で判断されると、[Recover this instance] (このインスタンスの復元) オプションは無効化されます。インスタンスストアボリュームを使用する EC2 インスタンス (インスタンスストアボリュームのブロックデバイスマッピングを使用して起動されるインスタンスなど) では、復元アクションはサポートされていません。CloudWatch では各 EC2 インスタンスに関連付けられているメタデータを読み取り、復元処理を有効化する前に、インスタンスストアボリュームが使用されていないことを確認します。
注: [Recover] (復元) アクションは、特定のインスタンスタイプでのみサポートされています。サポートされているインスタンスタイプが起動されていることを確認してください。詳細については、「インスタンスを復旧する」をご参照ください。EC2 復元アラームアクションは、StatusCheckFailed_System メトリクスについてのみ有効です。
解決方法
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
続行する前に、「インスタンスを停止、終了、再起動、または復元するアラームを作成する」をご参照ください。CloudWatch アラームを作成するための前提条件をすべて満たしていることを確認してください。
EC2 Linux インスタンスの一時的なインスタンスストアボリュームを検索する
2. 次のコマンドを使用して、インスタンスのメタデータを取得します。
curl http://169.254.169.254/latest/meta-data/block-device-mapping/
3. この出力を使用して、インスタンスにマッピングされているインスタンスストアボリューム (「ephemeral」で始まる) を特定します。例えば、以下の出力には、2 種類のインスタンスストアボリューム (「ephemeral0」および「ephemeral2」) があります。
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ephemeral0
ephemeral2
root
EC2 Windows インスタンスの一時的なインスタンスストアボリュームを検索する
http://169.254.169.254/latest/meta-data/block-device-mapping/
3. 返される情報を使用して、インスタンスにマッピングされているインスタンスストアボリューム (「ephemeral」で始まる) を特定します。
Windows PowerShell を使用する場合:
1. PowerShell で Windows インスタンスに接続します。
2. 次のコマンドを実行します。
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/
3. この出力を使用して、インスタンスにマッピングされているインスタンスストアボリューム (「ephemeral」で始まる) を特定します。例えば、以下の出力には、1 種類のインスタンスストアボリューム (「ephemeral0」) があります。
ami
ephemeral0
root
swap
詳細については、「インスタンスストアボリュームのインスタンスブロックデバイスマッピングの表示」をご参照ください。
EC2 インスタンスの AMI で一時的なインスタンスストアボリュームを検索する
EC2 インスタンスの Amazon マシンイメージ (AMI) のブロックデバイスマッピングを確認します。「Block Devices」フィールドに「=ephemeral#」が含まれているブロックデバイスインスタンスストアボリュームを確認します。ここで、「#」は 0~23 の整数です。
インスタンスタイプがインスタンスストアボリュームを正式にサポートしていない場合でも、ブロックデバイスマッピングが発生する可能性があります。このアクションは、次のいずれかを使用して EC2 インスタンス (Windows または Linux) を起動するときに発生する場合があります。
- AWS CLI
- SDK
- AWS CloudFormation などのサービス
Amazon EC2 コンソールを使用して、インスタンスストアボリュームがサポートされていないインスタンスタイプを起動する場合、Amazon EC2 では、変更されたブロックデバイスマッピングは無視されます。
Amazon EC2 コンソールまたは AWS CLI を使用して、AMI のブロックデバイスマッピングの EBS ボリュームを列挙できます。
例えば、次の describe-images コマンドは、AMI の BlockDeviceMapping を返します。
aws ec2 describe-images --image-ids ami-xxxxxxxx
「VirtualName」が「ephemeral」で始まるインスタンスストアボリュームの出力例を以下に示します。
aws ec2 describe-images --image-ids ami-11112222
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"DeleteOnTermination": true,
"SnapshotId": "snap- ",
"VolumeSize": 8,
"VolumeType": "gp2",
"Encrypted": false
}
},
{
"DeviceName": "/dev/sdb",
"VirtualName": "ep0hemeral0"
},
{
"DeviceName": "/dev/sdc",
"VirtualName": "ephemeral2"
}
],
AMI のインスタンスストアボリュームへの参照をすべて削除または上書きする
EC2 インスタンスでインスタンスストアボリュームが使用されていることを確認したら、AMI のインスタンスストアボリュームへの参照をすべて削除または上書きする必要があります。その後、インスタンスストアボリュームは追加できないか、既存の EC2 インスタンスから削除できないため、インスタンスを再起動する必要があります。
以下のいずれかのメソッドを使用して、インスタンスストアボリュームへの参照を削除または上書きします。
- インスタンスストアボリュームへの参照を AMI から削除します。その後、インスタンスを再起動します。
- Amazon EC2 コンソールから EC2 インスタンスを起動して、インスタンスボリュームストアがサポートされていないインスタンスタイプの AMI を上書きします。
- AWS CLI から EC2 インスタンスを起動し、インスタンスストアボリュームを参照している AMI 内の各デバイスを手動で上書きします。例えば、インスタンスストアボリュームにマッピングされているデバイス「/dev/sdb」および「/dev/sdc」がある場合は、run-instances コマンドを使用して EC2 インスタンスを起動します。
aws ec2 run-instances --image-id ami-11112222 --subnet-id subnet-11112222 --instance-type t2.medium --key-name my_key --associate-public-ip-address --block-device-mappings '[{"DeviceName": "/dev/sdb","NoDevice": ""},{"DeviceName": "/dev/sdc","NoDevice": ""}]'
- CloudFormation を使用して起動された EC2 インスタンスで、CloudFormation テンプレートを作成して、インスタンスストアボリュームへの任意のデバイスのマッピングを上書きします。例:
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "I4EY8I": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId" : "ami-11112222", "InstanceType" : "t2.medium", "SubnetId" : "subnet-11112222", "KeyName" : "my_key", "BlockDeviceMappings" : [ { "DeviceName":"/dev/sdb", "NoDevice": {} }, { "DeviceName":"/dev/sdc", "NoDevice": {} } ] } } } }
- SDK を使用して起動された EC2 インスタンスで、インスタンスストアボリュームへのデバイスのマッピングを上書きする方法については、関連する SDK ドキュメントをご確認ください。