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 all'avvio di un'EC2istanza con input di dati utente
Quando avvii un'EC2istanza Amazon, 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 AWS CloudFormation o AWS OpsWorks. Per ulteriori informazioni, consulta gli argomenti seguenti:
-
Distribuzione di applicazioni su Amazon EC2 con AWS CloudFormation la Guida per l'AWS CloudFormation utente.
Sulle istanze Linux, puoi passare due tipi di dati utente ad AmazonEC2: 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.
I dati degli utenti in AWS Management Console
Puoi specificare i dati utente dell'istanza al momento dell'avvio dell'istanza. Se il volume principale dell'istanza è un EBS volume, puoi anche arrestare l'istanza e aggiornarne i dati utente.
Specificare i dati utente dell'istanza all'avvio con Launch Wizard
È possibile specificare i dati utente quando si avvia un'istanza con Launch Wizard nella EC2 console. Per specificare i dati utente 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 EC2 console Amazon esegue la codifica base64 per te.
Per ulteriori informazioni, consulta Specificare i dati utente dell'istanza all'avvio con Launch Wizard. Per un esempio di Linux che utilizza il, vedi. AWS CLII dati dell'utente e il AWS CLI Per un esempio di Windows che utilizza gli strumenti per Windows PowerShell, vedereDati utente e strumenti per Windows PowerShell.
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
-
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel pannello 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.
In che modo Amazon EC2 gestisce i dati degli utenti per le istanze Linux
Negli esempi seguenti, i comandi di Installa un LAMP server 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 ha un DNS nome pubblico raggiungibile da Internet.
-
Il gruppo di sicurezza associato all'istanza è configurato per consentire il traffico SSH (porta 22) in modo che sia possibile connettersi all'istanza per visualizzare i file di registro di output.
-
L'istanza viene avviata con Amazon Linux 2AMI. 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 si utilizza uno AWS API script di dati utente AWS CLI, che include il, è 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 API chiamata. Per ulteriori informazioni, consulta Using Instance profiles nella IAM User Guide. Le autorizzazioni assegnate al IAM ruolo dipendono dai servizi con cui stai chiamando. API Per ulteriori informazioni, consulta IAMruoli 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 dei dati utente instance-id
//var/lib/cloud/instances/
prima di crearne uno AMI dall'istanza. In caso contrario, lo script esisterà in questa directory su qualsiasi istanza avviata da. AMIinstance-id
/
Aggiorna i 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
Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/
. -
Nel pannello 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.
Per questo esempio, in un browser web, inserisci nel file URL di PHP test le direttive create. Questo URL è l'DNSindirizzo pubblico dell'istanza seguito da una barra e dal nome del file.
http://
my.public.dns.amazonaws.com
/phpinfo.phpDovresti vedere la pagina delle PHP informazioni. Se non riesci a visualizzare la pagina delle PHP informazioni, verifica che il gruppo di sicurezza che stai utilizzando contenga una regola per consentire il traffico HTTP (porta 80). Per ulteriori informazioni, consulta Configurazione delle regole per i gruppi 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 Accedere ai metadati dell'istanza per un'EC2istanza.
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
È possibile modificare i dati utente di un'istanza interrotta utilizzando il comando. modify-instance-attribute Conmodify-instance-attribute, AWS CLI non esegue la codifica in 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 (BEGINCERTIFICATE) e l'ultima (ENDCERTIFICATE) riga.
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, utilizzate il modify-instance-attributecomando seguente:
aws ec2 modify-instance-attribute --instance-id
i-1234567890abcdef0
--user-data Value=
Esempio: visualizzazione dei dati utente
Per recuperare i dati utente per un'istanza, utilizzate il describe-instance-attributecomando. Condescribe-instance-attribute, AWS CLI non esegue la decodifica in base64 dei dati utente per voi.
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 degli utenti per le istanze Windows
Nelle istanze Windows, l'agente di avvio esegue le attività relative ai dati degli utenti. Per ulteriori informazioni, consulta gli argomenti seguenti:
Per esempi di assemblaggio di una UserData
proprietà in un AWS CloudFormation modello, vedete 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 Auto Scaling User Guide. EC2
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 uno script di dati utente AWS API AWS CLI, incluso il, è 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 API chiamata. Per ulteriori informazioni, consulta Profili delle istanze. Le autorizzazioni assegnate al IAM ruolo dipendono dai servizi con cui si sta chiamando. API Per ulteriori informazioni, consulta IAMruoli 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>
EC2Launchagente v2
Per eseguire uno script di dati XML utente come processo indipendente con l'executeScriptattività EC2Launch v2 nella UserData
fase, aggiungete <detach>true</detach>
i dati utente.
Nota
Il detach tag non è supportato dai precedenti agenti di lancio.
<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
AWS Windows AMIs include 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 vengono passati argomenti, EC2Launch e EC2Launch v2 aggiungi 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>
EC2Launchagente v2
Per eseguire uno script di dati XML utente come processo indipendente con l'executeScriptattività EC2Launch v2 nella UserData
fase, aggiungete <detach>true</detach>
i dati utente.
Nota
Il detach tag non è supportato dai precedenti agenti di lancio.
<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 YAML di configurazione
Se si utilizza la versione EC2Launch v2 per eseguire gli script, è possibile utilizzare il formato. YAML Per visualizzare le attività di configurazione, i dettagli e gli esempi per la EC2Launch v2, vedere. EC2Launchconfigurazione del task v2
Specificare uno YAML script con l'executeScript
attività.
YAMLSintassi di esempio 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
YAMLSintassi di esempio 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 Amazon EC2 API o uno strumento che non esegue la codifica base64 dei dati utente, devi codificare tu stesso 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 che 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, in tutti i AWS Windows AMIs è abilitata l'esecuzione dei dati utente 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 Esegui gli script durante i riavvii o gli avvii 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.
Script di avvio delle istanze
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 registro per EC2Launch v2EC2Launch, e EC2Config contengono l'output dello standard output e dei flussi di errore standard.
EC2Launch v2
Il file di registro 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 registro 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 registro 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
Esegui gli script durante i riavvii o gli avvii 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 v2 EC2Launch
-
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
.
Per abilitare l'esecuzione dei dati utente con EC2Launch
-
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
-
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 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 Accedere ai metadati dell'istanza per un'EC2istanza. 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 -Rawscript.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 -ImageIdami-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 -Rawnew-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 -InstanceIdi-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 -InstanceIdi-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 -InstanceIdi-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 correttamente questo comando, è necessario disporre di un ruolo con ec2:DescribeTags
autorizzazioni associate all'istanza, poiché le informazioni sui tag vengono recuperate dalla chiamata. API Per ulteriori informazioni sulle autorizzazioni di impostazione mediante l'utilizzo IAM dei ruoli, vedere. Associa un IAM ruolo a un'istanza
È 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 Visualizza i tag per le tue EC2 istanze utilizzando i metadati delle istanze.