In questo modulo, utilizzerai Amazon Elastic Container Service (Amazon ECS) per avviare un cluster gestito di istanze di calcolo EC2 e distribuire l'immagine come un container in esecuzione sul cluster. Inizia a creare

panoramica dell'architettura

a. Client
Il client invia una richiesta attraverso la porta 80 al sistema di bilanciamento del carico.

b. Sistema di bilanciamento del carico
Il sistema di bilanciamento del carico distribuisce le richieste attraverso tutte le porte disponibili.

c. Gruppi di destinazione
Le istanze sono registrate nell’applicazione del gruppo di destinazione.

d. Porte dei container
Ogni container esegue un singolo processo di applicazione che vincola il cluster node.js alla porta 80 all’interno del namespace.

e. Node.js del monolito distribuito in container
Il cluster node.js padre è responsabile della distribuzione del traffico verso i lavoratori all'interno dell'applicazione monolitica. Questa architettura è distribuita in container, ma ancora monolitica perché ogni container dispone di tutte le stesse caratteristiche degli altri container.

Amazon Elastic Container Service (ECS) è un servizio di gestione di container altamente scalabile ad elevate prestazioni che supporta i container Docker e consente di eseguire applicazioni su un cluster gestito di istanze Amazon EC2 in modo semplice. Bastano semplici chiamate API per avviare e interrompere applicazioni compatibili con Docker, eseguire query sullo stato del cluster e accedere a molte funzioni comuni come i gruppi di sicurezza, Elastic Load Balancing, i volumi EBS e i ruoli IAM.

Puoi usare Amazon ECS per pianificare il posizionamento dei contenitori nel cluster in base alle esigenze di risorse e ai requisiti di disponibilità. Puoi anche integrare il sistema di pianificazione interno o di terze parti in uso per soddisfare specifici requisiti aziendali o applicativi.

Non sono previsti costi aggiuntivi per l'utilizzo di Amazon Elastic Container Service. I prezzi sono calcolati in base alle risorse AWS (ad esempio istanze di EC2 o volumi EBS) che vengono create per memorizzare e gestire l'applicazione.


Segui i passaggi indicati nelle istruzioni seguenti per distribuire l'applicazione node.js utilizzando Amazon ECS. Fai clic sul numero della fase per espandere la sezione.

break-the-monolith
  • Fase 1. Avvia un cluster ECS utilizzando AWS CloudFormation

    Innanzitutto, creerai un cluster Amazon ECS distribuito dietro a un Application Load Balancer.

    1. Vai alla console AWS CloudFormation.
    2. Seleziona Create Stack (crea stack).
    3. Seleziona “Upload a template to Amazon S3” (Carica un modello su Amazon S3) e scegli il file ecs.yml dal progetto GitHub in amazon-ecs-nodejs-microservice/2-containerized/infrastructure/ecs.yml Seleziona Next (Successivo).
    4. Come nome dello stack, immetti BreakTheMonolith-Demo. Mantieni inalterati i valori degli altri parametri:
      1. Desired Capacity = 2
      2. InstanceType = t2.micro
      3. MaxSize = 2
    5. Seleziona Next (Successivo).
    6. Non è necessario modificare opzioni in questa pagina. Seleziona Next.
    7. Seleziona la casella in fondo alla pagina successiva e seleziona Create (Crea). Il tuo stack sarà visualizzato con CREATE_IN_PROGRESS in arancione. È possibile selezionare il pulsante di aggiornamento nella parte superiore destra della schermata per controllare lo stato. Questo processo richiede in genere meno di 5 minuti.
    create stack (crea stack)

    ⚐ NOTA: puoi anche utilizzare AWS CLI per distribuire AWS CloudFormation Stack. Aggiungi la tua regione a questo codice ed esegui nel terminale dalla cartella amazon-ecs-nodejs-microservices/3-microservices sul tuo computer.

    $ aws cloudformation deploy \
       --template-file infrastructure/ecs.yml \
       --region <region> \
       --stack-name Nodejs-Microservices \
       --capabilities CAPABILITY_NAMED_IAM
  • Fase 2. Controlla se il tuo cluster è in funzione

    verifica il tuo cluster
    • Se fai clic sul cluster e selezioni la scheda “Tasks”(Attività) , non ci sarà nessuna attività in corso.
    tasks (attività)
    • Seleziona la scheda “ECS Instances” (Istanze ECS), verrà visualizzato il modello AWS CloudFormation delle due istanze EC2 creato.
    ECS instances (istanze ECS)
  • Fase 3. Scrivi una definizione dell'attività

    La definizione dell'attività indica ad Amazon ECS come distribuire i container della tua applicazione nel cluster.

    • Passa al menu "Task Definitions" (Definizioni dell’attività) sul lato sinistro della console di Amazon ECS.
    • Seleziona Create new Task Definition (Crea nuova definizione dell’attività).
    • Task Definition Name (Nome definizione dell’attività) = api.
    • Seleziona Add Container (Aggiungi container).
    • Specifica i parametri riportati di seguito.
      • Se un parametro non è definito, lascialo vuoto o con le impostazioni predefinite: Container name (Nome container) = api image (immagine) = [account-id].dkr.ecr.[region]. amazonaws.com/api: v1 (questa è l'URL dell'immagine del repository ECR dal passaggio precedente).
      • Assicurati che il tag : v1 corrisponda al valore che hai utilizzato nel modulo 1 per applicare il tag e inviare l'immagine. Memory (Memoria) = Hard limit: 256 Port mappings (Mappatura porta) = Host port:0, Container port:3000 CPU units = 256
    • Seleziona Add (Aggiungi).
    • Seleziona Create (Crea).
    • La tua definizione dell'attività comparirà nella console.
    definizione dell'attività
  • Fase 4. Configura Application Load Balancer: gruppo di destinazione

    Application Load Balancer (ALB) consente al servizio di accettare il traffico in entrata. ALB instrada automaticamente il traffico verso le istanze in esecuzione sul tuo cluster utilizzandole come un gruppo di destinazione.

    Controlla il tuo nome VPC: se questa non è la prima volta che utilizzi questo account AWS, è possibile avere più VPC. È importante configurare il tuo gruppo target con il corretto VPC.

    attributo vpc

    Configura il gruppo di destinazione ALB

    • Passa alla sezione Target Group (Gruppo di destinazione) della console EC2.
    • Seleziona Create target group (Crea gruppo di destinazione).
    • Configura il gruppo di destinazione (non modificare le impostazioni predefinite se non sono specificate qui):
      • Name (Nome) = api
      • Protocol (Protocollo) = HTTP
      • Port (Porta) = 80
      • VPC = seleziona il VPC corrispondente al sistema di bilanciamento del carico dal passaggio precedente. Questa probabilmente NON è il tuo VPC di default.
      • Impostazioni avanzate di controllo dello stato: Healthy threshold (Soglia integrità) = 2 Unhealthy threshold (Soglia danneggiamento) = 2 Timeout = 5 Interval (Intervallo) = 6.
    • Seleziona Create (Crea).
    create target groups (crea gruppi di destinazione)
  • Fase 5. Configura Application Load Balancer: Listener

    Il Listener controlla le richieste di connessione in entrata sulla tua ALB.

    Aggiungi un Listener alla tua ALB

    • Passa alla sezione Load Balancer (Sistema di bilanciamento del carico) della console EC2.
    • Dovrebbe essere già presente un sistema di bilanciamento del carico denominato demo.
    • Seleziona la casella di controllo per visualizzare i dettagli del sistema di bilanciamento del carico.
    • Seleziona la scheda Listener.
    • Seleziona Crea Listener:
      • Protocol (Protocollo) = HTTP
      • Port (Porta) = 80
      • Default target group (Gruppo di destinazione predefinito) = api
    • Fai clic su Create (Crea).
    listener per ALB
  • Fase 6. Distribuisci il monolito come servizio

    Ora distribuirai il monolito come servizio nel cluster.

    • Vai al menu "Clusters" sul lato sinistro della console di Amazon ECS.
    • Seleziona il tuo cluster: BreakTheMonolith-Demo-ECSCluster.
    • Nella scheda Services (Servizi), seleziona Create (Crea).
    • Configura il servizio (non modificare i valori di default): Service name (Nome servizio) = api Number of tasks (Numero di attività) = 1
    • Seleziona Configure ELB (Configura ELB):
      • Tipo di ELB = Application Load Balancer.
      • Per il ruolo IAM, seleziona BreakTheMonolith-Demo-ECSServiceRole.
      • Seleziona il nome del sistema di bilanciamento del carico ELB = demo.
      • Seleziona Add to ELB (Aggiungi a ELB).
    • Aggiungi il tuo servizio al gruppo di destinazione:
      • porta Listener = 80:HTTP
      • Nome gruppo di destinazione = seleziona il tuo gruppo: api.
    • Seleziona Save (Salva).
    distribuisci il tuo servizio
    • Seleziona Create Service (Crea servizio).
    • Seleziona View Service (Visualizza servizio).
    configura gli elementi opzionali

    Ottimo lavoro! Ora il tuo servizio è in funzione. Potrebbe volerci un minuto perché il container venga registrato come funzionante e cominci a ricevere traffico.

  • Fase 7. Prova il tuo monolito

    Per convalidare la distribuzione, invia un ping al servizio per controllare se è accessibile da Internet.

    Per trovare l'URL del tuo servizio :

    • Vai alla sezione Load Balancers (Sistemi di bilanciamento del carico) della console EC2.
    • Seleziona la demo del sistema di bilanciamento del carico.
    • Copia e incolla il valore per il nome DNS nel tuo browser.
    • Dovrebbe essere visualizzato il messaggio Ready to receive requests (Pronto per ricevere richieste).


    Esamina ogni parte del servizio:
    l'applicazione node.js instrada il traffico a ciascun lavoratore in base all'URL. Per visualizzare un lavoratore, è sufficiente aggiungere il nome del lavoratore api/[worker-name] alla fine del nome DNS, ad esempio:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts

    È anche possibile aggiungere un numero di voce al termine dell'URL per espandere una determinata voce. Ad esempio: http://[DNS name]/api/posts/1 o http://[DNS name]/api/users/2

    demo dell’utente