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 distribuzioni 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-signal
cfn-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.AWS CloudFormation
Nel tutorial introduttivo, hai creato un semplice server web utilizzando uno script UserData
bash di base. Sebbene ciò 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 di. UserData
Lo script di cfn-init
supporto legge i dati di configurazione dai metadati del modello e li applica sistematicamente all'istanza.
In questo tutorial, imparerai come usare lo script di cfn-init
supporto e monitorare il processo di bootstrap.
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 Creare il tuo 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 Virtual Private Cloud (VPC) con accesso a Internet. Questo modello di tutorial richiede un VPC predefinito, che viene fornito automaticamente con la versione più recente. Account AWS Se non disponi di un VPC predefinito o se è stato eliminato, consulta la sezione sulla risoluzione dei problemi nel Creare il tuo primo stack tutorial per soluzioni alternative.
Comprensione dei concetti di bootstrap
Comprendiamo i concetti chiave che fanno funzionare il bootstrap prima di creare il modello.
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 cfn-init
script legge i metadati delle risorse dal modello e applica la configurazione all'istanza.
Il processo funziona nel modo seguente:
-
Definisci la configurazione nella
Metadata
sezione della tua EC2 risorsa. -
Si chiama
cfn-init
dalloUserData
script. -
cfn-init
legge 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 cfn-init
script elabora queste sezioni in un ordine specifico: pacchetti, gruppi, utenti, fonti, file, comandi e quindi servizi.
Inizia con un semplice esempio di bootstrap
Cominciamo con un esempio di bootstrap minimale che installa e avvia semplicemente 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 sysvinit: 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:
-
packages
la sezione installa ilhttpd
pacchetto utilizzando. yum Funziona su Amazon Linux e altre distribuzioni Linux che utilizzanoyum. -
services
la sezione garantisce l'httpd
avvio e l'esecuzione automatici. -
UserData
installa gli strumenti e le chiamate di bootstrap più recenti.cfn-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 di file
La files
sezione 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 commands
sezione 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 di 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 consentono 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: sysvinit: 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 lo stack usando 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 AWS Management Console e apri la AWS CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformazione.
-
Scegliere Create stack (Crea pila), With new resources (standard) (Con nuove risorse (standard)).
-
In Specifica modello, seleziona Carica un file di modello e poi Scegli file per caricare il file
samplelinux2stack.template
. -
Scegli Next (Successivo).
-
Nella pagina Specificare i dettagli dello stack, digita
BootstrapTutorialStack
come nome dello stack. -
In Parametri, effettuate le seguenti operazioni.
-
LatestAmiId: Lasciate 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
/32
suffisso.
-
-
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.
-
Tieni d'occhio l'
WebServer CREATE_IN_PROGRESS
evento. Il processo di bootstrap inizia dopo l'avvio dell'istanza. -
Il processo di bootstrap richiede in genere alcuni minuti. Vedrai
WebServer CREATE_COMPLETE
quando sarà finito.
Se vuoi vedere cosa succede durante il processo di bootstrap, puoi controllare i log delle istanze.
Per visualizzare i log di bootstrap (opzionale)
-
Apri la EC2 console
e trova la tua istanza. -
Seleziona l'istanza, quindi scegli Azioni, Monitoraggio e risoluzione dei problemi, Ottieni il registro di sistema per vedere l'avanzamento del bootstrap.
-
Se non vedi immediatamente i log, attendi e aggiorna la pagina.
Prova il server web avviato
Quando lo stack viene visualizzatoCREATE_COMPLETE
, prova il 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 la visualizzazione dello stack. CREATE_COMPLETE
Risoluzione dei problemi relativi al 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 non riesce: controlla la scheda Eventi per messaggi di errore specifici.
-
Server Web non accessibile: verifica che l'indirizzo IP sia corretto nel
MyIP
parametro. Ricordati di includere/32
alla fine. -
Il processo di bootstrap fallisce: l'istanza può avviarsi ma
cfn-init
fallisce. Controlla i log di sistema come descritto nella sezione di monitoraggio.
Pulizia delle risorse
Per evitare addebiti continui, puoi eseguire la pulizia eliminando lo stack e le relative risorse.
Eliminare lo stack e delle relative risorse
-
Apri la CloudFormation console
. -
Nella pagina Pile, seleziona l'opzione accanto al nome dello stack che hai creato (
BootstrapTutorialStack
), quindi scegli Elimina. -
Quando viene richiesta la conferma, seleziona Delete (Elimina).
-
Monitora l'avanzamento del processo di eliminazione dello stack nella scheda Evento. Lo stato di
BootstrapTutorialStack
cambia inDELETE_IN_PROGRESS
. Una volta CloudFormation completata l'eliminazione dello stack, lo rimuove dall'elenco.
Passaggi successivi
Complimenti! Hai imparato con successo a eseguire il bootstrap EC2 delle istanze con. CloudFormation Ora capisci:
-
Come usare gli script di
cfn-init
supporto -
Come strutturare i metadati per il bootstrap
-
Come installare pacchetti, creare file, eseguire comandi e gestire servizi
-
Come monitorare i problemi relativi al bootstrap
Per continuare a imparare:
-
Scopri come eseguire il bootstrap di uno Windows stack. Per ulteriori informazioni, consulta Stack basati sul bootstrap Windows CloudFormation .
-
Esplora scenari di bootstrap più complessi con più set di configurazione. Per maggiori informazioni, consulta cfn-init e AWS::CloudFormation::Initnella Template Reference Guide.AWS CloudFormation
-
Scopri come segnalare lo stato di
cfn-signal
completamento del bootstrap. Per ulteriori informazioni, consulta cfn-signal nella AWS CloudFormation Template Reference Guide.