

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Stack basati sul bootstrap Windows CloudFormation
<a name="cfn-windows-stacks-bootstrapping"></a>

Questo argomento descrive come eseguire il bootstrap di uno stack di Windows e risolvere i problemi di creazione dello stack. 

**Topics**
+ [Dati utente nelle istanze EC2](#cfn-windows-bootstrapping-user-data)
+ [CloudFormation script di supporto](#cfn-windows-bootstrapping-helper-scripts)
+ [Esempio di processo di bootstrap di uno stack di Windows](#cfn-windows-bootstrapping-example)
+ [Evita le barre rovesciate nei percorsi dei file Windows](#cfn-windows-stacks-escape-backslashes)
+ [Gestione dei servizi Windows](#cfn-windows-stacks-manage-windows-services)
+ [Risoluzione dei problemi di creazione dello stack](#cfn-windows-stacks-troubleshooting)

## Dati utente nelle istanze EC2
<a name="cfn-windows-bootstrapping-user-data"></a>

I dati utente sono una funzionalità di Amazon EC2 che consente di trasmettere script o informazioni di configurazione a un’istanza EC2 al momento dell’avvio. 

Per le nuove istanze EC2 Windows:
+ È possibile utilizzare script batch (utilizzando i tag `<script>`) o script PowerShell (utilizzando i tag `<powershell>`).
+ L’esecuzione degli script è gestita da EC2Launch.

**Importante**  
Se stai creando la tua Windows AMI da utilizzare con CloudFormation, assicurati che la versione EC2Launch v2 sia configurata correttamente. EC2Launchv2 è necessaria per consentire agli strumenti di CloudFormation bootstrap di inizializzare e configurare Windows correttamente le istanze durante la creazione dello stack. Per ulteriori informazioni, consulta [Use the EC2Launch v2 agent to perform tasks during EC2 Windows instance launch](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch-v2.html) nella *Guida per l’utente Amazon EC2*.  
Per informazioni su AWS Windows AMIs, consulta l'[AWSWindowsAMI Reference](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/windows-amis.html).

## CloudFormation script di supporto
<a name="cfn-windows-bootstrapping-helper-scripts"></a>

Gli script di supporto sono utilità per configurare le istanze durante il processo di bootstrap. Utilizzati con i dati utente di Amazon EC2, forniscono potenti opzioni di configurazione.

CloudFormation fornisce i seguenti script di supporto in Python che puoi usare per installare software e avviare servizi su un'istanza Amazon EC2 che crei come parte del tuo stack:
+  `cfn-init`: utilizzalo per recuperare e interpretare i metadati delle risorse, installare pacchetti, creare file e avviare i servizi.
+  `cfn-signal`: utilizzalo per segnalare con un `CreationPolicy`, in modo da sincronizzare altre risorse nello stack quando la risorsa o l’applicazione del prerequisito è pronta.
+  `cfn-get-metadata`: utilizzalo per recuperare i metadati per una risorsa o un percorso di una chiave specifica.
+  `cfn-hup`: utilizzalo per verificare la presenza di aggiornamenti dei metadati ed eseguire gli hook personalizzati quando le modifiche vengono rilevate.

Puoi chiamare gli script direttamente dal tuo modello. Lo script funziona in combinazione con i metadati delle risorse definiti nello stesso modello. Gli script eseguiti sull’istanza Amazon EC2 durante il processo di creazione dello stack.

*Per ulteriori informazioni, consulta il riferimento agli [script di CloudFormation supporto nella Template Reference Guide](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/cfn-helper-scripts-reference.html).CloudFormation *

## Esempio di processo di bootstrap di uno stack di Windows
<a name="cfn-windows-bootstrapping-example"></a>

Esaminiamo alcuni frammenti di esempio tratti da un modello Windows Server che esegue le seguenti azioni:
+ Avvia un’istanza EC2 denominata `TestInstance` da un’AMI Windows Server 2022.
+ Crea un semplice file di test per verificare che `cfn-init` funzioni.
+ Configura `cfn-hup` per la gestione continua della configurazione.
+ Utilizza una `CreationPolicy` per garantire che l’istanza segnali il completamento con successo.

Lo script helper `cfn-init` viene utilizzato per eseguire ciascuna di tali azioni, in base alle informazioni nella risorsa `AWS::CloudFormation::Init` nel modello.

La sezione `AWS::CloudFormation::Init` è denominata `TestInstance` e inizia con la seguente dichiarazione.

```
TestInstance:
  Type: AWS::EC2::Instance
  Metadata:
    AWS::CloudFormation::Init:
      configSets:
        default:
          - create_files
          - start_services
```

Successivamente, viene dichiarata la sezione `files` di `AWS::CloudFormation::Init`.

```
      create_files:
        files:
          c:\cfn\test.txt:
            content: !Sub |
              Hello from ${AWS::StackName}
          c:\cfn\cfn-hup.conf:
            content: !Sub |
              [main]
              stack=${AWS::StackName}
              region=${AWS::Region}
              interval=2
          c:\cfn\hooks.d\cfn-auto-reloader.conf:
            content: !Sub |
              [cfn-auto-reloader-hook]
              triggers=post.update
              path=Resources.TestInstance.Metadata.AWS::CloudFormation::Init
              action=cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region}
```

Qui vengono creati tre file e collocati nella directory `C:\cfn` sull’istanza del server:
+ `test.txt`, un semplice file di test che verifica il corretto funzionamento di `cfn-init` e consente di creare file con contenuto dinamico.
+ `cfn-hup.conf`, il file di configurazione per `cfn-hup` con un intervallo di controllo di 2 minuti.
+ `cfn-auto-reloader.conf`, il file di configurazione per l’hook utilizzato da `cfn-hup` per l’inizializzazione e l’aggiornamento (chiamando `cfn-init`) quando i metadati in `AWS::CloudFormation::Init` cambiano.

Quella successiva è la sezione `start_services` che configura i servizi Windows.

```
      start_services:
        services:
          windows:
            cfn-hup:
              enabled: true
              ensureRunning: true
              files:
                - c:\cfn\cfn-hup.conf
                - c:\cfn\hooks.d\cfn-auto-reloader.conf
```

Questa sezione garantisce l’avvio del servizio `cfn-hup` e si riavvierà automaticamente se i file di configurazione vengono modificati. Il servizio monitora le modifiche ai CloudFormation metadati e viene eseguito nuovamente `cfn-init` quando vengono rilevati aggiornamenti.

A seguire c’è la sezione `Properties`.

```
TestInstance:
  Type: AWS::EC2::Instance
  CreationPolicy:
    ResourceSignal:
      Timeout: PT20M
  Metadata:
    AWS::CloudFormation::Init:
      # ... metadata configuration ...
  Properties:
    InstanceType: t2.large
    ImageId: '{{resolve:ssm:/aws/service/ami-windows-latest/Windows_Server-2022-English-Full-Base}}'
    SecurityGroupIds:
      - !Ref InstanceSecurityGroup
    KeyName: !Ref KeyPairName
    UserData:
      Fn::Base64: !Sub |
        <powershell>
        cfn-init.exe -v -s ${AWS::StackName} -r TestInstance -c default --region ${AWS::Region}
        cfn-signal.exe -e $lastexitcode --stack ${AWS::StackName} --resource TestInstance --region ${AWS::Region}
        </powershell>
```

In questa sezione, la proprietà `UserData` contiene uno script PowerShell che verrà eseguito da EC2Launch, racchiuso tra tag `<powershell>`. Lo script viene eseguito `cfn-init` con `default` ConfigSet, quindi viene utilizzato `cfn-signal` per riportare il codice di uscita a. CloudFormation La `CreationPolicy` viene utilizzata per garantire che l’istanza sia configurata correttamente prima che la creazione dello stack sia considerata completa.

La proprietà `ImageId` utilizza un parametro pubblico di Systems Manager Parameter Store per recuperare automaticamente l’ID AMI 2022 di Windows Server più recente. Questo approccio elimina la necessità di mappature AMI specifiche per regione e garantisce di ottenere sempre l’AMI più recente. L'utilizzo dei parametri di Systems Manager per AMI IDs è una procedura consigliata per mantenere i riferimenti AMI correnti. Se intendi connetterti alla tua istanza, assicurati che la proprietà `SecurityGroupIds` faccia riferimento a un gruppo di sicurezza che consente l’accesso RDP.

La `CreationPolicy` viene dichiarata come parte delle proprietà della risorsa e specifica un periodo di timeout. Il comando `cfn-signal` nei dati utente segnala quando la configurazione dell’istanza è completa:

```
TestInstance:
  Type: AWS::EC2::Instance
  CreationPolicy:
    ResourceSignal:
      Timeout: PT20M
  Properties:
    # ... other properties ...
```

Poiché il processo di avvio è minimo e crea solo file e avvia i servizi, `CreationPolicy` attende 20 minuti (PT20M) prima del timeout. Il timeout viene specificato utilizzando il formato di durata ISO 8601. Tieni presente che, in genere, le istanze Windows richiedono più tempo per l’avvio rispetto alle istanze Linux, quindi esegui un test approfondito per determinare i valori di timeout più adatti alle tue esigenze.

Se va tutto bene, la `CreationPolicy` viene completata correttamente e puoi accedere all’istanza Windows Server utilizzando il suo indirizzo IP pubblico. Una volta completata la creazione dello stack, l'ID dell'istanza e l'indirizzo IP pubblico verranno visualizzati nella scheda **Output** della console. CloudFormation 

```
Outputs:
  InstanceId:
    Value: !Ref TestInstance
    Description: Instance ID of the Windows Server
  PublicIP:
    Value: !GetAtt TestInstance.PublicIp
    Description: Public IP address of the Windows Server
```

Puoi anche verificare manualmente che il bootstrap abbia funzionato correttamente connettendoti all’istanza tramite RDP e controllando che il file `C:\cfn\test.txt` esista e contenga il contenuto previsto. Per ulteriori informazioni sulla connessione a istanze Windows, consulta [Connect to your Windows instance using RDP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connecting_to_windows_instance.html) nella *Guida per l’utente di Amazon EC2*.

## Evita le barre rovesciate nei percorsi dei file Windows
<a name="cfn-windows-stacks-escape-backslashes"></a>

Quando fai riferimento ai Windows percorsi nei CloudFormation modelli, ricorda sempre di evitare correttamente le barre rovesciate (`\`) in base al formato del modello che stai utilizzando.
+ Per i modelli JSON devi usare le doppie barre rovesciate nei percorsi dei file Windows perché JSON considera la barra rovesciata come un carattere di escape. La prima barra rovesciata sfugge alla seconda, dando come risultato l’interpretazione di una singola barra rovesciata letterale.

  ```
  "commands" : {
    "1-extract" : {
      "command" : "C:\\SharePoint\\SharePointFoundation2010.exe /extract:C:\\SharePoint\\SPF2010 /quiet /log:C:\\SharePoint\\SharePointFoundation2010-extract.log"
    }
  }
  ```
+ Per i modelli YAML, in genere sono sufficienti barre rovesciate singole.

  ```
  commands:
    1-extract:
      command: C:\SharePoint\SharePointFoundation2010.exe /extract:C:\SharePoint\SPF2010 /quiet /log:C:\SharePoint\SharePointFoundation2010-extract.log
  ```

## Gestione dei servizi Windows
<a name="cfn-windows-stacks-manage-windows-services"></a>

I servizi Windows vengono gestiti come servizi Linux, ma si utilizza una chiave `windows` anziché `sysvinit`. Nell’esempio seguente viene avviato il servizio `cfn-hup`, impostato su Automatico, e viene riavviato il servizio se `cfn-init` modifica i file di configurazione `c:\cfn\cfn-hup.conf` o `c:\cfn\hooks.d\cfn-auto-reloader.conf`.

```
        services:
          windows:
            cfn-hup:
              enabled: true
              ensureRunning: true
              files:
                - c:\cfn\cfn-hup.conf
                - c:\cfn\hooks.d\cfn-auto-reloader.conf
```

È possibile gestire altri servizi Windows nello stesso modo utilizzando il nome, non il nome visualizzato, per fare riferimento al servizio.

## Risoluzione dei problemi di creazione dello stack
<a name="cfn-windows-stacks-troubleshooting"></a>

Se si verifica un errore durante la creazione dello stack, il comportamento predefinito è il rollback in caso di errore. Sebbene sia in genere una buona impostazione predefinita perché evita costi non necessari, rende difficile il debug del motivo dell’errore di creazione dello stack.

**Per disattivare questo comportamento durante la creazione o l'aggiornamento dello stack con la CloudFormation console, scegli l'opzione **Preserva risorse con successo in Opzioni di errore** dello stack.** Per ulteriori informazioni, consulta [Scegli in che modo gestire gli errori durante il provisioning delle risorse](stack-failure-options.md). Questo consente di accedere all’istanza e visualizzare i file di log per individuare problemi rilevati durante l’esecuzione degli script di avvio.

Log importanti da guadare sono:
+ Il log di configurazione EC2 in `%ProgramData%\Amazon\EC2Launch\log\agent.log`
+ Il log **cfn-init** su `C:\cfn\log\cfn-init.log` (controlla i codici di uscita e i messaggi di errore per punti di errore specifici)

Per ulteriori log, consulta gli argomenti seguenti nella *Guida per l’utente di Amazon EC2*:
+ [EC2Launchstruttura delle cartelle](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2config-service.html#UsingConfigXML_WinAMI)
+ [Struttura di directory di EC2Launch v2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2launch-v2.html#ec2launch-v2-directory)

Per ulteriori informazioni sulla risoluzione dei problemi di bootstrap, vedi [Come posso risolvere gli script di supporto che non si avviano in uno stack](https://repost.aws/knowledge-center/cloudformation-helper-scripts-windows) con istanze? CloudFormation Windows .