AWS CodeDeploy のデプロイライフサイクルイベントフックが、エラーを返す Windows PowerShell コマンドレットを呼び出します。ただし、コマンドレットは終了コード 0 (成功) を返し、デプロイは成功とレポートします。 PowerShell コマンドレットを終了するエラーおよび終了しないエラーの両方が発生したときに CodeDeploy でライフサイクルイベントフックが失敗するようにしたことを確認する方法を教えてください。
簡単な説明
デフォルトでは、回復不能エラーまたは終了エラーが発生しない限り、PowerShell コマンドレットが完了まで実行されて終了コード 0 を返します。CodeDeploy は、関連付けられたスクリプトが 0 以外の終了コードを返さない限り、ライフサイクルイベントフックの失敗をレポートしません。
終了しないエラーが発生したときにライフサイクルイベントフックが失敗するようにする場合は、スクリプトの動作を変更してください。スクリプトの動作を変更するには、コマンドレットの $ErrorActionPreference 変数を**「Stop」**に設定します。PowerShell がコマンドレットの実行を停止して、終了するエラーおよび終了しないエラーの両方に対して終了コード 1 を返します。
詳細については、Microsoft Scripting Blog の Understanding non-terminating errors in PowerShell を参照してください。
解決方法
重要: 以下の解決方法は Windows PowerShell 5.1 以降で機能します。
1. 次の $PSVersionTable コマンドを実行して、使用している Windows PowerShell のバージョンを確認します。
$PSVersionTable
2. Windows PowerShell のバージョンがバージョン 5.1 より古い場合は、PowerShell のバージョンをアップグレードしてください。手順については、Microsoft Docs ウェブサイトで Windows PowerShell 5.1 をダウンロードしてインストールするを参照してください。
3. PowerShell コマンドレットの先頭に次のコードを含めます。
$ErrorActionPreference = 'Stop'
PowerShell がコマンドレットを停止して、終了するエラーおよび終了しないエラーの両方に対して終了コード 1 を返すようになりました。
関連情報
ユーザー設定変数について (Microsoft Docs ウェブサイト)
AppSpec の「hooks」セクション
Amazon CloudWatch ツールを使用したデプロイのモニタリング
Amazon CloudWatch コンソールでの AWS CodeDeploy ログの表示