Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Windows インスタンスがある CloudFormation スタックでブートストラップしないヘルパースクリプトをトラブルシューティングするにはどうすればよいですか?
私のヘルパースクリプトは、Windows インスタンスがある AWS CloudFormation スタックではブートストラップしません。
簡単な説明
Windows インスタンスを再起動します。Windows インスタンスの再起動後にヘルパースクリプトが実行されない場合は、「ブートストラップに関する問題をトラブルシューティングする」セクションの手順を実行します。
次のエラーが表示される場合は、cfn-signal に問題がある可能性があります。 「Received 0 conditions when expecting X or Failed to receive X resource signal(s) within the specified duration.」 この問題を解決するには、「cfn-signal に関する問題をトラブルシューティングする」セクションの手順を実行します。
どちらの問題についても、「CloudFormation を使用した Windows オペレーティングシステムのベストプラクティスに従う」セクションの手順を実行します。
解決策
ブートストラップに関する問題をトラブルシューティングする
cfn-init 設定セットの commands セクションをチェックして、waitAfterCompletion が forever に設定されていることを確認します。例:
"commands": { "0-restart": { "command": "powershell.exe -Command Restart-Computer", "waitAfterCompletion": "forever" } }
注: forever の値は、**cfn-init ** に対し、再起動の完了後にのみ終了して再開するように指示します。詳細については、「コマンド」を参照してください:
設定を確認したら、次のログにエラーがないか確認します。
- cfn-init ログ: C:\cfn\log\cfn-init.log
- Windows のイベントログ: C:\Windows\System32\winevt\logs
注: Amazon Elastic Cloud Compute (Amazon EC2) の EC2Launch v2 エージェントは Windows イベントログを公開します。 - (EC2Config サービスを使用する Windows インスタンスの場合) 設定ログ: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
- (EC2Launch v1 エージェントを使用する Windows インスタンスの場合) 起動ログ: C:\ProgramData\Amazon\EC2-Windows\Launch\Log
cfn-signal に関する問題をトラブルシューティングする
次の手順を実行します。
-
cfn-signal が正しく設定されていることを確認します。
重要: PowerShell スクリプトでは -e $latexitcode を使用し、Windows cmd.exe スクリプトでは -e %ERRORLEVEL% を使用します。
UserData の PowerShell スクリプトでは、次のタグを使用します。<powershell></powershell>
PowerShell スクリプトの例:
UserData: Fn::Base64: Fn::Sub : | <powershell> $LASTEXITCODE=0 echo Current date and time >> C:\Temp\test.log echo %DATE% %TIME% >> C:\Temp\test.log cfn-init.exe -s ${AWS::StackId} -r SInstance --region ${AWS::Region} New-Item -Path "C:\" -Name userdata -ItemType directory cfn-signal.exe -e $LASTEXITCODE --stack ${AWS::StackId} --resource WindowsInstance --region ${AWS::Region} </powershell>
UserData の cmd.exe スクリプトでは、次のタグを使用します。
<script></script>
cmd.exe スクリプトの例:
UserData: Fn::Base64: !Sub | <script> cfn-init.exe -v -s ${AWS::StackId} -r WindowsInstance --configsets ascending --region ${AWS::Region} cfn-signal.exe -e %ERRORLEVEL% --stack ${AWS::StackId} --resource WindowsInstance --region ${AWS::Region} </script>
-
AWS::CloudFormation::WaitCondition の Timeout を増やします。設定例については、「Windows スタックのブートストラップの例」を参照してください。
注: Windows インスタンスは通常、Linux インスタンスよりも初期起動プロセスを完了するのに時間がかかります。 -
カスタム Amazon マシンイメージ (AMI) を使用している場合は、Sysprep を使用して AMI を作成する必要があります。Sysprep を使用しない場合、メタデータのユーザーデータログに次のエラーが表示されることがあります。 「Failed to get metadata: The result from http://169.254.169.254/latest/user-data was empty.Unable to execute userdata: Userdata was not provided.」
CloudFormation を使用した Windows オペレーティングシステムのベストプラクティスに従う
設定に対するトラブルシューティングを行うために、次のベストプラクティスを使用します。
-
例外をキャッチするには、PowerShell スクリプトの先頭に $ErrorActionPreference = "Stop" を含めます。
-
CloudFormation テンプレート内の Windows パスを参照する場合は、パスの先頭にフォワードスラッシュ (/) を追加します。例:
"commands" : { "1-extract" : { "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log" }
-
Windows スタックの場合は、WaitCondition ハンドル URL を base64 でエンコードします。例:
cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n"

関連するコンテンツ
- 質問済み 2年前lg...
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 3年前
- AWS公式更新しました 2年前