내 도우미 스크립트는 Windows 인스턴스가 있는 AWS CloudFormation 스택에서 부트스트랩되지 않습니다.
간략한 설명
Windows 인스턴스를 재부팅합니다. Windows 인스턴스를 재부팅한 후에도 헬퍼 스크립트가 실행되지 않으면 부트스트랩 문제 해결 섹션의 단계를 완료하세요.
다음 오류가 발생하면 cfn-signal에 문제가 있는 것일 수 있습니다: "X를 기대할 때 0개의 조건을 수신했거나 지정된 기간 내에 X개의 리소스 신호를 수신하지 못했습니다." 이 문제를 해결하려면 cfn-신호 문제 해결 섹션의 단계를 완료하세요.
두 가지 문제 모두 CloudFormation을 사용하는 Windows 운영 체제에 대한 모범 사례 따르기 섹션의 단계를 완료하세요.
해결 방법
부트스트랩 문제 해결
cfn-init 구성 집합의 명령 섹션을 확인하여 waitAfterComplete가 영원히로 설정되어 있는지 확인합니다 . 예시:
"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\로그
참고: 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 신호 문제 해결
다음 단계를 완료하십시오.
-
cfn-신호를 올바르게 구성했는지 확인합니다.
중요: 파워셸 스크립트에는 \ -e $lastexitcode를 사용하고, 윈도우 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의 시간 초과를 늘립니다. 구성 예시는 Windows 스택 부트스트랩 예시를 참조하세요.
참고: Windows 인스턴스는 일반적으로 초기 부팅 프로세스를 완료하는 데 Linux 인스턴스보다 시간이 오래 걸립니다.
-
사용자 지정 Amazon 머신 이미지(AMI)를 사용하는 경우 Sysprep을 사용하여 AMI를 생성해야 합니다. Sysprep을 사용하지 않는 경우 메타데이터에 대한 사용자 데이터 로그에 다음과 같은 오류가 표시될 수 있습니다: "메타데이터를 가져오지 못했습니다: http://169.254.169.254/latest/user-data 의 결과는 비어 있습니다. 사용자 데이터를 실행할 수 없습니다: 사용자 데이터가 제공되지 않았습니다."
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"