Amazon Elastic Compute Cloud (Amazon EC2) コンソールで Amazon CloudWatch アラームを作成しようとしています。基盤となるハードウェア障害によって EC2 インスタンスに障害が発生した場合に復旧させ、アラームがトリガーされたら通知を送信したいと考えています。ただし、[Create Alarm] ページでは、[Take the action] の [Recover this instance] オプションがグレー表示 (無効) になっています。アラーム通知オプションも無効になっています。これらのオプションをオンに戻すにはどうしたらいいですか?
簡単な説明
EC2 インスタンスがインスタンスストアボリュームを使用していると CloudWatch が判断した場合、[Recover this instance] オプションは無効になります。復旧アクションは、インスタンスストアボリュームを使用する EC2 インスタンス(インスタンスストアボリュームのブロックデバイスマッピングで起動されたインスタンスも含む)ではサポートされません。CloudWatch は、復旧アクションを有効にする前に、各 EC2 インスタンスに関連するメタデータを読み取り、インスタンスストアボリュームを使用していないことを確認します。
メモ: [復旧] アクションは、特定のインスタンスタイプでのみサポートされています。必ずサポートされているインスタンスタイプを起動してください。詳細については、[インスタンスの復旧] を参照してください。EC2 復旧アラームアクションは [StatusCheckFailed_System] メトリックスに対してのみ有効です。
解決策
**メモ:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
先に進む前に、インスタンスを停止、終了、再起動、または回復するアラームの作成を参照してください。CloudWatch アラームを作成するための前提条件をすべて満たしていることを確認してください。
EC2 Linux インスタンス内のエフェメラルインスタンスストアボリュームを検索する
1. 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 インスタンスのエフェメラルインスタンスストアボリュームを検索する
ブラウザを使用:
1. Windows インスタンスに接続します。
2. ブラウザを開いて、以下に接続します。
http://169.254.169.254/latest/meta-data/block-device-mapping/
3. 返された情報を使用して、インスタンスにマップされているインスタンスストアボリューム (名前が「ephemeral」で始まる) を識別します。
Windows PowerShelを使用:
1. PowerShell で Windows インスタンスに接続します。
2. 以下のコマンドを実行します。
PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/
3. 出力を使用して、インスタンスにマップされているインスタンスストアボリューム (名前が「ephemeral」で始まる) を識別します。たとえば、次の出力にはインスタンスストアボリューム (「ephemeral0」) が 1 つあります。
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 インスタンスに追加したり、既存の 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 のドキュメントで、デバイスからインスタンスストアボリュームへのマッピングをオーバーライドする方法を確認してください。
関連情報
Amazon CloudWatch アラームの使用