View a markdown version of this page

Distribuzione di un' Node.js applicazione con DynamoDB su 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' Node.js applicazione con DynamoDB su Elastic Beanstalk

Questo tutorial e la relativa applicazione di esempio nodejs-example-dynamo.zip illustrano il processo di distribuzione di un' Node.js applicazione che utilizza l' AWS SDK per interagire con il servizio Amazon DynamoDB. JavaScript Node.js 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 pratica consente anche di eseguire implementazioni. blue/green

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 tempi di esecuzione Node.js

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

  • Il generatore di righe di comando Express

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

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 l' AWS SDK per Node.js, che è anche menzionato nell'argomento di riferimento.

Per maggiori dettagli sull'installazione e la configurazione della CLI EB, consulta Installare EB CLI con script di configurazione (consigliato) 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

Ora, configuriamo un ambiente Elastic Beanstalk che esegue la Node.js piattaforma e l'applicazione di esempio. Utilizzeremo l'interfaccia a riga di comando di Elastic Beanstalk (CLI EB).

Per configurare un repository EB CLI per la tua 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 e le seguenti risorse: Node.js

    • Beanstalk Standard: per un ambiente eseguito su Amazon Elastic Compute Cloud (Amazon EC2), Elastic Beanstalk fornisce le seguenti risorse:

      • Istanza EC2: una macchina virtuale Amazon EC2 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 su cui viene eseguita l'app Web, inoltra le richieste all'app, fornisce asset statici e genera log degli accessi e di errore.

      • Gruppo di sicurezza istanze: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa consente al traffico TTP proveniente dal sistema di bilanciamento del carico di raggiungere l'istanza EC2 in esecuzione sull'app Web. Per impostazione predefinita, il traffico non è consentito su altre porte.

      • Gruppo di sicurezza del sistema di bilanciamento del carico: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa HTTP consente al 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.

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

    • Beanstalk Cluster: per un ambiente che funziona su Amazon EKS, Elastic Beanstalk fornisce le seguenti risorse:

      • Cluster Amazon EKS: un cluster Amazon EKS creato e gestito da Elastic Beanstalk. Gli ambienti dello stesso account che utilizzano le stesse sottoreti condividono un cluster.

      • Elaborazione: capacità dei nodi fornita da Amazon EKS Auto Mode, che aggiunge e rimuove nodi per adattarli alle repliche delle applicazioni pianificate nel cluster.

      • Ruoli IAM: i ruoli del cluster e dei nodi forniti per Amazon EKS e il ruolo di osservabilità utilizzato da Elastic Beanstalk per pubblicare le metriche, i log e le tracce dell'ambiente.

      Per ulteriori informazioni su questa infrastruttura, consulta. Architettura Beanstalk Cluster

    • Load balancer: un sistema di bilanciamento del carico che distribuisce le richieste in entrata nell'applicazione. Un sistema di bilanciamento del carico elimina inoltre la necessità di esporre l'applicazione direttamente a Internet.

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

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

    • Nome di dominio: un nome di dominio che reindirizza 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 cookie con un prefisso per una maggiore sicurezza. __Host- Questa pratica difende il tuo dominio dai tentativi di falsificazione delle richieste tra siti (CSRF). Per ulteriori informazioni, consulta la Set-Cookie pagina del Mozilla Developer Network.

  3. Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente nel browser predefinito.

    ~/nodejs-example-dynamo$ eb open

Ora hai creato un ambiente Node.js Elastic Beanstalk 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ù istanze EC2 con un sistema di bilanciamento del carico e serve le richieste HTTP da Internet. Quando riceve una richiesta che richiede l'utilizzo AWS dei servizi, l'applicazione utilizza le autorizzazioni dell'istanza su cui viene eseguita per accedere a tali servizi.

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

  • AmazonDynamoDBFullAccess

  • AmazonSNSFullAccess

Per aggiungere policy al profilo dell'istanza di default
  1. Aprire la pagina Roles (Ruoli) nella console IAM.

  2. Selezionare aws-elasticbeanstalk-ec2-role.

  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 l'ambiente è pronto per distribuire ed eseguire l'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. Scarica ed estrai il contenuto del pacchetto sorgente dell'applicazione di esempio nodejs-example-dynamo.zip nella directory dell'applicazione. samples/nodejs-example-dynamo.zip 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 file ZIP della cartella del progetto. È possibile anche configurare la CLI EB per distribuire un artefatto del processo di build anziché creare un file ZIP della cartella di progetto. Per ulteriori informazioni, consulta Distribuzione di artifact invece della cartella del progetto.

  4. Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente 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'applicazione Web scrive i contenuti del modulo sulla tabella e attiva una notifica Amazon SNS via e-mail.

Pagina iniziale con messaggio teaser e pulsante di registrazione per il lancio imminente del prodotto.

In questo momento, l'argomento Amazon SNS è configurato con un'e-mail segnaposto per le notifiche. Aggiornerai la configurazione a breve, ma nel frattempo è possibile verificare la tabella DynamoDB e l'argomento Amazon SNS nella console di gestione Console di gestione AWS.

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 argomento Amazon SNS che dispone di due abbonamenti, uno per le notifiche e-mail per l'utente e un altro per una coda Amazon Simple Queue Service da cui un'applicazione worker è in grado di leggere per elaborare le richieste e inviare e-mail ai clienti interessati.

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

  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 email. Con l'inserimento del modulo viene inviata una richiesta POST con i dati al percorso /signup che scrive una voce nella tabella DynamoDB e pubblica un messaggio nell'argomento Amazon SNS per notificare il proprietario dell'iscrizione.

L'applicazione di esempio include i file di configurazione che creano la tabella DynamoDB, l'argomento Amazon SNS e la coda Amazon SQS 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 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 email.

    • STARTUP_SIGNUP_TABLE: nodejs-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 che l'argomento Amazon SNS impiega per le notifiche è impostato sul tuo indirizzo o su quello che inserisci nel file options.config.

    • 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. Quando la creazione dell'ambiente è completa, utilizza il comando eb open per aprire l'URL dell'ambiente nel browser predefinito.

    ~/nodejs-example-dynamo$ eb open

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

Ora, quando termini l'ambiente, la tabella nodejs-tutorial non sarà eliminata. Ciò consente di eseguire blue/green implementazioni, modificare i file di configurazione o chiudere il sito Web senza rischiare la perdita 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 delle regioni, seleziona il tuo. Regione AWS

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

  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 finito di lavorare con il codice demo, puoi terminare il tuo ambiente. Elastic Beanstalk elimina tutte le AWS risorse correlate, come istanze Amazon EC2, istanze di database, sistemi di bilanciamento del carico, gruppi di sicurezza e allarmi.

La rimozione delle risorse non comporta l'eliminazione dell'applicazione Elastic Beanstalk, quindi puoi creare nuovi ambienti per la tua applicazione in qualsiasi momento.

Per terminare l'ambiente Elastic Beanstalk dalla console
  1. Apri la console Elastic Beanstalk e, nell'elenco delle regioni, seleziona il tuo. Regione AWS

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

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

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

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. Scegliere Elimina.

Fasi successive

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

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

Infine, se intendi utilizzare l'applicazione in un ambiente di produzione, devi configurare un nome di dominio personalizzato per l'ambiente e abilitare HTTPS per le connessioni sicure.