Amazon Elastic Compute Cloud (Amazon EC2) Auto Scaling のライフサイクルフックとともに AWS CodeDeploy を 使用しています。しかしながら、ライフサイクルアクションが完了せず、EC2 インスタンスは起動しません。
簡単な説明
CodeDeploy は Amazon EC2 Auto Scaling ライフサイクルフック を使用してデプロイを実行します。ライフサイクルフックは、次の理由により EC2 インスタンスのライフサイクルステータスの順序に影響を及ぼす可能性があります。
- デプロイが失敗し、関連するライフサイクルアクションの失敗の原因となっている。
- 単一の EC2 Auto Scaling グループに複数のデプロイグループが関連付けられていることで、CodeDeploy の制限を超過し、タイムアウトの原因となっている。
- 削除されたアプリケーションに関連付けられている残りのライフサイクルフックがタイムアウトの原因となっている。
解決策
Auto Scaling グループのスケーリングアクティビティ履歴を確認します。
- EC2 コンソール のナビゲーションペインで、[ Auto Scaling グループ ] を [ Auto Scaling] から選択します。コンテンツペインで、Auto Scaling グループを選択します。次に、[ アクティビティ履歴 ] ビューを選択します。
- AWS コマンドラインインターフェイス (AWS CLI) で、describe-scaling-activitiesコマンドを使用します。
次に、履歴に以下のような問題がないか確認します。
デプロイが失敗した
以下のエラーは通常、CodeDeploy によるデプロイが失敗したことを示します。
Description: Launching a new EC2 instance: i-f362a82e. Status Reason:
Instance failed to complete user's Lifecycle Action: Lifecycle Action
with token 0fc62a4b-153b-4dba-9bf4-9f233e72a697 was abandoned: Lifecycle
Action Completed with ABANDON Result Cause: At 2016-07-22T16:16:56Z
an instance was started in response to a difference between desired and
actual capacity, increasing the capacity from 2 to 3.
デプロイの詳細を確認して 、デプロイが失敗した理由を調べることができます。詳細については、「 CodeDeploy のトラブルシューティング」を参照してください。
単一の EC2 Auto Scaling グループに複数のデプロイグループが関連付けられている
複数のデプロイグループが単一の EC2 Auto Scaling グループに関連付けられている場合、通常以下のエラーが発生します。
Description: Launching a new EC2 instance: i-649f40a2. Status Reason:
Instance failed to complete user's Lifecycle Action: Lifecycle Action
with token 95c60857-3c0a-4a67-8518-6dc18797e421 was abandoned: Heartbeat
Timeout Cause: At 2016-07-23T05:08:35Z an instance was started
in response to a difference between desired and actual capacity,
increasing the capacity from 1 to 2.
このエラーは、CodeDeploy の 5 分間の制限によってタイムアウトエラーが発生したことを示しています。このタイムアウトは、複数のデプロイが同時に CodeDeploy エージェントにコマンドを送信するときに発生する可能性があります。
これらのデプロイを 1 つのデプロイグループに統合します。不要なライフサイクルフックを防ぐために、必ず不要なデプロイグループを削除します。詳細については、「 CodeDeploy でのデプロイグループの使用」を参照してください。
削除されたアプリケーションから残されたライフサイクルフック
アプリケーションを削除したデプロイグループに関連付けられているアクティブなライフサイクルフックがないか確認します。この問題は、デプロイグループが削除される前にアプリケーションが削除された場合に発生する可能性があります。
Auto Scaling グループの EC2 インスタンスを使用したライフサイクルフックを終了すると、起動に失敗し、「Heartbeat Timeout」というエラーが表示される ライフサイクルフックを終了したときの結果を把握するには、Cloudtrail の CompleteLifecycleAction API 呼び出しで「--lifecycle-action-result」パラメータを確認してください。
関連情報
CodeDeploy と Auto Scaling の統合