Esegui comandi sulla tua istanza Amazon EC2 al momento del lancio - Amazon Elastic Compute Cloud

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à.

Esegui comandi sulla tua istanza Amazon EC2 al momento del lancio

Quando avvii un'istanza Amazon EC2, puoi passare i dati utente all'istanza utilizzata per eseguire attività di configurazione automatizzate o per eseguire script dopo l'avvio dell'istanza.

Se sei interessato a scenari di automazione più complessi, potresti prendere in considerazione o AWS CloudFormation . AWS OpsWorks Per ulteriori informazioni, consulta gli argomenti seguenti:

Sulle istanze Linux, puoi passare due tipi di dati utente ad Amazon EC2: script di shell e direttive cloud-init. Puoi anche passare questi dati nella procedura guidata di avvio dell'istanza come testo semplice, come file (utile per avviare istanze con gli strumenti della riga di comando) o come testo con codifica base64 (per le chiamate API).

Nelle istanze Windows, gli agenti di avvio gestiscono gli script dei dati utente. Le sezioni seguenti illustrano le differenze nel modo in cui i dati utente vengono gestiti su ciascun sistema operativo.

In che modo Amazon EC2 gestisce i dati utente per le istanze Linux

Negli esempi seguenti, i comandi del server Installa un LAMP su Amazon Linux 2 vengono convertiti in uno script di shell e in un set di direttive cloud-init che vengono eseguite all'avvio dell'istanza. In ogni esempio, le seguenti attività vengono eseguite in base ai dati utente:

  • I pacchetti del software di distribuzione vengono aggiornati.

  • Il server Web necessario, php, e i pacchetti mariadb vengono installati.

  • Il servizio httpd viene avviato e abilitato tramite systemctl.

  • Il ec2-user viene aggiunto al gruppo apache.

  • Vengono configurati la proprietà e le autorizzazioni di file appropriati per la directory Web e i file in essa contenuti.

  • Viene creata una semplice pagina Web per testare il server Web e il motore PHP.

Prerequisiti

Per gli esempi in questo argomento si presuppone quanto riportato di seguito:

  • L'istanza dispone di un nome DNS pubblico raggiungibile da Internet.

  • Il gruppo di sicurezza associato all'istanza è configurato per consentire il traffico SSH (porta 22) in modo da potersi connettere all'istanza per visualizzare i file di log di output.

  • L'istanza viene avviata con un'AMI Amazon Linux 2. Queste istruzioni sono pensate per essere utilizzate con Amazon Linux 2. I comandi e le direttive potrebbero non funzionare per altre distribuzioni Linux. Per ulteriori informazioni su altre distribuzioni, ad esempio sul relativo supporto delle direttive cloud-init, consulta la documentazione specifica.

Dati utente e script della shell

Se hai familiarità con lo scripting della shell, questo è il modo più semplice e completo per inviare le istruzioni a un'istanza all'avvio. L'aggiunta di queste attività in fase di avvio aumenta il tempo necessario per l'avvio dell'istanza. Ti consigliamo di prevedere alcuni minuti aggiuntivi per il completamento delle attività prima di procedere alla verifica del corretto completamento dello script utente.

Importante

Per impostazione predefinita, gli script di dati utente e le direttive cloud-init vengono eseguiti solo durante il ciclo di avvio quando si avvia un'istanza per la prima volta. È possibile aggiornare la configurazione per garantire che gli script dei dati utente e le direttive cloud-init vengano eseguiti ogni volta che si riavvia l'istanza. Per ulteriori informazioni, consulta Come posso utilizzare i dati utente per eseguire automaticamente uno script a ogni riavvio della mia istanza Amazon EC2 Linux? nel AWS Knowledge Center.

Gli script della shell relativi ai dati utente devono iniziare con i caratteri #! e con il percorso dell'interprete che deve leggere lo script, in genere /bin/bash). Per un'introduzione allo shell scripting, consultate il manuale di riferimento di Bash sul sito web del sistema operativo GNU.

Gli script immessi come dati utente vengono eseguiti come utente root. Non utilizzare pertanto il comando sudo nello script. Ricorda che tutti i file creati saranno di proprietà dell'utente root. Se devi concedere l'accesso ai file a utenti non root, devi modificare di conseguenza le autorizzazioni nello script. Inoltre, dal momento che lo script non viene eseguito in modo interattivo, non puoi includere comandi che richiedono il feedback degli utenti, ad esempio il comando yum update senza il contrassegno -y.

Se utilizzi un' AWS API, inclusa la AWS CLI, in uno script di dati utente, devi utilizzare un profilo di istanza all'avvio dell'istanza. Un profilo di istanza fornisce le AWS credenziali appropriate richieste dallo script dei dati utente per emettere la chiamata API. Per ulteriori informazioni, consulta Utilizzo dei profili dell'istanza in Guida per l'utente di IAM. Le autorizzazioni assegnate al ruolo IAM dipendono dai servizi chiamati con l'API. Per ulteriori informazioni, consulta Ruoli IAM per Amazon EC2.

Il file di log dell'output della direttiva cloud-init acquisisce l'output della console in modo da semplificare il debug degli script dopo l'avvio se l'istanza ha un comportamento imprevisto. Per visualizzare il file di log, connettiti all'istanza e apri /var/log/cloud-init-output.log.

Quando uno script di dati utente viene elaborato, viene copiato ed eseguito da /var/lib/cloud/instances/instance-id/. Lo script non viene eliminato dopo l'esecuzione. Assicurati di eliminare gli script di dati utente da /var/lib/cloud/instances/instance-id/ prima di creare un'AMI dall'istanza. In caso contrario, lo script esisterà in questa directory su qualsiasi istanza avviata dall'AMI.

Dati utente e console

Puoi specificare i dati utente dell'istanza al momento dell'avvio dell'istanza. Se il volume root dell'istanza è un volume EBS, puoi anche arrestare l'istanza e aggiornare i relativi dati utente.

Specifica dei dati utente dell'istanza all'avvio

Segui la procedura per l'avvio di un'istanza. Il campo User data (Dati utente) campo si trova nella sezione Dettagli avanzati della procedura guidata di avvio dell'istanza. Inserisci lo script della shell nel campo User data (Dati utente), quindi completa la procedura di avvio dell'istanza.

Nello script di esempio riportato di seguito, lo script crea e configura il server Web.

#!/bin/bash yum update -y amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 yum install -y httpd mariadb-server systemctl start httpd systemctl enable httpd usermod -a -G apache ec2-user chown -R ec2-user:apache /var/www chmod 2775 /var/www find /var/www -type d -exec chmod 2775 {} \; find /var/www -type f -exec chmod 0664 {} \; echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Prevedi tempo aggiuntivo per l'avvio dell'istanza e l'esecuzione dei comandi nello script e quindi verifica se lo script ha completato le attività come previsto.

Nel nostro esempio, in un browser Web immetti l'URL del file di test PHP creato dallo script. Questo URL è l'indirizzo DNS pubblico dell'istanza, seguito da una barra e dal nome di file.

http://my.public.dns.amazonaws.com/phpinfo.php

Viene visualizzata la pagina delle informazioni PHP. Se non sei in grado di vedere questa pagina, controlla che il gruppo di sicurezza che stai utilizzando contenga una regola che consenta il traffico HTTP (porta 80). Per ulteriori informazioni, consulta Aggiunta di regole a un gruppo di sicurezza.

(Facoltativo) Se lo script non ha completato le attività previste oppure se vuoi semplicemente verificare che lo script sia stato completato senza errori, connettiti all'istanza, esamina il file di log dell'output della direttiva cloud-init (/var/log/cloud-init-output.log) e cerca eventuali messaggi di errore nell'output.

Per informazioni aggiuntive sul debug, puoi creare un archivio in formato Mime multipart contenente una sezione di dati cloud-init con la seguente direttiva:

output : { all : '| tee -a /var/log/cloud-init-output.log' }

Questa direttiva invia l'output del comando dallo script a /var/log/cloud-init-output.log. Per ulteriori informazioni sui formati dei dati cloud-init e sulla creazione dell'archivio Mime in più parti, consulta la sezione relativa ai formati cloud-init.

Visualizzazione e aggiornamento dei dati utente dell'istanza

Per aggiornare i dati utente dell'istanza, è necessario prima arrestare l'istanza. Se l'istanza è in esecuzione, è possibile visualizzare i dati utente ma non modificarli.

avvertimento

Quando interrompi un'istanza, i dati presenti sui volumi dell'instance store vengono cancellati. Per non perdere i dati dei volumi di archivio istanza, è opportuno creare una copia di backup nell'archiviazione persistente.

Per modificare i dati utente dell'istanza
  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, seleziona Instances (Istanze).

  3. Seleziona l'istanza e scegli Instance state (Stato istanza), Stop instance (Arresta istanza). Se questa opzione è disabilitata, l'istanza è già arrestata o il suo dispositivo root è un volume di instance store.

  4. Quando viene richiesta la conferma, selezionare Stop (Arresta). Possono essere necessari alcuni minuti per arrestare l'istanza.

  5. Con l'istanza ancora selezionata, selezionare Actions (Operazioni), Instance Settings (Impostazioni istanza), Edit user data (Modifica i dati utente).

  6. Modificare i dati utente in base alle esigenze, quindi scegliere Save (Salva).

  7. Avviare l'istanza. I nuovi dati utente sono visibili nell'istanza dopo averla avviata. Tuttavia, gli script dei dati utente non vengono eseguiti.

Dati utente e direttive cloud-init

Il pacchetto cloud-init configura aspetti specifici di una nuova istanza di Amazon Linux quando viene avviata. In particolare, configura il file .ssh/authorized_keys per ec2-user in modo da consentirti di eseguire il login utilizzando la tua chiave privata. Per ulteriori informazioni sulle attività di configurazione eseguite dal pacchetto cloud-init per le istanze Amazon Linux, consulta Using cloud-init on Amazon Linux 2 nella Amazon Linux 2 User Guide.

Le direttive utente cloud-init possono essere trasferite a un'istanza all'avvio con le stesse modalità di trasferimento di uno script, anche se la sintassi è diversa. Per ulteriori informazioni su cloud-init, visita la pagina http://cloudinit.readthedocs.org/en/latest/index.html.

Importante

Per impostazione predefinita, gli script di dati utente e le direttive cloud-init vengono eseguiti solo durante il ciclo di avvio quando si avvia un'istanza per la prima volta. È possibile aggiornare la configurazione per garantire che gli script dei dati utente e le direttive cloud-init vengano eseguiti ogni volta che si riavvia l'istanza. Per ulteriori informazioni, consulta Come posso utilizzare i dati utente per eseguire automaticamente uno script a ogni riavvio della mia istanza Amazon EC2 Linux? nel AWS Knowledge Center.

L'aggiunta di queste attività in fase di avvio aumenta il tempo necessario per l'avvio di un'istanza. Ti consigliamo di prevedere alcuni minuti aggiuntivi per il completamento delle attività prima di procedere alla verifica del corretto completamento delle direttive relative ai dati utente.

Per trasferire le direttive cloud-init a un'istanza con i dati utente
  1. Segui la procedura per l'avvio di un'istanza. Il campo User data (Dati utente) campo si trova nella sezione Dettagli avanzati della procedura guidata di avvio dell'istanza. Inserisci il testo della direttiva cloud-init nel campo User data (Dati utente), quindi completa la procedura di avvio dell'istanza.

    Nell'esempio riportato di seguito, le direttive creano e configurano un server Web su Amazon Linux 2. La riga #cloud-config all'inizio è obbligatoria per l'identificazione dei comandi come direttive cloud-init.

    #cloud-config repo_update: true repo_upgrade: all packages: - httpd - mariadb-server runcmd: - [ sh, -c, "amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2" ] - systemctl start httpd - sudo systemctl enable httpd - [ sh, -c, "usermod -a -G apache ec2-user" ] - [ sh, -c, "chown -R ec2-user:apache /var/www" ] - chmod 2775 /var/www - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ] - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ] - [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
  2. Prevedi tempo aggiuntivo per l'avvio dell'istanza e l'esecuzione delle direttive nei dati utente e quindi verifica se le direttive hanno completato le attività come previsto.

    Nel nostro esempio, in un browser Web, inserisci l'URL del file di test PHP creato dalle direttive. Questo URL è l'indirizzo DNS pubblico dell'istanza, seguito da una barra e dal nome di file.

    http://my.public.dns.amazonaws.com/phpinfo.php

    Viene visualizzata la pagina delle informazioni PHP. Se non sei in grado di vedere questa pagina, controlla che il gruppo di sicurezza che stai utilizzando contenga una regola che consenta il traffico HTTP (porta 80). Per ulteriori informazioni, consulta Aggiunta di regole a un gruppo di sicurezza.

  3. (Facoltativo) Se le direttive non hanno completato le attività previste oppure se desideri verificare che siano state completate senza errori, connettiti all'istanza, esamina il file di log dell'output (/var/log/cloud-init-output.log) e cerca eventuali messaggi di errore nell'output. Per ulteriori informazioni sul debug, è possibile aggiungere la seguente riga alle direttive:

    output : { all : '| tee -a /var/log/cloud-init-output.log' }

    Questa direttiva invia l'output del comando runcmd a /var/log/cloud-init-output.log.

I dati dell'utente e il AWS CLI

È possibile utilizzare i AWS CLI per specificare, modificare e visualizzare i dati utente per l'istanza. Per informazioni sulla visualizzazione dei dati utente dall'istanza tramite metadati dell'istanza, consulta Recupero dei dati utente dell'istanza dall'istanza.

In Windows, è possibile utilizzare il AWS Tools for Windows PowerShell anziché utilizzare AWS CLI. Per ulteriori informazioni, consulta Dati utente e strumenti per Windows PowerShell.

Esempio: specifica dei dati utente all'avvio

Per specificare i dati utente all'avvio di un'istanza, utilizza il comando run-instances con il parametro --user-data. Conrun-instances, AWS CLI esegue la codifica in base64 dei dati utente per te.

L'esempio seguente illustra come specificare uno script come stringa nella riga di comando:

aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \ --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \ --user-data echo user data

L'esempio seguente illustra come specificare uno script utilizzando un file di testo. Assicurati di utilizzare il prefisso file:// per specificare il file.

aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \ --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \ --user-data file://my_script.txt

Di seguito è riportato un esempio di file di testo con uno script della shell.

#!/bin/bash yum update -y service httpd start chkconfig httpd on
Esempio: modifica dei dati utente di un'istanza arrestata

Puoi modificare i dati utente di un'istanza arrestata tramite il comando modify-instance-attribute. Conmodify-instance-attribute, AWS CLI non esegue la codifica base64 dei dati utente per voi.

  • Su un computer Linux utilizzare il comando con codifica Base64 per codificare i dati utente.

    base64 my_script.txt >my_script_base64.txt
  • Su un computer Windows, utilizza il comando certutil per codificare i dati utente. Prima di poter utilizzare questo file con AWS CLI, è necessario rimuovere la prima riga (BEGIN CERTIFICATE) e l'ultima (END CERTIFICATE).

    certutil -encode my_script.txt my_script_base64.txt notepad my_script_base64.txt

Utilizza i parametri --attribute e --value per utilizzare il file di testo codificato per specificare i dati utente. Assicurati di utilizzare il prefisso file:// per specificare il file.

aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --value file://my_script_base64.txt
Esempio: cancellazione dei dati utente di un'istanza arrestata

Per eliminare i dati utente esistenti, utilizzare il comando modify-instance-attribute come segue:

aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --user-data Value=
Esempio: visualizzazione dei dati utente

Per recuperare i dati utente di un'istanza, utilizza il comando describe-instance-attribute. Condescribe-instance-attribute, AWS CLI non esegue la decodifica in base64 dei dati utente per conto vostro.

aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData

L'esempio seguente è l'output contenente i dati utente con codifica base64.

{ "UserData": { "Value": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQpzZXJ2aWNlIGh0dHBkIHN0YXJ0CmNoa2NvbmZpZyBodHRwZCBvbg==" }, "InstanceId": "i-1234567890abcdef0" }
  • Su un computer Linux, utilizza l'opzione --query per recuperare i dati utente codificati e il comando con codifica Base64 per decodificarli.

    aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" | base64 --decode
  • Su un computer Windows, utilizza l'opzione --query per recuperare i dati utente codificati e il comando certutil per decodificarli. Si noti che l'output codificato viene memorizzato in un file, mentre l'output decodificato viene memorizzato in un file diverso.

    aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" >my_output.txt certutil -decode my_output.txt my_output_decoded.txt type my_output_decoded.txt

Di seguito è riportato un output di esempio.

#!/bin/bash yum update -y service httpd start chkconfig httpd on

Combinazione di script di shell e direttive cloud-init

Per impostazione predefinita, nei dati utente puoi includere solo un tipo di contenuto alla volta. Tuttavia, puoi utilizzare tipi di contenuto text/cloud-config e text/x-shellscript in un file multipart MIME per includere nei dati utente sia uno script di shell che direttive cloud-init.

Di seguito è illustrato il formato multipart MIME.

Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud-init directives --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash shell script commands --//--

Ad esempio, i seguenti dati utente includono direttive cloud-init e uno script di shell bash. Le direttive cloud-init creano un file (/test-cloudinit/cloud-init.txt) e scrivono Created by cloud-init in tale file. Lo script della shell bash crea un file (/test-userscript/userscript.txt) e scrive Created by bash shell script in quel file.

Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config runcmd: - [ mkdir, /test-cloudinit ] write_files: - path: /test-cloudinit/cloud-init.txt content: Created by cloud-init --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash mkdir test-userscript touch /test-userscript/userscript.txt echo "Created by bash shell script" >> /test-userscript/userscript.txt --//--

In che modo Amazon EC2 gestisce i dati utente per le istanze Windows

Nelle istanze Windows, gli agenti di avvio predefiniti per la versione del sistema operativo in uso gestiscono i dati utente nel modo seguente.

  • EC2Launch v2esegue script di dati utente su Windows Server 2022

  • esegue script di dati utente su Windows Server 2016 e 2019

  • esegue script di dati utente su versioni di Windows Server precedenti a Windows Server 2016

Per esempi di assemblaggio di una UserData proprietà in un AWS CloudFormation modello, vedere Base64 Encoded Property e Base64 Encoded UserData Property with and. UserData AccessKey SecretKey

Per un esempio di esecuzione di comandi su un'istanza all'interno di un gruppo Auto Scaling che funziona con i lifecycle hook, consulta Tutorial: Configura i dati utente per recuperare lo stato del ciclo di vita di destinazione tramite i metadati dell'istanza nella Amazon EC2 Auto Scaling User Guide.

Script di dati utente

Per EC2Config o per EC2Launch eseguire gli script, devi racchiudere lo script in un tag speciale quando lo aggiungi ai dati utente. Il tag utilizzato dipende dal fatto che i comandi vengano eseguiti in una finestra del prompt dei comandi (comandi batch) o utilizzino Windows. PowerShell

Se si specificano sia uno script batch che uno PowerShell script di Windows, lo script batch viene eseguito per primo e lo PowerShell script di Windows viene eseguito successivamente, indipendentemente dall'ordine in cui vengono visualizzati nei dati utente dell'istanza.

Se si utilizza un' AWS API, inclusa la AWS CLI, in uno script di dati utente, è necessario utilizzare un profilo di istanza all'avvio dell'istanza. Un profilo di istanza fornisce le AWS credenziali appropriate richieste dallo script dei dati utente per effettuare la chiamata API. Per ulteriori informazioni, consulta Profili delle istanze. Le autorizzazioni assegnate al ruolo IAM dipendono dai servizi chiamati con l'API. Per ulteriori informazioni, consulta Ruoli IAM per Amazon EC2.

Sintassi di script batch

Specificare uno script batch tramite il tag script. Separa i comandi utilizzando le interruzioni di riga, come illustrato nell'esempio seguente.

<script> echo Current date and time >> %SystemRoot%\Temp\test.log echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log </script>

Per impostazione predefinita, gli script di dati utente vengono eseguiti una volta all'avvio dell'istanza. Per eseguire gli script di dati utente ogni volta che si riavvia o avvia l'istanza, aggiungere <persist>true</persist> ai dati utente.

<script> echo Current date and time >> %SystemRoot%\Temp\test.log echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log </script> <persist>true</persist>
Agente EC2Launch v2

Per eseguire uno script di dati utente XML come processo distaccato con l'operazione executeScript EC2Launch v2 nella fase UserData, aggiungi il seguente tag ai dati utente.

<detach>true</detach>

Nota

Il tag di distacco non è supportato nei precedenti agenti di avvio.

<script> echo Current date and time >> %SystemRoot%\Temp\test.log echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log </script> <detach>true</detach>

Sintassi per gli script di Windows PowerShell

Le AMI AWS Windows includono AWS Tools for Windows PowerShell, quindi è possibile specificare questi cmdlet nei dati utente. Se associ un ruolo IAM alla tua istanza, non è necessario specificare le credenziali per i cmdlet, poiché le applicazioni eseguite sull'istanza utilizzano le credenziali del ruolo per accedere alle AWS risorse (ad esempio, i bucket Amazon S3).

Specificate uno script di Windows utilizzando il tag. PowerShell <powershell> Separare i comandi tramite interruzioni di riga. Il tag <powershell> rileva la distinzione tra maiuscole e minuscole.

Per esempio:

<powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell>

Per impostazione predefinita, gli script dei dati utente vengono eseguiti una sola volta all'avvio dell'istanza. Per eseguire gli script di dati utente ogni volta che si riavvia o avvia l'istanza, aggiungere <persist>true</persist> ai dati utente.

<powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

È possibile specificare uno o più PowerShell argomenti con il <powershellArguments> tag. Se non viene passato alcun argomento, EC2Launch e EC2Launch v2 aggiungono il seguente argomento per impostazione predefinita:. -ExecutionPolicy Unrestricted

Esempio:

<powershell> $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <powershellArguments>-ExecutionPolicy Unrestricted -NoProfile -NonInteractive</powershellArguments>
Agente EC2Launch v2

Per eseguire uno script di dati utente XML come processo distaccato con l'operazione executeScript EC2Launch v2 nella fase UserData, aggiungi il seguente tag ai dati utente.

<detach>true</detach>

Nota

Il tag di distacco non è supportato nei precedenti agenti di avvio.

<powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <detach>true</detach>

Sintassi per gli script di configurazione YAML

Se si utilizza EC2Launch v2 per eseguire script, è possibile utilizzare il formato YAML. Per visualizzare le attività di configurazione, i dettagli e gli esempi per EC2Launch v2, consulta Configurazione dell'attività di EC2Launch v2.

Specificare uno script YAML con l'attività executeScript.

Esempio di sintassi YAML per eseguire uno script PowerShell

version: 1.0 tasks: - task: executeScript inputs: - frequency: always type: powershell runAs: localSystem content: |- $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file

Esempio di sintassi YAML per eseguire uno script batch

version: 1.1 tasks: - task: executeScript inputs: - frequency: always type: batch runAs: localSystem content: |- echo Current date and time >> %SystemRoot%\Temp\test.log echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log

Codifica Base64

Se utilizzi l'API Amazon EC2 o uno strumento che non esegue la codifica base64 dei dati utente, codificare direttamente i dati utente. In caso contrario, verrà registrato un errore sull'impossibilità di individuare i tag script o powershell da eseguire. Di seguito è riportato un esempio di codifica tramite Windows. PowerShell

$UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))

Di seguito è riportato un esempio di decodifica utilizzando. PowerShell

$Script = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData))

Per ulteriori informazioni sulla codifica base64, vedere https://www.ietf.org/rfc/rfc4648.txt.

Esecuzione dei dati utente

Per impostazione predefinita, tutte le AMI AWS Windows hanno l'esecuzione dei dati utente abilitata all'avvio iniziale. Puoi specificare che gli script di dati utente vengano eseguiti la prossima volta che l'istanza è riavviata. In alternativa, puoi specificare che gli script di dati utente vengano eseguiti ogni volta che l'istanza è riavviata.

Nota

Per impostazione predefinita, l'esecuzione dei dati utente non è abilitata dopo l'avvio iniziale. Per abilitare l'esecuzione dei dati utente al riavvio o all'avvio dell'istanza, consulta Avvii o riavvii successivi.

Gli script di dati utente vengono eseguiti dall'account amministratore locale quando viene generata una password casuale. In caso contrario, gli script di dati utente vengono eseguiti dall'account del sistema.

Avvio dell'istanza

Gli script nei dati utente dell'istanza vengono eseguiti durante l'avvio iniziale dell'istanza. Se individui il tag persist, l'esecuzione dei dati utente è abilitata per i riavvii successivi. I file di log per EC2Launch v2, EC2Launch ed EC2Config contengono i risultati dell'output standard e i flussi di errore standard.

EC2Launch v2

Il file di log per EC2Launch v2 è C:\ProgramData\Amazon\EC2Launch\log\agent.log.

Nota

La cartella C:\ProgramData potrebbe essere nascosta. Per visualizzare la cartella, è necessario mostrare i file e le cartelle nascosti.

Le informazioni seguenti vengono registrate durante l'esecuzione dei dati utente:

  • Info: Converting user-data to yaml format - Se i dati utente sono stati forniti in formato XML

  • Info: Initialize user-data state - L'inizio dell'esecuzione dei dati utente

  • Info: Frequency is: always - Se l'attività dei dati utente è in esecuzione a ogni avvio

  • Info: Frequency is: once - Se l'attività dei dati utente è in esecuzione una sola volta

  • Stage: postReadyUserData execution completed - La fine dell'esecuzione dei dati dell'utente

EC2Launch

Il file di log per EC2Launch è C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log.

La cartella C:\ProgramData potrebbe essere nascosta. Per visualizzare la cartella, è necessario mostrare i file e le cartelle nascosti.

Le informazioni seguenti vengono registrate durante l'esecuzione dei dati utente:

  • Userdata execution begins - L'inizio dell'esecuzione dei dati utente

  • <persist> tag was provided: true - Se viene individuato il tag persist

  • Running userdata on every boot - Se viene individuato il tag persist

  • <powershell> tag was provided.. running powershell content - Se viene individuato il tag powershell

  • <script> tag was provided.. running script content - Se viene individuato il tag script

  • Message: The output from user scripts - Se vengono eseguiti script di dati utente, il loro output viene registrato

EC2Config

Il file di log per EC2config è C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log. Le informazioni seguenti vengono registrate durante l'esecuzione dei dati utente:

  • Ec2HandleUserData: Message: Start running user scripts - L'inizio dell'esecuzione dei dati utente

  • Ec2HandleUserData: Message: Re-enabled userdata execution - Se viene individuato il tag persist

  • Ec2HandleUserData: Message: Could not find <persist> and </persist> - Se non viene individuato il tag persist

  • Ec2HandleUserData: Message: The output from user scripts - Se vengono eseguiti script di dati utente, il loro output viene registrato

Avvii o riavvii successivi

Quando aggiorni i dati utente dell'istanza, gli script dei dati utente non vengono eseguiti in modo automatico al riavvio dell'istanza. Tuttavia, puoi abilitare l'esecuzione dei dati utente in modo che gli script dei dati utente vengano eseguiti una volta al riavvio dell'istanza o ogni volta che riavvii l'istanza.

Selezionando l'opzione Shutdown with Sysprep (Arresta con Sysprep), gli script dei dati utente vengono eseguiti al successivo avvio o riavvio dell'istanza, anche se non hai abilitato l'esecuzione dei dati utente per i riavvii o avvii successivi. Gli script dei dati utente non verranno eseguiti ai riavvii o agli avvii successivi.

Per abilitare l'esecuzione dei dati utente con EC2Launch v2 (Anteprima AMI)
  • Per eseguire un'attività nei dati utente al primo avvio, impostare frequency su once.

  • Per eseguire un'attività nei dati utente ad ogni avvio, impostare frequency su always.

Abilitazione dell'esecuzione dei dati utente con EC2Launch (Windows Server 2016 o versioni successive)
  1. Connettersi all'istanza Windows.

  2. Aprire una finestra di PowerShell comando ed eseguire il comando seguente:

    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
  3. Disconnettersi dall'istanza Windows. Per eseguire gli script aggiornati al prossimo avvio dell'istanza, arresta l'istanza e aggiorna i dati utente.

Per abilitare l'esecuzione dei dati utente con EC2Config (Windows Server 2012 R2 e versioni precedenti)
  1. Connettersi all'istanza Windows.

  2. Aprire C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe.

  3. Per Dati utente, seleziona Abilita UserData l'esecuzione per il prossimo avvio del servizio.

  4. Disconnettersi dall'istanza Windows. Per eseguire gli script aggiornati al prossimo avvio dell'istanza, arresta l'istanza e aggiorna i dati utente.

Dati utente e console

Puoi specificare i dati utente dell'istanza al momento dell'avvio dell'istanza. Se il volume root dell'istanza è un volume EBS, puoi anche arrestare l'istanza e aggiornare i relativi dati utente.

Specifica dei dati utente dell'istanza all'avvio

Segui la procedura per l'avvio di un'istanza. Il campo User data (Dati utente) campo si trova nella sezione Dettagli avanzati della procedura guidata di avvio dell'istanza. Inserisci PowerShell lo script nel campo Dati utente, quindi completa la procedura di avvio dell'istanza.

Nel seguente screenshot del campo Dati utente, lo script di esempio crea un file nella cartella temporanea di Windows, utilizzando la data e l'orario correnti nel nome del file. Quando includi <persist>true</persist>, lo script viene eseguito ogni volta che riavvii o avvii l'istanza. Se lasci vuota la casella di controllo I dati utente sono già stati codificati in base64, la console Amazon EC2 esegue la codifica in base64 per te.

Campo di testo dei dati utente in Advanced Details (Dettagli avanzati).

Visualizzazione e aggiornamento dei dati utente dell'istanza

Puoi visualizzare i dati utente dell'istanza per qualsiasi istanza, oltre a poter aggiornare i dati utente dell'istanza per un'istanza arrestata.

Aggiornamento dei dati utente di un'istanza tramite la console
  1. Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel riquadro di navigazione, seleziona Instances (Istanze).

  3. Selezionare l'istanza e scegliere Actions (Operazioni), Instance state (Stato istanza), Stop (Arresta).

    avvertimento

    Quando interrompi un'istanza, i dati presenti sui volumi dell'instance store vengono cancellati. Per non perdere i dati dei volumi di archivio istanza, è opportuno creare una copia di backup nell'archiviazione persistente.

  4. Quando viene richiesta la conferma, selezionare Stop (Arresta). Possono essere necessari alcuni minuti per arrestare l'istanza.

  5. Con l'istanza ancora selezionata, selezionare Actions (Operazioni), Instance Settings (Impostazioni istanza), Edit user data (Modifica i dati utente). Non puoi modificare i dati utente se l'istanza è in esecuzione, ma puoi visualizzarli.

  6. Nella finestra di dialogo Edit user data (Modifica i dati utente), aggiorna i dati utente, quindi scegli Save (Salva). Per eseguire gli script dei dati utente ogni volta che riavvii o avvii l'istanza, aggiungi <persist>true</persist>, come illustrato nell'esempio seguente:

    Finestra di dialogo Edit User Data (Modifica dati utente).
  7. Avviare l'istanza. Se hai abilitato l'esecuzione dei dati utente per i riavvii o gli avvii successivi, gli script dei dati utente aggiornati vengono eseguiti come parte del processo di avvio dell'istanza.

Dati utente e strumenti per Windows PowerShell

È possibile utilizzare gli strumenti per Windows PowerShell per specificare, modificare e visualizzare i dati utente per l'istanza. Per informazioni sulla visualizzazione dei dati utente dall'istanza tramite metadati dell'istanza, consulta Recupero dei dati utente dell'istanza dall'istanza. Per informazioni sui dati utente e su AWS CLI, vedereI dati dell'utente e il AWS CLI.

Esempio: Specificare i dati utente dell'istanza all'avvio

Creare un file di testo con i dati utente dell'istanza. Per eseguire gli script dei dati utente ogni volta che si riavvia o avvia l'istanza, aggiungere <persist>true</persist>, come illustrato nell'esempio seguente:

<powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>

Per specificare i dati utente dell'istanza all'avvio dell'istanza, utilizza il New-EC2Instancecomando. Questo comando non esegue la codifica base64 al tuo posto dei dati utente. Utilizza i seguenti comandi per codificare i dati utente in un file di testo denominato script.txt.

PS C:\> $Script = Get-Content -Raw script.txt PS C:\> $UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))

Utilizzare il parametro -UserData per trasferire i dati utente al comando New-EC2Instance.

PS C:\> New-EC2Instance -ImageId ami-abcd1234 -MinCount 1 -MaxCount 1 -InstanceType m3.medium \ -KeyName my-key-pair -SubnetId subnet-12345678 -SecurityGroupIds sg-1a2b3c4d \ -UserData $UserData
Esempio: Aggiornamento dei dati utente dell'istanza di un'istanza arrestata

È possibile modificare i dati utente di un'istanza interrotta utilizzando il Edit-EC2InstanceAttributecomando.

Creare un file di testo con il nuovo script. Utilizza i seguenti comandi per codificare i dati utente nel file di testo denominato new-script.txt.

PS C:\> $NewScript = Get-Content -Raw new-script.txt PS C:\> $NewUserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($NewScript))

Utilizzare i parametri -UserData e -Value per specificare i dati utente.

PS C:\> Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData -Value $NewUserData
Esempio: Visualizzazione dei dati utente dell'istanza

Per recuperare i dati utente per un'istanza, utilizzate il Get-EC2InstanceAttributecomando.

PS C:\> (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData

Di seguito è riportato un output di esempio. Tieni presente che i dati utente sono codificati.

PHBvd2Vyc2hlbGw+DQpSZW5hbWUtQ29tcHV0ZXIgLU5ld05hbWUgdXNlci1kYXRhLXRlc3QNCjwvcG93ZXJzaGVsbD4=

Utilizzare i comandi seguenti per archiviare i dati utente codificati in una variabile e poi decodificarli.

PS C:\> $UserData_encoded = (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData PS C:\> [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData_encoded))

Di seguito è riportato un output di esempio.

<powershell> $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm") New-Item $file -ItemType file </powershell> <persist>true</persist>
Esempio: rinominare l'istanza per corrispondere al valore di tag

È possibile utilizzare il Get-EC2Tagcomando per leggere il valore del tag, rinominare l'istanza al primo avvio in modo che corrisponda al valore del tag e riavviare. Per eseguire efficacemente questo comando, è necessario disporre di un ruolo con autorizzazioni ec2:DescribeTags collegate all'istanza, perché le informazioni sul tag sono recuperate da una chiamata all'API. Per ulteriori informazioni sulle autorizzazioni delle impostazioni utilizzando i ruoli IAM, consulta. Collegamento di un ruolo IAM all'istanza

Nota

Lo script non riesce sulle versioni di Windows Server precedenti al 2008.

<powershell> $instanceId = (invoke-webrequest http://169.254.169.254/latest/meta-data/instance-id -UseBasicParsing).content $nameValue = (get-ec2tag -filter @{Name="resource-id";Value=$instanceid},@{Name="key";Value="Name"}).Value $pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$" #Verify Name Value satisfies best practices for Windows hostnames If ($nameValue -match $pattern) {Try {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} Catch {$ErrorMessage = $_.Exception.Message Write-Output "Rename failed: $ErrorMessage"}} Else {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"} </powershell>

È inoltre possibile rinominare l'istanza utilizzando i tag nei metadati delle istanze, se l'istanza è configurata su access tags from the instance metadata (accedi ai tag dai metadati dell'istanza). Per ulteriori informazioni, consulta Utilizzo dei tag dell'istanza nei metadati dell'istanza.

Nota

Lo script non riesce sulle versioni di Windows Server precedenti al 2008.

<powershell> $nameValue = Get-EC2InstanceMetadata -Path /tags/instance/Name $pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$" #Verify Name Value satisfies best practices for Windows hostnames If ($nameValue -match $pattern) {Try {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} Catch {$ErrorMessage = $_.Exception.Message Write-Output "Rename failed: $ErrorMessage"}} Else {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"} </powershell>