Como soluciono problemas de scripts auxiliares que não inicializam em uma pilha do CloudFormation com instâncias do Windows?

4 minuto de leitura
0

Meus scripts auxiliares não são inicializados em uma pilha do AWS CloudFormation com instâncias do Windows.

Breve descrição

Reinicie a instância do Windows. Se os scripts auxiliares não forem executados após a reinicialização da instância do Windows, conclua as etapas na seção Solucionar problemas de bootstrap.

Se você receber o erro a seguir, poderá ter problemas com o cfn-signal: "Received 0 conditions when expecting X or Failed to receive X resource signal(s) within the specified duration." Para resolver esse problema, conclua as etapas na seção Solucionar problemas com cfn-signal.

Para ambos os problemas, conclua as etapas na seção Siga as práticas recomendadas para sistemas operacionais Windows com o CloudFormation.

Resolução

Solução de problemas de inicialização

Verifique a seção de comandos do seu conjunto de configuração cfn-init para verificar se waitAfterCompletion está definido como forever. Exemplo:

"commands": { "0-restart": {
 "command": "powershell.exe -Command Restart-Computer",
 "waitAfterCompletion": "forever"
 }
 }

Observação: o valor de forever direciona cfn-init para sair e retomar somente após a conclusão da reinicialização. Para obter mais informações, consulte Comandos.

Depois de verificar sua configuração, analise os seguintes logs em busca de erros:

  • O log de cfn-init: C:\cfn\log\cfn-init.log
  • Os logs de eventos do Windows: C:\Windows\System32\winevt\logs
    Observação: o agente EC2Launch v2 do Amazon Elastic Cloud Compute (Amazon EC2) publica logs de eventos do Windows.
  • (Para instâncias do Windows que usam o Serviço EC2Config) o log de configuração: C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt
  • (Para instâncias do Windows que usam o agente EC2Launch v1) o log de lançamento: C:\ProgramData\Amazon\EC2-Windows\Launch\Log

Solução de problemas do cfn-signal

Conclua as seguintes etapas:

  1. Verifique se você configurou cfn-signal corretamente.
    Importante: use -e $lastexitcode em scripts do PowerShell e -e %ERRORLEVEL% em scripts cmd.exe do Windows.
    Para scripts do PowerShell em UserData, use as tags a seguir:

    <powershell></powershell>

    Exemplo de script do 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>

    Para scripts cmd.exe em UserData, use as tags a seguir:

    <script></script>

    Exemplo de 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>
  2. Aumente o Tempo limite de AWS::CloudFormation::WaitCondition. Para obter um exemplo da configuração, consulte Exemplo de bootstrapping de uma pilha do Windows.
    Observação: as instâncias do Windows geralmente demoram mais que as instâncias do Linux para concluir o processo de inicialização.

  3. Se você estiver usando uma imagem de máquina da Amazon (AMI) personalizada, use Sysprep para criar a AMI. Se você não usar Sysprep, poderá receber o seguinte erro no log de dados do usuário para metadados: "Failed to get metadata: The result from was empty. Unable to execute userdata: Userdata was not provided."

Siga as práticas recomendadas para sistemas operacionais Windows com o CloudFormation

Use as seguintes práticas recomendadas para solucionar problemas de configuração:

  • Inclua $ErrorActionPreference = “Stop” na parte superior dos scripts do PowerShell para detectar exceções.

  • Ao fazer referência a um caminho do Windows no seu modelo do CloudFormation, adicione uma barra (/) no início do caminho. Exemplo:

    "commands" : {  "1-extract" : {
        "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
      }
  • Para pilhas do Windows, codifique em base64 o URL do identificador WaitCondition. Exemplo:

    cfn-signal.exe -e %ERRORLEVEL% ", { "Fn::Base64" : { "Ref" : "SharePointFoundationWaitHandle" }}, "\n"
AWS OFICIAL
AWS OFICIALAtualizada há 4 meses