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:
-
Implementazione di applicazioni su Amazon EC2 con AWS CloudFormation nella Guida per l'utente di AWS CloudFormation .
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 pacchettimariadb
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.
Indice
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
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
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/
. Lo script non viene eliminato dopo l'esecuzione. Assicurati di eliminare gli script di dati utente da instance-id
//var/lib/cloud/instances/
prima di creare un'AMI dall'istanza. In caso contrario, lo script esisterà in questa directory su qualsiasi istanza avviata dall'AMI.instance-id
/
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
Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel riquadro di navigazione, seleziona Instances (Istanze).
-
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.
-
Quando viene richiesta la conferma, selezionare Stop (Arresta). Possono essere necessari alcuni minuti per arrestare l'istanza.
-
Con l'istanza ancora selezionata, selezionare Actions (Operazioni), Instance Settings (Impostazioni istanza), Edit user data (Modifica i dati utente).
-
Modificare i dati utente in base alle esigenze, quindi scegliere Save (Salva).
-
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
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
-
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' ]
-
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.phpViene 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 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
--count1
--instance-typem3.medium
\ --key-namemy-key-pair
--subnet-id subnet-abcd1234
--security-group-ids sg-abcd1234
\ --user-dataecho 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
--count1
--instance-typem3.medium
\ --key-namemy-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/bashshell 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 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.
Indice
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.
Tipo di script
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
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
suonce
. -
Per eseguire un'attività nei dati utente ad ogni avvio, impostare
frequency
sualways
.
Abilitazione dell'esecuzione dei dati utente con EC2Launch (Windows Server 2016 o versioni successive)
-
Connettersi all'istanza Windows.
-
Aprire una finestra di PowerShell comando ed eseguire il comando seguente:
C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
-
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)
-
Connettersi all'istanza Windows.
-
Aprire
C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe
. -
Per Dati utente, seleziona Abilita UserData l'esecuzione per il prossimo avvio del servizio.
-
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).](images/configure_ec2config_userdata.png)
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
-
Aprire la console Amazon EC2 all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel riquadro di navigazione, seleziona Instances (Istanze).
-
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.
-
Quando viene richiesta la conferma, selezionare Stop (Arresta). Possono essere necessari alcuni minuti per arrestare l'istanza.
-
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.
-
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: -
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
-MinCount1
-MaxCount1
-InstanceTypem3.medium
\ -KeyNamemy-key-pair
-SubnetIdsubnet-12345678
-SecurityGroupIdssg-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).UserDataPS 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>