Distribuisci applicazioni su Amazon EC2 - AWS CloudFormation

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 per ridurre al minimo o eliminare i costi durante questo processo di apprendimento.

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:

  1. Definisci la configurazione nella Metadata sezione della tua risorsa. EC2

  2. Chiami cfn-init dallo script UserData.

  3. cfn-init legge i metadati e applica la configurazione.

  4. 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 packages installa il pacchetto httpd utilizzando yum. Funziona su Amazon Linux e altre distribuzioni Linux che utilizzano yum.

  • La sezione services garantisce l’avvio e l’esecuzione automatica di httpd.

  • UserData installa gli strumenti di bootstrap più recenti e chiama 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 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
  1. Accedi Console di gestione AWS e apri la CloudFormation console all'indirizzo https://console.aws.amazon.com/cloudformation.

  2. Scegli Crea stack, Con nuove risorse (standard).

  3. In Specifica modello, seleziona Carica un file di modello e poi Scegli file per caricare il file samplelinux2stack.template.

  4. Scegli Successivo.

  5. Nella pagina Specifica i dettagli dello stack, inserisci BootstrapTutorialStack come nome dello stack.

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

  7. 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
  1. Nella CloudFormation console, seleziona il tuo stack e apri la scheda Eventi.

  2. Cerca l’evento WebServer CREATE_IN_PROGRESS. Il processo di bootstrap inizia dopo l’avvio dell’istanza.

  3. 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)
  1. Apri la EC2 console e trova la tua istanza.

  2. Seleziona l’istanza e poi scegli Operazioni, Monitoraggio e risoluzione dei problemi, Ottieni il log di sistema per visualizzare i progressi del bootstrap.

  3. 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
  1. Nella CloudFormation console, vai alla scheda Output relativa al tuo stack.

  2. Fai clic sul valore WebsiteURL per aprire il tuo server Web in una nuova scheda.

  3. 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 /32 alla fine.

  • Il processo di bootstrap fallisce: l’istanza si avvia ma cfn-init fallisce. 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
  1. Apri la CloudFormation console.

  2. Nella pagina Stack seleziona l’opzione accanto al nome dello stack che hai creato (BootstrapTutorialStack), quindi scegli Elimina.

  3. Quando viene richiesta la conferma, seleziona Elimina.

  4. Monitora l’avanzamento del processo di eliminazione dello stack nella scheda Evento. Lo stato di BootstrapTutorialStack cambia in DELETE_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: