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à.
Distribuisci applicazioni su Amazon EC2
Puoi utilizzarlo CloudFormation per installare, configurare e avviare automaticamente le applicazioni sulle EC2 istanze Amazon. Ciò ti consente di duplicare in modo semplice le implementazioni e di aggiornare le installazioni esistenti senza stabilire una connessione diretta con l’istanza, risparmiando in questo modo una quantità significativa di tempo e lavoro.
CloudFormation include un set di script di supporto (cfn-init, cfn-signalcfn-get-metadata, ecfn-hup) basati su. cloud-init Puoi richiamare questi script di supporto dai tuoi CloudFormation modelli per installare, configurare e aggiornare le applicazioni su EC2 istanze Amazon che si trovano nello stesso modello. Per ulteriori informazioni, consulta il riferimento agli script di CloudFormation supporto nella Template Reference Guide.CloudFormation
Nel tutorial introduttivo, hai creato un semplice server Web utilizzando UserData con uno script bash di base. Sebbene abbia funzionato per una semplice pagina “Hello World”, le applicazioni reali spesso richiedono configurazioni più sofisticate, tra cui:
-
Più pacchetti software installati nell’ordine corretto.
-
File di configurazione complessi creati con contenuti specifici.
-
Servizi avviati e configurati per l’esecuzione automatica.
-
Gestione degli errori e convalida del processo di configurazione.
CloudFormationgli script di supporto forniscono un modo più robusto e gestibile per configurare le EC2 istanze rispetto agli script bash di base in. UserData Lo script helper cfn-init legge i dati di configurazione dai metadati del modello e li applica in maniera sistematica all’istanza.
In questo tutorial, scoprirai come utilizzare lo script helper cfn-init e come monitorare il processo di bootstrapping.
Nota
CloudFormation è gratuito, ma ti verranno addebitati i costi per le EC2 risorse Amazon che crei. Tuttavia, se sei alle prime armi AWS, puoi sfruttare il piano gratuito
Argomenti
Prerequisiti
-
Devi aver completato il Creazione del primo stack tutorial o avere un'esperienza equivalente con le nozioni di CloudFormation base.
-
Devi avere accesso a un utente o ruolo IAM Account AWS con le autorizzazioni per usare Amazon EC2 e/o l'accesso come utente amministrativo. CloudFormation
-
È necessario disporre di un cloud privato virtuale (VPC) con accesso a Internet. Questo modello di tutorial richiede un VPC predefinito, che viene fornito automaticamente con la versione più recente dell’ Account AWS. Se non disponi di un VPC predefinito, o se è stato eliminato, consulta la sezione sulla risoluzione dei problemi nel tutorial Creazione del primo stack per soluzioni alternative.
Comprensione dei concetti di bootstrap
Prima di creare il modello, scopriamo i concetti chiave che fanno funzionare il bootstrapping.
Lo script helper cfn-init
CloudFormation fornisce script di supporto in Python che puoi usare per installare software e avviare servizi su un'istanza Amazon. EC2 Lo script cfn-init legge i metadati delle risorse dal modello e applica la configurazione all’istanza.
Di seguito è riportato il procedimento:
-
Definisci la configurazione nella
Metadatasezione della tua risorsa. EC2 -
Chiami
cfn-initdallo scriptUserData. -
cfn-initlegge i metadati e applica la configurazione. -
L’istanza è configurata in base alle tue specifiche.
Struttura dei metadati
La configurazione è definita in una struttura specifica all'interno dell' EC2 istanza.
Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: # Metadata section for the resource AWS::CloudFormation::Init: # Required key that cfn-init looks for config: # Configuration name (you can have multiple) packages: # Install packages files: # Create files commands: # Run commands services: # Start/stop services
Lo script cfn-init elabora queste sezioni in un ordine specifico: pacchetti, gruppi, utenti, origini, file, comandi e servizi.
Inizia con un semplice esempio di bootstrap
Cominciamo con un esempio di bootstrap minimo, che si limita a installare e avviare Apache.
Resources: EC2Instance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: # Install Apache web server yum: httpd: [] services: # Start Apache and enable it to start on boot systemd: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType UserData: !Base64 # Script that runs when instance starts Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource EC2Instance --region ${AWS::Region}
Questo semplice esempio illustra i concetti fondamentali:
-
La sezione
packagesinstalla il pacchettohttpdutilizzando yum. Funziona su Amazon Linux e altre distribuzioni Linux che utilizzano yum. -
La sezione
servicesgarantisce l’avvio e l’esecuzione automatica dihttpd. -
UserDatainstalla gli strumenti di bootstrap più recenti e chiamacfn-init.
Aggiungere file e comandi
Ora, miglioriamo il nostro esempio aggiungendo una pagina Web personalizzata e un file di registro nella /var/log directory dell' EC2 istanza.
Creazione dei file
La sezione files consente di creare file sull’istanza con contenuti specifici. La barra verticale (|) consente di passare un blocco letterale di testo (codice HTML) come contenuto del file (/var/www/html/index.html).
files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body>
Esecuzione di comandi
La sezione commands consente di eseguire i comandi della shell durante il processo di bootstrap. Questo comando crea un file di registro /var/log/welcome.txt sull' EC2 istanza. Per visualizzarlo, è necessaria una coppia di EC2 chiavi Amazon da utilizzare per l'accesso SSH e un intervallo di indirizzi IP che può essere utilizzato per l'accesso SSH all'istanza (non trattato qui).
commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt"
Aggiungere la sicurezza della rete
Poiché stiamo configurando un server Web, dobbiamo consentire al traffico web (HTTP) di raggiungere la nostra EC2 istanza. Per fare ciò, creeremo un gruppo di sicurezza che consenta il traffico in entrata sulla porta 80 dal tuo indirizzo IP. EC2 le istanze devono anche inviare traffico verso Internet, ad esempio per installare gli aggiornamenti dei pacchetti. Per impostazione predefinita, i gruppi di sicurezza autorizzano tutto il traffico in uscita. Quindi assoceremo questo gruppo di sicurezza alla nostra EC2 istanza utilizzando la SecurityGroupIds proprietà.
WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP
Il modello di bootstrap completo
Ora, mettiamo insieme tutti i pezzi. Ecco il modello completo che combina tutti i concetti di cui abbiamo parlato.
AWSTemplateFormatVersion: 2010-09-09 Description: Bootstrap an EC2 instance with Apache web server using cfn-init Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32) Type: String MinLength: 9 MaxLength: 18 Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access from my IP address SecurityGroupIngress: - IpProtocol: tcp Description: HTTP FromPort: 80 ToPort: 80 CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: yum: httpd: [] files: /var/www/html/index.html: content: | <body> <h1>Congratulations, you have successfully launched the AWS CloudFormation sample.</h1> </body> commands: createWelcomeLog: command: "echo 'cfn-init ran successfully!' > /var/log/welcome.txt" services: systemd: httpd: enabled: true ensureRunning: true Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 Fn::Sub: | #!/bin/bash yum install -y aws-cfn-bootstrap /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServer --region ${AWS::Region} Tags: - Key: Name Value: Bootstrap Tutorial Web Server Outputs: WebsiteURL: Value: !Sub 'http://${WebServer.PublicDnsName}' Description: EC2 instance public DNS name
Crea uno stack utilizzando la console
La procedura seguente prevede il caricamento del modello di stack di esempio da un file. Apri un editor di testo sul tuo computer locale e aggiungi il modello. Salva il file con il nome samplelinux2stack.template.
Avvio del modello dello stack
-
Accedi Console di gestione AWS e apri la CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation.
-
Scegli Crea stack, Con nuove risorse (standard).
-
In Specifica modello, seleziona Carica un file di modello e poi Scegli file per caricare il file
samplelinux2stack.template. -
Scegli Successivo.
-
Nella pagina Specifica i dettagli dello stack, inserisci
BootstrapTutorialStackcome nome dello stack. -
Per Parametri, effettua le seguenti operazioni.
-
LatestAmiId: lascia il valore predefinito.
-
InstanceType: Scegli t2.micro o t3.micro per il tipo di istanza. EC2
-
MyIP: inserisci il tuo indirizzo IP pubblico con un suffisso
/32.
-
-
Scegli Avanti due volte, quindi Invia per creare lo stack.
Monitora il processo di bootstrap
I processi di bootstrap richiedono più tempo rispetto ai semplici EC2 avvii perché vengono installati e configurati software aggiuntivi.
Per monitorare l’avanzamento del bootstrap
-
Nella CloudFormation console, seleziona il tuo stack e apri la scheda Eventi.
-
Cerca l’evento
WebServer CREATE_IN_PROGRESS. Il processo di bootstrap inizia dopo l’avvio dell’istanza. -
In genere, il processo di bootstrap richiede pochi minuti. Al termine vedrai
WebServer CREATE_COMPLETE.
Se vuoi vedere cosa succede durante il processo di bootstrap, puoi controllare i log delle istanze.
Visualizzare i log di bootstrap (facoltativo)
-
Apri la EC2 console
e trova la tua istanza. -
Seleziona l’istanza e poi scegli Operazioni, Monitoraggio e risoluzione dei problemi, Ottieni il log di sistema per visualizzare i progressi del bootstrap.
-
Se non vedi i log immediatamente, attendi e aggiorna la pagina.
Prova il server Web avviato
Quando il tuo stack mostra CREATE_COMPLETE, esegui il test del tuo server Web.
Per testare il server web
-
Nella CloudFormation console, vai alla scheda Output relativa al tuo stack.
-
Fai clic sul valore WebsiteURL per aprire il tuo server Web in una nuova scheda.
-
Dovresti vedere la tua pagina Web personalizzata con il messaggio
Congratulations, you have successfully launched the AWS CloudFormation sample.
Nota
Se la pagina non viene caricata immediatamente, attendi un minuto e riprova. Il processo di bootstrap potrebbe essere ancora completato anche dopo che lo stack mostra CREATE_COMPLETE.
Risoluzione dei problemi di bootstrap
Se il processo di bootstrap fallisce o il server Web non funziona, ecco i problemi e le soluzioni più comuni.
Problemi comuni
-
La creazione dello stack fallisce: controlla la scheda Eventi per messaggi di errore specifici.
-
Server Web non accessibile: verifica che l’indirizzo IP sia corretto nel parametro
MyIP. Ricordati di includere/32alla fine. -
Il processo di bootstrap fallisce: l’istanza si avvia ma
cfn-initfallisce. Controlla i log di sistema come descritto nella sezione di monitoraggio.
Eseguire la pulizia delle risorse
Per evitare addebiti in corso, puoi eseguire una pulizia eliminando lo stack e le relative risorse.
Eliminare lo stack e delle relative risorse
-
Apri la CloudFormation console
. -
Nella pagina Stack seleziona l’opzione accanto al nome dello stack che hai creato (
BootstrapTutorialStack), quindi scegli Elimina. -
Quando viene richiesta la conferma, seleziona Elimina.
-
Monitora l’avanzamento del processo di eliminazione dello stack nella scheda Evento. Lo stato di
BootstrapTutorialStackcambia inDELETE_IN_PROGRESS. Una volta CloudFormation completata l'eliminazione dello stack, lo rimuove dall'elenco.
Fasi successive
Complimenti! Hai imparato con successo a eseguire il bootstrap EC2 delle istanze con. CloudFormation Ora sai:
-
Come usare gli script helper
cfn-init -
Come strutturare i metadati per il bootstrapping
-
Come installare pacchetti, creare file, eseguire comandi e gestire servizi
-
Come monitorare i problemi di bootstrap
Per continuare a imparare:
-
Scopri come aggiornare uno stack in esecuzione e utilizzare lo script di supporto.
cfn-hupPer ulteriori informazioni, consulta Aggiornare uno CloudFormation stack. -
Scopri come eseguire il bootstrap di uno stack Windows. Per ulteriori informazioni, consulta Processo di bootstrap di stack CloudFormation basati su Windows.
-
Esplora scenari di bootstrap più complessi con più set di configurazione. Per maggiori informazioni, consulta cfn-init e AWS::CloudFormation::Initnella Template Reference Guide.CloudFormation
-
Scopri come segnalare lo stato di completamento del bootstrap con
cfn-signal. Per ulteriori informazioni, consulta cfn-signal in CloudFormation Template Reference Guide.