Amazon CloudWatch アラームで Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling ポリシーを呼び出すよう設定されていますが、機能しません。
簡単な説明
CloudWatch アラームが新しいアラーム状態に移行すると、アラームからは、そのアラーム状態に設定したアクションすべてが呼び出されます。Amazon EC2 Auto Scaling では、アラームに設定した期間を利用して、アラームの状態を変更すべきかどうかが判断されます。ただし、アラームが新しい状態のままだと、設定した期間に関係なく、アラームから Auto Scaling アクションが1分に1回呼び出されます。
CloudWatch アラームの状態が変化しても Amazon EC2 オートスケーリングポリシーが呼び出されない一般的な原因/理由は次のようになります。
- Auto Scaling アクションが CloudWatch アラームに設定されていない。
- Amazon EC2 Auto Scaling グループのスケーリングポリシーが設定されていない。このため、Auto Scaling グループの評価がされなくなる。
- Auto Scaling グループにあるシンプルスケーリングポリシーかステップスケーリングポリシーが競合している。このため、一部のポリシーが開始されなくなる。
- Auto Scaling グループのライフサイクルフックが完了していない。このため、シンプルスケーリングポリシーがすべて適用されなくなる。保留中のインスタンスがあると、ステップスケーリングポリシーとターゲットトラッキングスケーリングポリシーにも遅延が生じる。これは、Auto Scaling では、ライフサイクルフックとウォームアップ時間が終了するまで、インスタンスが (スケールアウトで) グループのキャパシティとしてカウントされないためである。過度なスケーリングを防ぐため、インスタンスは (スケールインで) グループのキャパシティとしてカウントされる。
- ライフサイクルフックが終了するのは、タイムアウトになるか、CompleteLifecycleAction オペレーションまたは AWS コマンドラインインターフェイス (AWS CLI) を呼び出したときである。
解決方法
開始する前に、CloudWatch アラームが ALARM 状態になっていることを確認します。アラームの設定が監視対象のメトリクスしきい値と一致しない場合、そのアラームは ALARM 状態に移行しない可能性があります。アラームの状態が変化しないと、Auto Scaling ポリシーは呼び出されません。CloudWatch アラームがどのように評価されるかの詳細については、「アラームを評価する」を参照してください。
アラームのしきい値を確認して、CloudWatch アラームが想定どおりに ALARM 状態になることを確認します。しきい値を増減させ、期待値に合わせます。また、アラームの期間と評価期間も確認します。Auto Scaling ポリシーを想定どおりに呼び出すためには、アラームの期間と評価期間の編集が必要になる場合もあります。アラームアクションの検証の詳細については、 CloudWatch アラームがアクションをアクティブ化することを確認するにはどうすればよいですか?を参照してください。
重要: アラームの作成や編集をする際は、次の点を留意してください。
- Auto Scaling グループのスケーリングプロセスを中断していないことを確認してください。スケーリングプロセスを中断している場合は、このプロセスを再開してください。
- ターゲットトラッキングスケーリングポリシーに関連付けられるアラームの作成、編集、削除はしないでください。こうしたアラームは自動的に作成されるものであり、変更すると意図しない影響が生じる可能性があります。こうしたアラームのしきい値は、スケーリングポリシーで設定した目標値に基づいて自動的に決定されます。
Auto Scaling アクションが CloudWatch アラームで許可されているかどうかを確認する
CloudWatch アラームで Auto Scaling ポリシーを呼び出すには、アラームの設定で ActionsEnabled パラメータをオンにします。アラームの設定で actionsEnabled パラメータが true に設定されていることを確認します。
注: CloudWatch コンソールでアラームの作成や更新をする場合、actionsEnabled パラメータはデフォルトで true に設定されます。
AWS CLI を使用してアラームアクションを確認し許可するには、次の手順を実行します。
-
describe-alarms コマンドを使用して設定を確認します。
aws cloudwatch describe-alarms --alarm-names "myalarm" --query 'MetricAlarms[].ActionsEnabled'
注: myalarm は、該当するアラームの ID に置き換えてください。
-
出力を確認します。actionsEnabled パラメータが true に設定されていない場合は、enable-alarm-actions コマンドでアラームアクションをオンにします。
aws cloudwatch enable-alarm-actions --alarm-names myalarm
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
CloudWatch API でアラームアクションを確認しオンにするには、次の手順を実行します。
- DescribeAlarms オペレーションを呼び出して、現在の設定を確認します。
- アラームでアクションが許可されていない場合は、EnableAlarmActions オペレーションを呼び出してアクションをオンにします。
Auto Scaling グループのシンプルスケーリングポリシーとステップスケーリングポリシーを確認する
グループのスケーリングポリシーを Amazon EC2 コンソールで確認するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインの [自動スケーリング] で、[Auto Scaling グループ] を選択します。
- コンテンツペインで、該当する Auto Scaling グループを選択します。
- [自動スケーリング] タブを選択し、ポリシータイプをメモします。
スケーリングポリシーを AWS CLI で確認するには、describe-policies コマンドに --policy-types パラメータを指定して実行します。スケーリングポリシーを AWS API で確認するには、DescribePolicies オペレーションを PolicyTypes パラメータで呼び出します。出力には、各ポリシータイプが一覧表示されます。
シンプルスケーリングポリシーが1つ有効になっていると、他のシンプルスケーリングポリシーは次の条件が満たされるまで呼び出されません。
- 有効なシンプルスケーリングポリシーが完了した。
- Auto Scaling ポリシーのクールダウン期間が経過した。シンプルスケーリングポリシーは、Auto Scaling ポリシーのデフォルトか指定のクールダウン期間に従います。
**注:**シンプルスケーリングポリシーを実行しても、ステップスケーリングポリシーやターゲットトラッキングスケーリングポリシーが完全にブロックされるわけではありません。矛盾するポリシーが同時に適用されることがないようにしてください。
Auto Scaling ポリシーに Auto Scaling ライフサイクルフックがないか確認する
シンプルスケーリングポリシーのスケーリングアクティビティは、Auto Scaling ライフサイクルフックが実行されている間は一時停止します。ただし、ライフサイクルフックが実行中であっても、ステップスケーリングポリシーは実行されます。
すべてのライフサイクルフックが CONTINUE または ABANDON という結果になることを、グローバルタイムアウト期間かハートビートタイムアウト期間が終了してから確認します。
ライフサイクルフックアクションを Amazon EC2 コンソールで確認するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインの [自動スケーリング] で、[Auto Scaling グループ] を選択します。
- コンテンツペインで、該当する Auto Scaling グループを選択します。
- [アクティビティ] タブを選択し、[アクティビティ履歴] セクションまでスクロールします。
- アクティビティに進行中のライフサイクルフックアクションがないかどうかを確認します。
ライフサイクルフックを完了する手順については、「ライフサイクルアクションを完了する」を参照してください。
関連情報
Amazon EC2 Auto Scaling グループでのスケーリング問題をトラブルシューティングする方法を教えてください。
Amazon EC2 Auto Scaling のトラブルシューティングをする