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à.
Processo di bootstrap di stack CloudFormation basati su Windows
Questo argomento descrive come eseguire il bootstrap di uno stack di Windows e risolvere i problemi di creazione dello stack.
Argomenti
Dati utente nelle istanze EC2
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 AMI Windows da utilizzare con CloudFormation, assicurati che la v2 di EC2Launch sia configurata correttamente. La v2 di EC2Launch è necessaria per gli strumenti di bootstrap di CloudFormation per inizializzare e configurare correttamente le istanze Windows durante la creazione dello stack. Per ulteriori informazioni, consulta Use the EC2Launch v2 agent to perform tasks during EC2 Windows instance launch nella Guida per l’utente Amazon EC2.
Per ulteriori informazioni sulle AMI Windows di AWS, consulta AWS Windows AMI Reference.
Script helper di CloudFormation
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 helper in Python che puoi utilizzare per installare software e avviare i servizi su un’istanza Amazon EC2 creata 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 unCreationPolicy, 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 hook personalizzati quando vengono rilevate modifiche.
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 CloudFormation helper scripts reference nella CloudFormation Template Reference Guide.
Esempio di processo di bootstrap di uno stack di Windows
Esaminiamo alcuni frammenti di esempio tratti da un modello Windows Server che esegue le seguenti azioni:
-
Avvia un’istanza EC2 denominata
TestInstanceda un’AMI Windows Server 2022. -
Crea un semplice file di test per verificare che
cfn-initfunzioni. -
Configura
cfn-hupper la gestione continua della configurazione. -
Utilizza una
CreationPolicyper 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 dicfn-inite consente di creare file con contenuto dinamico. -
cfn-hup.conf, il file di configurazione percfn-hupcon un intervallo di controllo di 2 minuti. -
cfn-auto-reloader.conf, il file di configurazione per l’hook utilizzato dacfn-hupper l’inizializzazione e l’aggiornamento (chiamandocfn-init) quando i metadati inAWS::CloudFormation::Initcambiano.
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 metadati di CloudFormation ed esegue 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 esegue cfn-init con il configSet default, quindi utilizza 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 gli ID AMI è una best practice per mantenere i riferimenti AMI aggiornati. 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 bootstrap è minimo, crea solo file e avvia i servizi, la 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 terminata la creazione dello stack, l’ID e l’indirizzo IP dell’istanza 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 nella Guida per l’utente di Amazon EC2.
Evita le barre rovesciate nei percorsi dei file Windows
Quando fai riferimento ai percorsi Windows nei modelli CloudFormation, ricorda sempre di evitare 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
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
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 console CloudFormation, scegli l’opzione Mantieni risorse con provisioning effettuato correttamente in Opzioni di errore degli stack. Per ulteriori informazioni, consulta Scegli in che modo gestire gli errori durante il provisioning delle risorse. 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:
Per ulteriori informazioni sulla risoluzione dei problemi di bootstrap, consulta How do I troubleshoot helper scripts that won’t bootstrap in a CloudFormation stack with Windows instances?