Distribuzione di un'applicazione Node.js con DynamoDB in Elastic Beanstalk - AWS Elastic Beanstalk

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

Distribuzione di un'applicazione Node.js con DynamoDB in Elastic Beanstalk

Questo tutorial e la relativa applicazione di esempio nodejs-example-dynamo.zip illustrano il processo di distribuzione di un'applicazione Node.js che utilizza il modulo JavaScript in Node.js AWS SDK per interagire con il servizio Amazon DynamoDB. Creerai una tabella DynamoDB che si trova in un database disaccoppiato, o esterno, dall'ambiente. AWS Elastic Beanstalk Configurerai anche l'applicazione per utilizzare un database disaccoppiato. In un ambiente di produzione, è consigliabile utilizzare un database disaccoppiato dall'ambiente Elastic Beanstalk in modo che sia indipendente dal ciclo di vita dell'ambiente. Questa procedura consente anche di eseguire implementazioni blu/verde.

L'applicazione di esempio illustra quanto riportato di seguito:

  • Una tabella DynamoDB che archivia i dati di testo forniti dall'utente.

  • I file di configurazione per creare la tabella.

  • Un argomento su Amazon Simple Notification Service.

  • Utilizzo di un file package.json per installare i pacchetti durante l'implementazione.

Prerequisiti

Di seguito sono elencati i requisiti per questo tutorial:

  • I runtime Node.js

  • Il software predefinito per la gestione dei pacchetti Node.js, npm

  • Il generatore di righe di comando Express

  • L'interfaccia a riga di comando (EB) di Elastic Beanstalk CLI

Per ulteriori informazioni sull'installazione dei primi tre componenti riportati e la configurazione dell'ambiente di sviluppo locale, consulta Configurazione dell'ambiente di sviluppo Node.js per Elastic Beanstalk. Per questo tutorial, non è necessario installare il file AWS SDK for Node.js, anch'esso menzionato nell'argomento a cui si fa riferimento.

Per informazioni dettagliate sull'installazione e la configurazione dell'EBCLI, vedere Installazione dell'interfaccia a riga di comando di Elastic Beanstalk e. Configurazione dell'interfaccia a riga di comando EB

Creazione di un ambiente Elastic Beanstalk

La tua directory delle applicazioni

Questo tutorial utilizza una directory chiamata nodejs-example-dynamo per il pacchetto sorgente dell'applicazione. Crea la directory nodejs-example-dynamo per questo tutorial.

~$ mkdir nodejs-example-dynamo
Nota

Ogni tutorial in questo capitolo utilizza la propria directory per il pacchetto sorgente dell'applicazione. Il nome della directory corrisponde al nome dell'applicazione di esempio utilizzata dal tutorial.

Cambia la tua directory di lavoro corrente in nodejs-example-dynamo.

~$ cd nodejs-example-dynamo

Configura ora un ambiente Elastic Beanstalk in cui viene eseguita la piattaforma Node.js e l'applicazione di esempio. Useremo l'interfaccia a riga di comando (EB) di Elastic Beanstalk. CLI

Per configurare un CLI repository EB per l'applicazione e creare un ambiente Elastic Beanstalk che esegue la piattaforma Node.js
  1. Creazione di un repository con il comando eb init.

    ~/nodejs-example-dynamo$ eb init --platform node.js --region <region>

    Questo comando crea un file di configurazione in una cartella denominata .elasticbeanstalk, che specifica le impostazioni per la creazione di ambienti per l'applicazione e crea un'applicazione Elastic Beanstalk che prende nome dalla cartella corrente.

  2. Crea un ambiente che esegue un'applicazione di esempio con il comando eb create.

    ~/nodejs-example-dynamo$ eb create --sample nodejs-example-dynamo

    Questo comando crea un ambiente con bilanciamento del carico con le impostazioni predefinite per la piattaforma Node.js e le risorse seguenti:

    • EC2istanza: una macchina virtuale Amazon Elastic Compute Cloud (AmazonEC2) configurata per eseguire app Web sulla piattaforma scelta.

      Ogni piattaforma esegue un insieme specifico di software, file di configurazione e script per supportare una versione della lingua, un framework, un container Web specifici o una determinata combinazione di essi. La maggior parte delle piattaforme utilizza Apache o NGINX come proxy inverso che si trova davanti all'app Web, inoltra le richieste, fornisce risorse statiche e genera log di accesso e di errore.

    • Gruppo di sicurezza dell'istanza: un gruppo EC2 di sicurezza Amazon configurato per consentire il traffico in entrata sulla porta 80. Questa risorsa consente al HTTP traffico proveniente dal sistema di bilanciamento del carico di raggiungere l'EC2istanza su cui è in esecuzione la tua app web. Per impostazione predefinita, il traffico non è consentito su altre porte.

    • Sistema di bilanciamento del carico: un sistema di bilanciamento del carico Elastic Load Balancing configurato per distribuire richieste alle istanze in esecuzione sull'applicazione. Un sistema di bilanciamento del carico inoltre elimina la necessità di esporre le proprie istanze direttamente in Internet.

    • Gruppo di sicurezza Load Balancer: un gruppo EC2 di sicurezza Amazon configurato per consentire il traffico in entrata sulla porta 80. Questa risorsa consente al HTTP traffico proveniente da Internet di raggiungere il sistema di bilanciamento del carico. Per impostazione predefinita, il traffico non è consentito su altre porte.

    • Gruppo Auto Scaling: un gruppo Auto Scaling configurato per sostituire un'istanza se viene terminata o diventa non disponibile.

    • Bucket Amazon S3: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.

    • CloudWatch Allarmi Amazon: due CloudWatch allarmi che monitorano il carico sulle istanze nel tuo ambiente e che vengono attivati se il carico è troppo alto o troppo basso. Quando viene attivato un allarme, il gruppo Auto Scaling aumenta o diminuisce di conseguenza.

    • AWS CloudFormation stack: Elastic AWS CloudFormation Beanstalk utilizza per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella console AWS CloudFormation.

    • Nome di dominio: un nome di dominio che indirizza alla tua app Web nel modulo subdomain.region.elasticbeanstalk.com.

      Sicurezza del dominio

      Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio elasticbeanstalk.com è registrato nella Public Suffix List (). PSL

      Se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk, ti consigliamo di utilizzare i cookie __Host- con un prefisso per una maggiore sicurezza. Questa pratica difende il tuo dominio dai tentativi di falsificazione delle richieste tra siti (). CSRF Per ulteriori informazioni, consulta la pagina Impostazione cookie nella pagina Mozilla Developer Network.

  3. Al termine della creazione dell'ambiente, utilizzate il eb opencomando per aprire l'ambiente URL nel browser predefinito.

    ~/nodejs-example-dynamo$ eb open

È stato ora creato un ambiente Elastic Beanstalk Node.js con un'applicazione di esempio. A questo punto puoi aggiornarlo con la tua applicazione. Successivamente, aggiorniamo l'applicazione di esempio per utilizzare il framework Express.

Aggiungi le autorizzazioni alle istanze dell'ambiente

L'applicazione viene eseguita su una o più EC2 istanze con un sistema di bilanciamento del carico, che serve HTTP le richieste da Internet. Quando riceve una richiesta che richiede l'utilizzo di AWS servizi, l'applicazione utilizza le autorizzazioni dell'istanza su cui viene eseguita per accedere a tali servizi.

L'applicazione di esempio utilizza le autorizzazioni dell'istanza per scrivere dati in una tabella DynamoDB e per inviare notifiche a un argomento SNS Amazon con SDK il modulo in Node.js. JavaScript Aggiungi le seguenti policy gestite al profilo di istanza predefinito per concedere alle EC2 istanze del tuo ambiente l'autorizzazione ad accedere a DynamoDB e Amazon: SNS

  • AmazonDynamoDBFullAccess

  • Un accesso mazonSNSFull

Per aggiungere policy al profilo dell'istanza di default
  1. Apri la pagina Ruoli nella IAM console.

  2. Scegli aws-elasticbeanstalk-ec2 ruoli.

  3. Nella scheda Autorizzazioni, scegli Collega policy.

  4. Seleziona la policy gestita per i servizi aggiuntivi utilizzati dall'applicazione. Per questo tutorial, seleziona AmazonSNSFullAccess e AmazonDynamoDBFullAccess.

  5. Scegli Collega policy.

Per ulteriori informazioni sulla gestione dei profili delle istanze, consulta Gestione dei profili dell'istanza Elastic Beanstalk.

Implementazione dell'applicazione di esempio

Ora il tuo ambiente è pronto per la distribuzione e l'esecuzione dell'applicazione di esempio per questo tutorial: nodejs-example-dynamo .zip.

Implementazione ed esecuzione dell'applicazione di esempio del tutorial
  1. Modifica la directory di lavoro corrente nella directory dell'applicazione nodejs-example-dynamo.

    ~$ cd nodejs-example-dynamo
  2. Scaricate ed estraete il contenuto del pacchetto sorgente dell'applicazione di esempio nodejs-example-dynamo.zip nella directory dell'applicazione. nodejs-example-dynamo

  3. Implementa l'applicazione di esempio nell'ambiente Elastic Beanstalk con il comando eb deploy.

    ~/nodejs-example-dynamo$ eb deploy
    Nota

    Per impostazione predefinita, il eb deploy comando crea un ZIP file della cartella del progetto. È possibile configurare l'EB CLI per distribuire un elemento dal processo di compilazione anziché creare un ZIP file della cartella del progetto. Per ulteriori informazioni, consulta Distribuzione di artifact invece della cartella del progetto.

  4. Una volta completata la creazione dell'ambiente, utilizzate il eb opencomando per aprire l'ambiente URL nel browser predefinito.

    ~/nodejs-example-dynamo$ eb open

Il sito raccoglie le informazioni di contatto degli utenti e utilizza una tabella DynamoDB per archiviare i dati. Per aggiungere una voce, seleziona Sign up today (Registrati oggi stesso), inserisci un nome e un indirizzo di posta elettronica, quindi scegli Sign up! (Registrati) L'app Web scrive il contenuto del modulo nella tabella e attiva una notifica SNS e-mail Amazon.

Startup landing page with teaser message and sign-up button for upcoming product launch.

Al momento, l'SNSargomento Amazon è configurato con un'e-mail segnaposto per le notifiche. Aggiornerai presto la configurazione, ma nel frattempo puoi verificare la tabella DynamoDB e l'argomento Amazon nel. SNS AWS Management Console

Per visualizzare la tabella
  1. Apri la pagina delle tabelle nella console DynamoDB.

  2. Trova la tabella creata dall'applicazione. Il nome inizia con awseb e contiene. StartupSignupsTable

  3. Seleziona la tabella, quindi Items (Voci) e Start search (Avvia ricerca) per visualizzare tutti gli elementi della tabella.

La tabella contiene una voce per ogni indirizzo e-mail inviato sul sito dell'iscrizione. Oltre a scrivere sulla tabella, l'applicazione invia un messaggio a un SNS argomento Amazon che dispone di due sottoscrizioni, una per le notifiche e-mail e l'altra per una coda di Amazon Simple Queue Service da cui un'applicazione di lavoro può leggere per elaborare le richieste e inviare e-mail ai clienti interessati.

Per visualizzare l'argomento
  1. Apri la pagina Argomenti nella SNS console Amazon.

  2. Trova l'argomento creato dall'applicazione. Il nome inizia con awseb e contiene. NewSignupTopic

  3. Scegli l'argomento per visualizzare le sottoscrizioni.

L'applicazione (app.js) definisce due itinerari. Il percorso principale (/) restituisce una pagina Web renderizzata da un modello Embedded JavaScript (EJS) con un modulo che l'utente compila per registrare il proprio nome e indirizzo e-mail. L'invio del modulo invia una POST richiesta con i dati del modulo al /signup route, che scrive una voce nella tabella DynamoDB e pubblica un messaggio sull'argomento SNS Amazon per notificare al proprietario la registrazione.

L'applicazione di esempio include file di configurazione che creano la tabella DynamoDB, l'argomento SNS Amazon e la coda SQS Amazon utilizzati dall'applicazione. Ciò consente di creare un nuovo ambiente e di verificare la funzionalità immediatamente, ma ha lo svantaggio di vincolare la tabella DynamoDB all'ambiente. Per un ambiente di produzione, è necessario creare la tabella DynamoDB al di fuori dell'ambiente per evitare di perderla quando termini l'ambiente o ne aggiorni la configurazione.

Creazione di una tabella DynamoDB

Per utilizzare una tabella DynamoDB esterna con un'applicazione in esecuzione in Elastic Beanstalk, crea innanzitutto una tabella in DynamoDB. Quando crei una tabella esternamente a Elastic Beanstalk, essa sarà indipendente da Elastic Beanstalk e dagli ambienti Elastic Beanstalk e non verrà arrestata da Elastic Beanstalk.

Creare una tabella con le impostazioni seguenti:

  • Table name (Nome tabella) – nodejs-tutorial

  • Primary key (Chiave primaria) – email

  • Tipo chiave principale: String (Stringa)

Per creare una tabella DynamoDB
  1. Apri la pagina delle tabelle nella console di gestione DynamoDB.

  2. Scegliere Create table (Crea tabella).

  3. Digita un Table name (Nome tabella) e la Primary key (Chiave primaria).

  4. Scegli il tipo di chiave primaria.

  5. Scegli Create (Crea) .

Aggiornamento dei file di configurazione dell'applicazione

Aggiorna i file di configurazione nella sorgente dell'applicazione per utilizzare la tabella nodejs-tutorial invece di crearne una nuova.

Aggiornamento dell'applicazione di esempio per l'uso negli ambienti di produzione
  1. Modifica la directory di lavoro corrente nella directory dell'applicazione nodejs-example-dynamo.

    ~$ cd nodejs-example-dynamo
  2. Apri .ebextensions/options.config e modifica i valori delle impostazioni seguenti:

    • NewSignupEmail— Il tuo indirizzo e-mail.

    • STARTUP_ SIGNUP _ TABLEnodejs-tutorial

    Esempio .ebextensions/options.config
    option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail: you@example.com aws:elasticbeanstalk:application:environment: THEME: "flatly" AWS_REGION: '`{"Ref" : "AWS::Region"}`' STARTUP_SIGNUP_TABLE: nodejs-tutorial NEW_SIGNUP_TOPIC: '`{"Ref" : "NewSignupTopic"}`' aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: "120" aws:autoscaling:trigger: Unit: "Percent" Period: "1" BreachDuration: "2" UpperThreshold: "75" LowerThreshold: "30" MeasureName: "CPUUtilization"

    Ciò vale per le seguenti configurazioni per l'applicazione:

    • L'indirizzo e-mail utilizzato dall'SNSargomento Amazon per le notifiche è impostato sul tuo indirizzo o su quello che inserisci nel options.config file.

    • La tabella nodejs-tutorial verrà utilizzata al posto di quella creata da .ebextensions/create-dynamodb-table.config.

  3. Remove .ebextensions/create-dynamodb-table.config.

    ~/nodejs-tutorial$ rm .ebextensions/create-dynamodb-table.config

    La prossima volta che distribuisci l'applicazione, la tabella creata da questo file di configurazione verrà eliminata.

  4. Implementa l'applicazione aggiornata nell'ambiente Elastic Beanstalk con il comando eb deploy.

    ~/nodejs-example-dynamo$ eb deploy
  5. Una volta completata la creazione dell'ambiente, usa il eb opencomando per aprire l'ambiente URL nel browser predefinito.

    ~/nodejs-example-dynamo$ eb open

Durante la distribuzione, Elastic Beanstalk aggiorna la configurazione dell'argomento SNS Amazon ed elimina la tabella DynamoDB creata durante la distribuzione della prima versione dell'applicazione.

Ora, quando termini l'ambiente, la tabella nodejs-tutorial non sarà eliminata. In questo modo è possibile eseguire le implementazioni blu/verdi, modificare i file di configurazione oppure arrestare il sito Web senza il rischio di perdite di dati.

Apri il sito in un browser e verifica che il modulo funzioni come previsto. Crea alcune voci, quindi controlla la console DynamoDB per verificare la tabella.

Per visualizzare la tabella
  1. Apri la pagina delle tabelle nella console DynamoDB.

  2. Trova la tabella nodejs-tutorial.

  3. Seleziona la tabella, quindi Items (Voci) e Start search (Avvia ricerca) per visualizzare tutti gli elementi della tabella.

Puoi anche notare che Elastic Beanstalk ha eliminato la tabella creata in precedenza.

Configurazione dell'ambiente per l'elevata disponibilità

Infine, configura il gruppo Auto Scaling dell'ambiente con un conteggio delle istanze minime più elevato. Esegui almeno due istanze in qualsiasi momento per evitare che i server Web nell'ambiente rappresentino una singola possibilità di errore e per consentire di distribuire le modifiche senza interrompere il funzionamento del servizio.

Configurazione del gruppo Auto Scaling dell'ambiente per elevata disponibilità
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Nel riquadro di navigazione, selezionare Configuration (Configurazione).

  4. Nella categoria di configurazione Capacity (Capacità), scegliere Edit (Modifica).

  5. Nella sezione Auto Scaling Group (Gruppo Auto Scaling), impostare Min instances (Istanze min) su 2.

  6. Per salvare le modifiche scegli Apply (Applica) nella parte inferiore della pagina.

Pulizia

Dopo aver usato Elastic Beanstalk, puoi terminare l'ambiente. Elastic Beanstalk AWS interrompe tutte le risorse associate all'ambiente, come istanze EC2 Amazon, istanze di database, sistemi di bilanciamento del carico, gruppi di sicurezza e allarmi.

Per terminare l'ambiente Elastic Beanstalk dalla console
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Seleziona Actions (Operazioni), quindi Terminate environment (Termina ambiente).

  4. Utilizza la finestra di dialogo su schermo per confermare la terminazione dell'ambiente.

Con Elastic Beanstalk puoi creare facilmente un nuovo ambiente per l'applicazione in qualsiasi momento.

Puoi anche eliminare le tabelle DynamoDB esterne che hai creato.

Per eliminare una tabella DynamoDB
  1. Apri la pagina delle tabelle nella console DynamoDB.

  2. Seleziona una tabella.

  3. Seleziona Actions (Operazioni), quindi Delete table (Elimina tabella).

  4. Scegli Elimina.

Passaggi successivi

L'applicazione di esempio utilizza i file di configurazione per configurare le impostazioni del software e creare AWS risorse come parte dell'ambiente. Per ulteriori informazioni sui file di configurazione e sul loro uso, consulta Personalizzazione avanzata dell'ambiente con i file di configurazione (.ebextensions).

L'applicazione di esempio per questo tutorial usa il framework Web Express per Node.js. Per ulteriori informazioni su Express, consulta la documentazione ufficiale alla pagina expressjs.com.

Infine, se prevedi di utilizzare l'applicazione in un ambiente di produzione, configura un nome di dominio personalizzato per il tuo ambiente e abilita HTTPS le connessioni sicure.