Carichi di lavoro .NET su AWS App Runner

MODULO 1

Modulo 1: container ed elaborazione serverless su AWS

 MODULO DI APPRENDIMENTO

Panoramica

AWS AppRunner è un servizio AWS di elaborazione completamente gestito che consente agli sviluppatori di distribuire rapidamente applicazioni Web e API su larga scala, senza richiedere alcuna esperienza precedente sull'infrastruttura.

Obiettivi formativi

In questo modulo avrai modo di:

  • Scoprire di più sui container e sull'elaborazione serverless.
  • Esaminare i servizi di elaborazione AWS che supportano i container e l'elaborazione serverless.
  • Capire come determinare quando AWS App Runner è adatto ai tuoi carichi di lavoro.

I due temi più diffusi oggi sono i container e il serverless. I container semplificano la gestione dell'infrastruttura sottostante, sia on-premise che nel cloud. Oggi quasi l'80% di tutti i container nel cloud viene eseguito su AWS. L'elaborazione serverless gestisce l'infrastruttura per conto del cliente, consentendo al suo team di concentrarsi sulle priorità aziendali. AWS offre diversi servizi per container e serverless e per scegliere quello giusto per il proprio caso d'uso è opportuno esaminare alcune considerazioni chiave.

 Tempo richiesto per il completamento

30 minuti

Container

Non sarebbe bello impacchettare la tua applicazione, insieme alla sua configurazione, al runtime e alle dipendenze in un unico pacchetto ordinato? Questo è ciò che fanno i container: forniscono un modo standard per impacchettare il codice, le configurazioni e le dipendenze dell'applicazione in un unico oggetto. I container condividono un sistema operativo installato sul server e vengono eseguiti come processi con risorse isolate, garantendo distribuzioni rapide, affidabili e coerenti, indipendentemente dall'ambiente. 

Container e macchine virtuali

Per comprendere i container, parliamo prima di macchine virtuali in modo da poterli confrontare. Ai tempi in cui i server fisici erano dominanti, un server era un ambiente unico. Era dotato di una certa quantità di memoria, spazio di archiviazione e hardware di rete, eseguiva un sistema operativo specifico e serviva un'organizzazione. Poi è arrivata la virtualizzazione, che ha permesso di emulare un computer tramite software. Ora il tuo "server" potrebbe essere una macchina virtuale (VM) personalizzata con il sistema operativo e le risorse richieste dalla tua organizzazione e applicazione. Un livello software chiamato hypervisor crea, esegue e gestisce le macchine virtuali e le collega all'hardware fisico, con elevata efficienza. Il server fisico può eseguire più macchine virtuali per più tenant, il che riduce i costi complessivi dell'infrastruttura. Oggi, le VM sono dominanti nelle aziende e sono fondamentali per il cloud computing.

I container offrono alcuni degli stessi vantaggi delle macchine virtuali, ma sono più portatili ed efficienti. I container sono un modo per impacchettare un'app insieme alle sue dipendenze, librerie e impostazioni. Più container condividono un sistema operativo host e vengono eseguiti come processi isolati. Mentre le macchine virtuali virtualizzano l'hardware e vengono solitamente misurate in gigabyte, i container virtualizzano il sistema operativo e vengono solitamente misurati in megabyte. Questo li rende leggeri, portatili ed efficienti. I container sono particolarmente adatti per i microservizi, con una filosofia condivisa di componenti software leggeri e indipendenti.

I container, più delle macchine virtuali, cambiano il modo di lavorare degli sviluppatori perché sono progettati come unità di distribuzione del software. Gli sviluppatori creano container e li distribuiscono come parte del loro lavoro. I container e le macchine virtuali non sono una scelta univoca. Spesso è possibile utilizzarli insieme, ottenendo il meglio di entrambi i sistemi. I numerosi servizi AWS che supportano i container li eseguono su macchine virtuali.

I container condividono un sistema operativo installato sul server e vengono eseguiti come processi con risorse isolate, garantendo distribuzioni rapide, affidabili e coerenti, indipendentemente dall'ambiente. Indipendentemente dal fatto che la distribuzione venga eseguita in locale sul laptop o in produzione, l'esperienza rimarrà la stessa, a parte i segreti e le impostazioni dell'ambiente.

Riferimento: Container in AWS

Tipi di container

Piattaforma Docker

Docker è una piattaforma software che permette di creare, testare e distribuire applicazioni con la massima rapidità. Docker definisce un container come "un processo nell'ambiente di sperimentazione (sandbox) sulla tua macchina isolato da tutti gli altri processi sulla macchina host. Questo isolamento sfrutta gli spazi dei nomi del kernel e i gruppi di controllo, funzionalità presenti in Linux da molto tempo. Docker ha lavorato per rendere queste funzionalità accessibili e facili da usare".

I vantaggi derivanti dall'utilizzo di Docker includono la spedizione del codice più rapida, la standardizzazione delle operazioni delle applicazioni, lo spostamento del codice senza interruzioni e il risparmio di denaro grazie all'utilizzo efficiente delle risorse. In media, gli utenti Docker distribuiscono software con una frequenza 7 volte superiore rispetto a chi non utilizza Docker. Puoi standardizzare le tue operazioni per la distribuzione, la risoluzione dei problemi e il rollback dei container. Passare dalle macchine locali alla produzione è semplice e immediato. Con i container si può eseguire più codice su ogni server, risparmiando denaro.

Le applicazioni .NET moderne (scritte in .NET Core 3.1 o .NET 5+) possono essere eseguite su Linux e sono compatibili con i container Docker.

I servizi AWS che supportano i container Docker includono AWS App Runner, Amazon Elastic Container Service (ECS) e Amazon Elastic Kubernetes Service (EKS), AWS Fargate su ECS o EKS e AWS Lambda.

Riferimento: Docker in AWS

Container Linux

I container Docker Linux vengono eseguiti su host Linux. Le applicazioni .NET moderne (scritte in .NET Core 3.1 o .NET 5+) possono essere eseguite su container Linux, ma non le applicazioni .NET Framework legacy, che richiedono Windows.

I servizi AWS che supportano i container Linux includono AWS App Runner, Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), AWS Fargate su ECS o EKS e AWS Lambda.

Container Windows

I container Windows supportano i sistemi operativi Microsoft Windows. I container Windows non possono essere eseguiti su istanze di container Linux e vale anche il contrario.

I servizi AWS che supportano i container Windows includono Amazon Elastic Container Service (ECS), Amazon ECS su AWS Fargate e Amazon Kubernetes Service (EKS). AWS App Runner non supporta i container Windows.

Riferimento: Container Windows in Amazon EC2

Vantaggi dei container

I container offrono molti vantaggi tangibili:

Leggerezza

I container sono pacchetti software leggeri. Sono notevolmente più piccoli delle macchine virtuali perché non includono un'immagine del sistema operativo guest. I container, invece, condividono un sistema operativo con il proprio host. Per questo motivo, i container sono in genere più rapidi da avviare rispetto alle macchine virtuali.

Funzionamento standardizzato e portabilità

I container forniscono un ambiente software coerente e portatile. Ciò consente di standardizzare le operazioni di distribuzione, analisi dei problemi e rollback.

Trasferimenti ottimizzati

I container si trasferiscono senza problemi. Puoi trasferire le applicazioni containerizzate dalle macchine locali agli ambienti di produzione e dagli ambienti on-premise al cloud. I container possono semplificare l'implementazione delle pipeline CI/CD grazie alla loro coerenza e alle funzionalità di controllo delle versioni.

Distribuzione più veloce

L'effetto combinato di container leggeri e portatili che possono essere spostati facilmente si traduce in agilità. È possibile sviluppare più rapidamente quando si lavora con i container, perché eliminano il tempo dedicato alle dipendenze del software, alla configurazione degli ambienti e alla risoluzione delle differenze tra gli ambienti. Ad esempio, gli utenti Docker distribuiscono software con una frequenza 7 volte superiore rispetto a chi non utilizza Docker.

Spese ridotte

I container consentono di eseguire più codice su ogni istanza del server. Ciò migliora l'utilizzo e consente di risparmiare denaro.

Riferimenti: AWS | Cos'è Docker?, AWS | Container

Vantaggi dei container in AWS

AWS è una destinazione cloud popolare per i container. Oggi quasi l'80% di tutti i container nel cloud viene eseguito su AWS. Oltre ai vantaggi intrinseci dei container, ottieni questi vantaggi anche ospitando i container su AWS. 

Sicurezza

AWS offre oltre 200 servizi e funzionalità chiave che garantiscono la sicurezza, la conformità e la governance. AWS gestisce i container con un forte isolamento di sicurezza e applicando gli ultimi aggiornamenti di sicurezza. Puoi impostare autorizzazioni di sicurezza granulari per ogni container.

Affidabilità

AWS fornisce un'infrastruttura globale che include 69 zone di disponibilità in 22 Regioni, che consentono di eseguire container in tutto il mondo. Per tutti i servizi AWS relativi ai container è previsto un Accordo sul livello di servizio (SLA).

Possibilità di scelta

AWS offre un'ampia scelta di servizi per i container, tra cui servizi gestiti e servizi serverless. Ne fanno parte il servizio Amazon Elastic Container Registry (ECR), Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), AWS Fargate, Amazon Elastic Compute Cloud (EC2) e AWS App Runner.

AWS fornisce anche lo strumento App2Container (A2C), che aiuta a containerizzare e migrare le applicazioni .NET e Java esistenti.

Integrazione con AWS

I servizi AWS per i container sono profondamente integrati con AWS. Ciò consente alle applicazioni container di sfruttare i servizi AWS per il dimensionamento automatico, il networking, la sicurezza e il monitoraggio. Ottieni l'agilità dei container unita all'elasticità e alla sicurezza di AWS.

Riferimento: Approfondimento sui container in AWS

Casi d'uso per i container

Di seguito sono riportati alcuni casi d'uso comuni per i container.

Microservizi

I microservizi sono un approccio allo sviluppo software in cui il software è composto da piccoli servizi indipendenti che comunicano tramite API ben definite. Questi servizi sono controllati da piccoli team autonomi. Le architetture di microservizi rendono le applicazioni più facili da dimensionare e più veloci da sviluppare. Ciò consente l'innovazione e accelera il time-to-market per le nuove funzionalità. I container sono una strategia popolare per i microservizi. Le applicazioni monolitiche possono essere suddivise in microservizi, ossia in componenti indipendenti all'interno di container.

Elaborazione in batch

I processi di elaborazione in batch e di estrazione, trasformazione e caricamento (ETL) sono ideali per i container. Possono essere avviati rapidamente ed eseguiti secondo una pianificazione o in risposta a eventi. Possono dimensionarsi dinamicamente in risposta alla domanda.

Machine learning

Utilizza i container per dimensionare rapidamente i modelli di machine learning per l'addestramento e l'inferenza ed eseguili vicino alle origini dati su qualsiasi piattaforma.

Applicazioni ibride

I container consentono di standardizzare il modo in cui viene distribuito il codice, semplificando la creazione di flussi di lavoro per applicazioni eseguite tra ambienti on-premise e cloud. 

Migrazione di applicazioni nel cloud

I container aiutano nella migrazione "lift-and-shift" verso il cloud. Puoi facilmente impacchettare intere applicazioni in container e spostarle facilmente nel cloud senza modifiche al codice. Puoi inoltre sfruttare l'elasticità del cloud per dimensionare i container.

Riferimento: AWS | Microservizi

Serverless

Le tecnologie serverless consentono di creare ed eseguire applicazioni senza dover pensare ai server. AWS offre servizi gestiti per l'hosting del codice, la gestione dei dati e l'integrazione di applicazioni che non richiedono la gestione dei server. Offrono dimensionamento automatico, alta disponibilità integrata e un modello di fatturazione in base all'utilizzo. 

Vantaggi del serverless

Le tecnologie serverless ti consentono di concentrarti sull'applicazione e sui clienti anziché sulla gestione dell'infrastruttura.

Eliminazione del sovraccarico operativo

Con le tecnologie serverless, non è necessario occuparsi della gestione dell'infrastruttura, del provisioning della capacità e dell'applicazione di patch. L'eliminazione del sovraccarico operativo consente ai team di distribuire le release rapidamente, ricevere feedback e iterare per arrivare sul mercato più velocemente.

Adattamento su larga scala

Le tecnologie serverless possono dimensionarsi automaticamente da zero a picchi di richieste. Ciò consente di adattarsi prontamente alle esigenze dei clienti.

Riduzione dei costi

Le tecnologie serverless possono dimensionarsi automaticamente da zero a picchi di richieste. Ciò consente di adattarsi alle esigenze dei clienti più velocemente che mai.

Creazione di applicazioni migliori in modo più semplice

Le tecnologie serverless sono integrate con altri servizi AWS. Puoi concentrarti sulla creazione dell'applicazione anziché sulla sua configurazione.

Riferimento: AWS | Serverless

Casi d'uso per il serverless

Le tecnologie serverless sono adatte per i seguenti casi d'uso comuni:

Applicazioni Web

Le applicazioni Web, incluse le API Web e i microservizi, possono essere create facilmente con tecnologie serverless. I servizi di elaborazione serverless si dimensionano automaticamente in base al traffico Web.

Elaborazione dei dati

Puoi elaborare i dati praticamente su qualsiasi scala con tecnologie di dati serverless come Amazon Simple Storage Service (S3), Amazon DynamoDB, Amazon Relational Database Service Proxy (RDS Proxy) e Amazon Aurora serverless.

Elaborazione in batch

Le tecnologie serverless possono eseguire attività in batch in base a una pianificazione o in risposta a un evento.

Acquisizione di eventi

È possibile eseguire funzioni serverless per elaborare, indicizzare o analizzare i dati non strutturati in entrata e applicare servizi di machine learning.

Servizi di elaborazione AWS per i container

Ora che conosci i container e il serverless, esaminiamo i servizi di elaborazione AWS che supportano i container, alcuni dei quali supportano anche il serverless. Tutti questi servizi supportano i container Docker Linux e alcuni supportano anche i container Windows. L'elenco completo dei servizi e degli strumenti AWS per i container è disponibile alla pagina Container in AWS. Non è necessario conoscere tutti i dettagli su questi servizi, ma è necessario capire cosa li differenzia l'uno dall'altro.

Registro dei container: Amazon ECR

Amazon Elastic Container Registry (ECR) consente di archiviare, condividere e distribuire software con container, pubblicamente o privatamente. In genere invii i tuoi container a ECR, dove si trovano nelle immediate vicinanze dei servizi di elaborazione AWS per i container come AWS App Runner, Amazon ECS o Amazon EKS.

Orchestrazione dei container: Amazon ECS, Amazon EKS e AWS Fargate

Questi servizi ospitano i container e li orchestrano, il che significa che automatizzano il provisioning, la distribuzione, la rete, il dimensionamento, la disponibilità e la gestione del ciclo di vita dei container.

Amazon Elastic Container Service (ECS) è un servizio di orchestrazione di container completamente gestito che semplifica la distribuzione, la gestione e il dimensionamento delle applicazioni containerizzate, inclusi i microservizi. Puoi eseguire container altamente sicuri, affidabili e scalabili su ECS.

Amazon Elastic Kubernetes Service (EKS) è un servizio di container gestito per l'esecuzione e il dimensionamento di applicazioni Kubernetes, nel cloud od on-premise. Kubernetes è un sistema open source per automatizzare l'implementazione, il dimensionamento e la gestione delle applicazioni containerizzate. Amazon EKS è il modo più affidabile per avviare, eseguire e dimensionare Kubernetes.

AWS Fargate è un sistema di elaborazione serverless per container. Sia Amazon ECS che Amazon EKS sono disponibili in formato serverless e hanno un modello di prezzo diverso se combinati con AWS Fargate.

Oltre a gestire i container nel cloud, sia Amazon ECS che Amazon EKS possono anche gestire le applicazioni container on-premise, tramite i servizi Amazon ECS Anywhere o Amazon EKS Anywhere.

Funzioni serverless: AWS Lambda

AWS Lambda è un servizio serverless basato su eventi per l'esecuzione di funzioni. Supporta i container.

Controllo a livello di server: istanze Amazon EC2 e istanze spot di EC2

Queste opzioni offrono il massimo controllo sui dettagli dell'infrastruttura, ma sono anche il modo meno gestito per eseguire container su AWS.

Amazon Elastic Compute Cloud (Amazon EC2) è un servizio che fornisce capacità di elaborazione sicura e ridimensionabile nel cloud. Puoi eseguire container con controllo a livello di server su EC2. A tale scopo, dovrai allocare le istanze EC2 e installare Docker su di esse.

Se le tue applicazioni sono tolleranti ai guasti, puoi eseguirle su istanze spot di Amazon EC2, disponibili con uno sconto fino al 90%. Le istanze spot consentono di sfruttare la capacità EC2 inutilizzata nel cloud AWS. Per utilizzare le istanze spot, l'applicazione deve essere interrompibile. Potresti prendere in considerazione le istanze spot per l'analisi dei dati, i processi in batch, l'elaborazione in background o le attività opzionali.

Applicazioni Web semplici: AWS Lightsail

AWS Lightsail è adatto per semplici applicazioni containerizzate che desideri eseguire a un prezzo mensile fisso. È una buona scelta per studenti, piccole imprese e startup che dispongono di un sito Web e di un database di piccole dimensioni per essere operativi nel cloud. 

Completamente gestito: AWS App Runner

Infine, siamo arrivati all'argomento di questo corso, AWS App Runner. App Runner è un servizio completamente gestito che consente agli sviluppatori di distribuire rapidamente applicazioni Web e API containerizzate su larga scala e senza richiedere alcuna esperienza pregressa nell'infrastruttura. App Runner è anche serverless, offrendoti i vantaggi dei container e del serverless contemporaneamente. App Runner può eseguire carichi di lavoro .NET moderni su container Linux.

Scelta di un servizio di elaborazione AWS

Ora che abbiamo esaminato i servizi di elaborazione AWS per i container, esaminiamo alcune domande chiave che ti aiuteranno a decidere se AWS App Runner o un altro servizio è adatto alla tua applicazione. La tabella 1 riporta le considerazioni sui servizi AWS.

Tabella 1: Tabella esplicativa dei servizi di elaborazione AWS per i container

Sei un principiante o un esperto di container?

Se sei un principiante nel campo dei container, prendi in considerazione AWS App Runner. È l'opzione più ricca di servizi e non richiede una precedente esperienza nell'infrastruttura.

Hai bisogno di container Windows?

Se desideri eseguire applicazioni .NET Framework legacy in un container, sarai limitato ai container Windows. I servizi AWS che supportano i container Windows sono Amazon ECS, Amazon ECS che utilizza AWS Fargate e Amazon EKS. Se utilizzi un'applicazione moderna .NET, puoi utilizzare container Linux e qualsiasi servizio di elaborazione AWS che supporta i container.

L'orchestrazione dei container è un'esigenza attuale o futura?

C'è una grande differenza tra un'applicazione a container singolo e una combinazione di container che devono essere orchestrati. Se hai una disposizione complessa di container e hai bisogno di una gestione per l'intero ciclo di vita, prendi in considerazione Amazon ECS o Amazon EKS. 

Il serverless è la soluzione giusta per te?

Se la tua applicazione si adatta ai casi d'uso serverless e sei disposto a lasciare che AWS gestisca l'infrastruttura e il modello di pagamento serverless, considera queste opzioni AWS Lambda, AWS App Runner o AWS Fargate.

  1. Se la tua applicazione è composta da funzioni basate su eventi, puoi usare AWS Lambda.
  2. Se hai bisogno di orchestrazione, dovresti usare AWS Fargate con Amazon ECS o con Amazon EKS.
  3. Se preferisci un servizio completamente gestito, scegli AWS App Runner.

Punti chiave

Ora dovresti avere una conoscenza di base dei container e del serverless e dei rispettivi vantaggi. Hai imparato a conoscere i diversi servizi di elaborazione AWS e cosa li differenzia. Hai anche imparato quali domande porre per determinare il servizio di elaborazione AWS giusto per un carico di lavoro.

Conclusioni

In questo modulo hai appreso cosa sono i container, come si differenziano dalle macchine virtuali e come si distinguono i container Docker Linux dai container Windows. Sono leggeri, standardizzati e portatili, facili da spostare, consentono di distribuire più velocemente e di risparmiare denaro. I container in AWS sono sicuri, affidabili, supportati da una vasta gamma di servizi per i container e profondamente integrati con AWS.

Successivamente, hai imparato a conoscere le tecnologie serverless, che ti consentono di creare applicazioni senza dover pensare ai server. I vantaggi includono l'eliminazione del sovraccarico operativo, il dimensionamento automatico, la riduzione dei costi e la creazione di applicazioni in modo più semplice tramite integrazioni con altri servizi AWS. I casi d'uso sono le applicazioni Web, l'elaborazione dei dati, l'elaborazione in batch e l'acquisizione di eventi.

Hai imparato a conoscere i servizi di elaborazione AWS per i container e come scegliere un servizio di elaborazione. Hai appreso che AWS App Runner è un servizio completamente gestito per l'hosting di container e che è anche serverless.

Questa pagina è stata utile?