Modulo 2: Strumenti per sviluppatori di container .NET su AWS
MODULO DI APPRENDIMENTO
AWS fornisce strumenti gratuiti e toolkit di ambienti di sviluppo integrati che aiutano a creare e implementare applicazioni .NET e .NET Framework containerizzate su Amazon ECS, Amazon ECR e AWS Fargate. Oltre alla Console di gestione AWS, le integrazioni con Visual Studio, JetBrains Rider, Visual Studio Code e la CLI dotnet offrono la flessibilità di scegliere gli strumenti adatti per soddisfare i requisiti di sviluppo e integrazione e implementazione continua (CI/CD)
In questo modulo imparerai a lavorare con Amazon ECS, AWS Fargate e Amazon ECR utilizzando AWS Toolkit per Visual Studio e a livello della riga di comando utilizzando le estensioni CLI dotnet.
Tempo richiesto per il completamento
60 minuti
Implementazione di applicazioni .NET in container su AWS con Visual Studio
AWS Toolkit per Visual Studio è un'estensione gratuita per Visual Studio su Windows (non supporta Visual Studio per Mac). Il toolkit fornisce una finestra di esplorazione per diversi servizi AWS, inclusi servizi container e procedure guidate che aiutano a creare e pubblicare applicazioni nel cloud AWS. Queste procedure guidate supportano l'implementazione di applicazioni .NET e .NET Framework su AWS Elastic Beanstalk, Amazon ECS ed ECR, AWS Fargate e AWS App Runner dall'interno di Visual Studio (questo corso si concentra sull'implementazione in ECS/ECR e Fargate).
Installa il toolkit dal marketplace di Visual Studio, https://marketplace.visualstudio.com/vs. Sono disponibili due versioni supportate per Visual Studio in esecuzione su Windows:
Il toolkit è installabile in Visual Studio in esecuzione sul computer di sviluppo locale e anche nelle immagini di Visual Studio incluse nella licenza fornite da Amazon Elastic Compute Cloud (EC2). Queste immagini sono la soluzione ideale per scenari di sviluppo che richiedono l'uso occasionale di Visual Studio senza la necessità di impegni di licenza a lungo termine.
Una volta installato, il toolkit richiede un set di credenziali per abilitare l'accesso ai servizi AWS per tuo conto. Tali set sono denominati profili di credenziali e il toolkit ti spiegherà nel dettaglio la procedura qualora sia necessario crearli. Tuttavia, se in precedenza hai utilizzato strumenti come AWS CLI o Strumenti AWS per PowerShell sul tuo computer, il toolkit rileverà in automatico i profili di credenziali utilizzati con tali strumenti e li elencherà nel menu a discesa Profilo: nella parte superiore della finestra degli strumenti dell'Esploratore AWS.
Se la finestra non è visibile, utilizza la funzionalità Esploratore AWS nella voce Visualizza dell'IDE per visualizzarla. Per cominciare, seleziona un profilo di credenziali (o creane uno) e poi seleziona una Regione AWS dal menu a discesa Regione: nella finestra dell'esploratore.
Uso di Amazon ECS e Amazon ECR dalla vista dell'Esploratore AWS
Dopo aver selezionato un profilo di credenziali e una regione nell'esploratore, puoi accedere alle tue risorse in Amazon ECS e Amazon ECR dall'interno di Visual Studio. Nella finestra dell'Esploratore AWS, dopo aver espanso la voce Amazon Elastic Container Service nell'esploratore e le sue due voci secondarie, Cluster e Repository, sarai in grado di lavorare con i cluster e i repository esistenti nel tuo registro privato ECR che appartengono alla regione selezionata. Il toolkit non supporta l'uso del registro pubblico ECR.
Esamina ogni voce riportata di seguito per avere maggiori informazioni sulle funzionalità disponibili attraverso i menu contestuali del gruppo Cluster, di ogni cluster, del gruppo Repository e di ogni repository mostrato nella vista dell'Esploratore.
Menu contestuale Cluster
Il menu contestuale del gruppo Cluster offre le seguenti opzioni:
- Aggiorna: aggiorna la raccolta di cluster mostrata nell'Esploratore.
Menu contestuale Cluster
Il menu contestuale di ogni cluster implementato mostrato nell'Esploratore offre le seguenti opzioni:
- Visualizza i dettagli del cluster (apre una nuova finestra di documento).
- Elimina il cluster.
Non è possibile eliminare un cluster con attività in esecuzione. È possibile rimuovere le attività da un cluster utilizzando l'opzione del menu Visualizza per aprire la vista dei dettagli di un cluster e quindi selezionando Modifica nella vista e impostando il valore Attività desiderate su 0. Una volta rimosse tutte le attività in esecuzione, elimina il cluster utilizzando il pulsante Elimina nella vista o la voce del menu contestuale. La vista con i dettagli del cluster è mostrata di seguito:
Menu contestuale Repository
Il menu contestuale del gruppo Repository offre le seguenti opzioni:
- Crea repository: apre una finestra di dialogo per inserire il nome del nuovo repository. Tieni presente che i nuovi repository possono essere creati solo nel tuo registro privato.
- Aggiorna: aggiorna la raccolta di repository mostrata nell'Esploratore.
Menu contestuale Repository
Il menu contestuale di un repository elencato nel gruppo Repository offre le seguenti opzioni:
- Visualizza: apre una nuova finestra di documento che elenca le immagini contenute all'interno del repository. Qui si possono visualizzare anche i comandi specifici necessari per inviare le immagini a tale repository
- Elimina: apre una finestra di dialogo per confermare l'eliminazione del repository. Il toolkit può facoltativamente eliminare tutte le immagini contenute nel repository, prima di eliminare il repository stesso (i repository non vuoti non possono essere eliminati).
Implementazione su Amazon ECS e Amazon ECR da Visual Studio
Oltre a lavorare con cluster e repository nell'Esploratore AWS, il toolkit offre due opzioni di implementazione per aiutarti a implementare le applicazioni e immagini di container su Amazon ECS, AWS Fargate e Amazon ECR. Entrambe le opzioni sono disponibili attraverso il menu contestuale del progetto di applicazione in Solution Explorer: Pubblica su AWS e Pubblica container su AWS (legacy).
Le sezioni seguenti descrivono ciascuna di queste opzioni e i casi in cui si potrebbero utilizzare.
Pubblica su AWS
Pubblica su AWS supporta l'implementazione di applicazioni .NET su Amazon ECS con AWS Fargate, AWS App Runner e macchine virtuali in AWS Elastic Beanstalk. È inoltre possibile utilizzare tale opzione per pubblicare immagini di container su Amazon ECR. Oltre a offrire l'implementazione su più servizi attraverso un unico portale IDE, Pubblica su AWS offre anche:
- La possibilità di creare progetti di implementazione personalizzati per un'applicazione. I progetti di implementazione personalizzati consentono la creazione di risorse AWS aggiuntive durante l'implementazione e abilitano impostazioni UX di implementazione personalizzate. Verificando il progetto di implementazione nel controllo del codice sorgente, insieme all'applicazione, tutti i team di sviluppo hanno accesso alle stesse impostazioni personalizzate e risorse di implementazione inerenti all'applicazione quando la implementano dall'interno di Visual Studio.
- Un'esperienza a riga di comando dotnet, disponibile dopo aver installato il pacchetto AWS.Deploy.Tools da NuGet. L'esperienza a riga di comando presenta le medesime opzioni, incluse quelle aggiunte attraverso progetti di implementazione personalizzati. L'uso dello strumento a riga di comando è descritto più avanti nella presente sezione. Quando si esegue l'implementazione su servizi container AWS, non è necessario che le applicazioni dispongano di un Dockerfile preesistente; il Dockerfile viene generato in caso di necessità.
Nota: Pubblica su AWS supporta solo applicazioni .NET; non supporta l'implementazione di applicazioni che utilizzano .NET Framework.
Nota: l'implementazione su AWS App Runner è discussa in un corso a parte, Carichi di lavoro .NET su AWS App Runner.
Pubblica su AWS richiede un paio di installazioni preliminari. Se una dovesse mancare, ti chiederà di eseguirla. L'AWS Cloud Deployment Kit (CDK) consente di fornire e configurare le risorse AWS a supporto dell'implementazione dell'applicazione. CDK richiede l'installazione di Node.js. Apri un browser, vai all'indirizzo https://nodejs.org/en/ e installa la versione con supporto a lungo termine più recente (latest long-term supported, LTS) o la versione corrente di Node.js. Una volta installato Node.js, apri uno shell (interprete di comandi) ed esegui il comando npm install -g aws-cdk per installare CDK. Una volta installati questi due prerequisiti, è possibile eseguire le implementazioni utilizzando Pubblica su AWS.
Avvia Pubblica su AWS dal menu contestuale del progetto dell'applicazione in Solution Explorer. L'applicazione viene analizzata e viene visualizzata una serie di opzioni di implementazione, denominate ricette. Per le applicazioni già configurate con un Dockerfile, vengono visualizzate per prime le ricette per implementare l'applicazione su Amazon ECS con AWS Fargate o per inviare un'immagine di container ad Amazon ECR. Per le applicazioni non ancora configurate con un Dockerfile, queste opzioni vengono visualizzate per le applicazioni Web e API Web ASP.NET Core (tra cui Blazor Server) e le applicazioni di console.
Nota: se l'applicazione è già stata implementata (su qualsiasi servizio), l'interfaccia utente di pubblicazione proporrà di eseguire prima una reimplementazione sull'una o più destinazioni esistenti. In tal caso, seleziona l'opzione della scheda Pubblica su nuova destinazione per eseguire una nuova implementazione, anziché una reimplementazione.
La schermata seguente mostra le ricette disponibili, al momento della stesura, per un'applicazione Web ASP.NET Core 6. Se disponibili, i progetti di implementazione personalizzati per l'applicazione verranno elencati sopra le ricette fornite da AWS. Nella schermata è selezionata la ricetta per eseguire la pubblicazione su Amazon ECS utilizzando AWS Fargate. Il riquadro a destra mostra le opzioni di implementazione predefinite per tale ricetta.
È richiesto almeno il nome dell'applicazione; per impostazione predefinita viene utilizzato il nome del progetto. A seconda dell'applicazione, potrebbe essere possibile selezionare il pulsante Pubblica e avviare immediatamente l'implementazione. Tuttavia, se l'applicazione effettua chiamate ai servizi AWS, sarà necessario fornire un ruolo personalizzato contenente le autorizzazioni che consentono all'applicazione di accedere ai servizi e alle API di servizio. Seleziona il pulsante Modifica impostazioni per specificare, se necessario, un ruolo per l'applicazione e le eventuali modifiche all'infrastruttura desiderate prima dell'implementazione. Ad esempio, è possibile apportare modifiche ai requisiti di memoria e CPU delle attività, configurazione di rete, bilanciamento del carico e dimensionamento. La schermata seguente mostra alcune delle opzioni disponibili per la ricetta selezionata. Le categorie a sinistra (Calcolo, Autorizzazioni, VPC, eccetera) illustrano la gamma di opzioni che si possono specificare per l'implementazione.
I container Windows su Fargate possono eseguire sia applicazioni .NET Framework sia applicazioni .NET. Fargate attualmente supporta due versioni di Windows Server per le applicazioni: Windows Server 2019 Full e Windows Server 2019 Core. A prescindere dalla versione che utilizzi, sarà AWS a gestire le licenze del sistema operativo Windows per tuo conto.
Una volta impostate le opzioni richieste, seleziona il pulsante Pubblica per avviare l'implementazione.
Per l'applicazione Web ASP.NET Core di esempio mostrata sopra, Pubblica su AWS attraverserà diverse fasi che è possibile seguire nell'output del log di implementazione:
- L'immagine di container viene creata utilizzando un Dockerfile esistente o un Dockerfile generato in automatico.
- Viene eseguita l'autenticazione in base al tuo registro privato Amazon ECR e l'immagine viene inviata a un repository. Per impostazione predefinita, viene utilizzato un repository con lo stesso nome dell'implementazione dell'applicazione, ma è possibile selezionare un altro repository prima di iniziare la pubblicazione, modificando le impostazioni di implementazione (il nome del repository è riportato nelle impostazioni nella categoria Build del progetto).
- Viene generato un progetto CDK temporaneo che definisce le risorse necessarie per supportare l'implementazione, ad esempio la definizione delle attività, le impostazioni del cluster, la configurazione di rete e altre impostazioni.
- Infine, il progetto CDK viene utilizzato per implementare uno stack AWS CloudFormation per avviare e configurare le risorse e l'applicazione implementata su tali risorse.
Al termine dell'implementazione, nella finestra vengono visualizzate informazioni di riepilogo sullo stack CloudFormation, complete dell'URL relativo all'applicazione implementata (se è stata implementata come servizio). Facendo clic sull'URL viene avviato un browser che indirizza all'applicazione implementata.
Implementazione da pipeline CI/CD
Pubblica su AWS in Visual Studio è un'opzione progettata per gli sviluppatori che eseguono iterazioni di un'applicazione senza dover uscire dall'IDE. Per l'automazione CI/CD o per l'uso da parte di sviluppatori che non lavorano su un sistema Windows, AWS fornisce una versione a riga di comando che estende la CLI dotnet. Questo strumento è disponibile su NuGet, nel pacchetto AWS.Deploy.Tools.
Per installarlo, apri uno shell (interprete di comandi) a riga di comando ed esegui il comando:
dotnet tool install -g aws.deploy.tools
Una volta installato, visualizza le opzioni dei comandi di primo livello eseguendo:
dotnet aws
Per avviare un'implementazione dalla cartella che contiene il progetto dell'applicazione, esegui:
dotnet aws deploy
Una guida aggiuntiva sullo strumento e su tutti i suoi comandi è disponibile utilizzando l'opzione --help.
Maggiori dettagli sull'implementazione di applicazioni containerizzate in AWS con l'estensione CLI dotnet AWS.Deploy.Tools, incluso il suo uso nell'automazione CI/CD, saranno discussi più avanti nel presente modulo, nella sezione intitolata Implementazione di container .NET su AWS dalla riga di comando.
Eliminazione delle implementazioni di container effettuate con Pubblica su AWS
Le implementazioni di applicazioni realizzate utilizzando Pubblica su AWS sono semplicemente stack AWS CloudFormation. Puoi eliminare un'implementazione in uno dei modi seguenti:
- Accedendo alla dashboard di CloudFormation nella Console di gestione AWS ed eliminando lo stack associato.
- In Visual Studio, espandi la voce AWS CloudFormation nell'Esploratore AWS, seleziona lo stack e scegli Elimina dal menu contestuale dello stack.
- Da uno shell (interprete di comandi) a riga di comando, utilizzando il pacchetto AWS.Tools.Deploy installato, esegui il comando dotnet aws delete-deployment.
Sempre da uno shell (interprete di comandi) a riga di comando, puoi utilizzare il comando Remove-CFNStack di Strumenti AWS per PowerShell o il comando aws cloudformation delete-stack di AWS CLI per eliminare gli stack che rappresentano un'applicazione basata su container implementata.
Riepilogo
Pubblica su AWS offre un meccanismo facile da utilizzare ed estensibile per implementare applicazioni .NET adatte all'esecuzione in un container su AWS, senza bisogno di una conoscenza approfondita di AWS o persino di sviluppo cloud. Le ricette integrate e personalizzabili consentono agli sviluppatori di implementare e reimplementare comodamente le applicazioni durante lo sviluppo dall'interno di Visual Studio su Amazon ECS con AWS Fargate e altri servizi basati su container. Pubblica su AWS è la scelta consigliata per implementare le applicazioni Web e API Web ASP.NET Core, tra cui Blazor lato server, in container su AWS.
Pubblica container su AWS
Pubblica container su AWS è l'approccio originale basato su procedure guidate per l'implementazione di applicazioni .NET containerizzate in AWS dall'interno di Visual Studio. Ora considerata un approccio legacy, la procedura guidata è ancora supportata in Visual Studio al momento della stesura di questo documento, ma potrebbe essere rimossa in una versione futura.
Rispetto a Pubblica su AWS, Pubblica container su AWS presenta le seguenti funzionalità e limitazioni:
- Supporta solo l'implementazione su Amazon ECS (con o senza AWS Fargate). Pubblica su AWS supporta anche AWS App Runner e servizi di macchine virtuali come AWS Elastic Beanstalk
- Supporta l'implementazione delle applicazioni Web e API Web ASP.NET Core e delle applicazioni di console nei container. Questa funzionalità è simile a quella offerta da Pubblica su AWS.
- Richiede che nell'applicazione esista già un Dockerfile. A differenza di Pubblica su AWS, il Dockerfile non viene generato in automatico. Se il progetto dell'applicazione non contiene un Dockerfile, l'opzione Pubblica container su ECS non viene mostrata nel menu contestuale del progetto.
- Non presenta dipendenze da AWS Cloud Development Kit e Node.js.
- L'implementazione non può essere modificata oltre alle impostazioni disponibili nella procedura guidata. I progetti di implementazione personalizzati come quelli offerti da Pubblica su AWS non sono disponibili.
- Può essere utilizzata con un'estensione dello strumento CLI dotnet, Amazon.ECS.Tools, disponibile su NuGet. Mediante un semplice file di configurazione in formato JSON, aws-ecs-tools-defaults.json, è possibile condividere le impostazioni di configurazione scelte nella procedura guidata con un'esperienza a riga di comando, avviata eseguendo dotnet ecs in uno shell (interprete di comandi) a riga di comando. L'opzione a riga di comando è adatta agli sviluppatori che non sono in grado di utilizzare Visual Studio o il toolkit AWS o per le implementazioni automatiche in un sistema CI/CD.
Nota: la procedura guidata contiene un banner che consiglia di passare alla nuova esperienza Pubblica su AWS. In futuro, la procedura guidata legacy verrà rimossa dal toolkit.
La procedura guidata precompilerà i campi Credenziali e Regione AWS in base alle selezioni correnti nella finestra dell'Esploratore AWS. Per impostazione predefinita, la configurazione Rilascio di un progetto viene implementata in un repository con nome basato sul progetto, che verrà creato quando richiesto.
Il menu a discesa Destinazione di implementazione in fondo alla pagina contiene quattro opzioni possibili:
- Servizio su un cluster ECS è adatta per applicazioni che devono essere eseguite 24 ore su 24, 7 giorni su 7, ad esempio un'applicazione Web o possibilmente un'API Web.
- Esegui attività su un cluster ECS è adatta per codice di applicazione che viene eseguito una volta e poi termina, ad esempio un'applicazione basata su console. Una volta terminata, l'attività può essere rieseguita manualmente in base alle esigenze.
- Attività pianificata su un cluster ECS è adatta alle attività che vengono eseguite periodicamente prima di terminare. Alcuni esempi sono processi in batch o processi ETL notturni.
- Invia solo l'immagine Docker ad Amazon Elastic Container Registry crea l'immagine di container per l'applicazione, esegue l'autenticazione in base al registro privato e la invia a un repository nel registro privato. I repository nel registro pubblico non sono supportati.
Dopo aver scelto la destinazione appropriata, il pulsante Avanti permette di passare a una pagina in cui è definita la configurazione di avvio. I dati selezionati qui e nelle pagine successive vengono inseriti in automatico in una definizione di attività per tuo conto.
La scelta di Crea un cluster vuoto per il campo Cluster ECS blocca la procedura guidata su un'implementazione con AWS Fargate. Per eseguire l'implementazione su Amazon ECS senza AWS Fargate, devi prima creare le risorse del cluster necessarie utilizzando altri strumenti come la Console di gestione AWS e quindi selezionare il cluster esistente nella procedura guidata.
Se all'inizio della procedura guidata è stato selezionato Servizio su un cluster ECS, la pagina successiva richiede il numero di attività, istanze di container, da eseguire (il valore predefinito è 1) e la percentuale minima e massima di attività che il servizio deve mantenere. Per utilizzare un servizio esistente, seleziona il nome corrispondente qui o imposta il nome di un nuovo servizio da creare. Se è stata selezionata l'opzione Attività su un cluster ECS, ti verrà chiesto di impostare il numero di attività e assegnare un nome al gruppo di attività. Quando si implementa un'applicazione Web, la schermata seguente mostra l'opzione Servizio su un cluster ECS.
Se la destinazione di implementazione è un servizio, la pagina successiva della procedura guidata consente di configurare un sistema di bilanciamento del carico dell'applicazione, completo della pagina di controllo dell'integrità. Per impostazione predefinita, non è configurato alcun sistema di bilanciamento del carico. Per le destinazioni di implementazione basate su attività, la pagina del sistema di bilanciamento del carico non viene mostrata perché i container che costituiscono l'attività vengono eseguiti una sola volta e poi terminati.
La pagina delle impostazioni finali della procedura guidata contiene ulteriori opzioni che verranno incluse nella definizione di attività, ad esempio se utilizzare una definizione di attività esistente o crearne una nuova. Anche in questo caso, seleziona il ruolo IAM per il codice dell'applicazione (Ruolo attività) se l'applicazione effettua chiamate a servizi AWS e il ruolo di esecuzione che verrà assunto da Amazon ECS per concedere l'accesso alle immagini del registro privato e ad altre risorse necessarie per effettuare il provisioning delle risorse durante l'implementazione. Infine, specifica la porta di container che deve essere esposta ed eventuali variabili di ambiente aggiuntive.
Una volta completate tutte le impostazioni, selezionando Pubblica si avvia l'implementazione. Analogamente alla più recente funzionalità Pubblica su AWS, il toolkit presenterà una serie di fasi per completare l'implementazione. Tali fasi possono essere seguite nell'output di avanzamento della procedura guidata o nel riquadro Amazon Web Services della finestra di output dell'IDE.
- L'applicazione verrà creata e l'immagine del container verrà generata.
- Viene eseguita l'autenticazione in base al tuo registro privato Amazon ECR e l'immagine viene inviata a un repository. Il nome del repository da utilizzare è stato specificato nella prima pagina della procedura guidata, impostato come predefinito sul nome del progetto.
- Vengono forniti e configurati i cluster e le altre risorse adeguate alle impostazioni scelte nella procedura guidata.
Una volta completato il provisioning delle risorse per il cluster, il toolkit apre una vista Cluster. Qui puoi monitorare l'avanzamento delle attività che cominciano a essere eseguite per soddisfare il numero specificato nella procedura guidata e, per quanto riguarda i servizi, puoi trovare l'URL per accedere all'applicazione implementata se durante la procedura guidata hai selezionato un sistema di bilanciamento del carico.
Implementazione su container da pipeline CI/CD
La procedura guidata di Pubblica container su AWS in Visual Studio è progettata per gli sviluppatori che eseguono iterazioni su un'applicazione all'interno del proprio IDE. Per l'automazione CI/CD o per l'uso da parte di sviluppatori che non lavorano su un sistema Windows, AWS fornisce un pacchetto di strumenti NuGet, Amazon.ECS.Tools, che estende la CLI dotnet. Per installare questo strumento, apri uno shell (interprete di comandi) a riga di comando ed esegui il comando:
dotnet tool install -g Amazon.ECS.Tools.
Per cominciare l'uso dopo l'installazione e visualizzare le opzioni dei comandi di primo livello, esegui il comando:
dotnet ecs
Per avviare un'implementazione, dall'interno della cartella del progetto della tua applicazione esegui:
dotnet ecs deploy
Una guida aggiuntiva sullo strumento e su tutti i suoi comandi è disponibile utilizzando l'opzione --help.
Per le applicazioni precedentemente implementate utilizzando la procedura guidata in Visual Studio, le impostazioni selezionate nella procedura guidata sono disponibili per impostazione predefinita in un file di testo in formato JSON, aws-ecs-tols-defaults.json. Questo file si trova nella directory del progetto dell'applicazione. Tali impostazioni verranno lette dallo strumento a riga di comando e, se necessario, possono essere sovrascritte.
Maggiori informazioni sull'implementazione di applicazioni containerizzate in AWS con l'estensione CLI dotnet Amazon.ECS.Tools, incluso il suo uso nell'automazione CI/CD, saranno discussi più avanti nel presente modulo, nella sezione intitolata Implementazione di container .NET su AWS dalla riga di comando.
Eliminazione delle implementazioni effettuate con Pubblica container su AWS
Per eliminare le implementazioni effettuate utilizzando la procedura guidata di Pubblica container su AWS, utilizza uno dei seguenti metodi:
- Nella Console di gestione AWS, accedi alla dashboard ECS, seleziona il cluster nell'elenco visualizzato e scegli Elimina cluster nella vista dei dettagli del cluster.
- In Visual Studio, apri la vista del cluster relativa all'applicazione implementata, scegli Modifica e imposta il conteggio delle Attività desiderate su 0. Quando nessuna attività è più in esecuzione, seleziona Elimina nella vista Cluster o dal menu contestuale alla voce Cluster nella vista dell'Esploratore AWS per eliminare il cluster.
- Una volta eliminato il cluster, potresti voler eliminare anche il repository contenente l'una o più immagini utilizzate durante l'implementazione.
Una volta eliminato il cluster, potresti voler eliminare anche il repository contenente l'una o più immagini utilizzate durante l'implementazione.
Nota: l'estensione per riga di comando Amazon.ECS.Tools non supporta l'eliminazione delle implementazioni.
Riepilogo
Pubblica container su AWS offre un approccio basato su procedure guidate per l'implementazione di applicazioni su Amazon ECS (con o senza AWS Fargate) e Amazon ECR. A differenza di Pubblica su AWS, Pubblica container su ECS supporta solo Amazon ECS, AWS Fargate e Amazon ECR come destinazioni di implementazione. Inoltre, le opzioni di implementazione sono limitate a quelle fornite nella procedura guidata o nell'equivalente a riga di comando e non possono essere personalizzate. Pubblica su AWS è lo strumento sostitutivo preferito per l'implementazione in AWS di applicazioni .NET. Tuttavia, per i team che non sono in grado di adottare la nuova esperienza, la procedura guidata e l'estensione per riga di comando precedenti sono ancora supportate e disponibili per l'uso.
Implementazione di container .NET su AWS dalla riga di comando
AWS fornisce due strumenti a riga di comando gratuiti per gestire le applicazioni .NET containerizzate. Entrambi sono implementati su NuGet ed estendono l'esperienza CLI dotnet con comandi aggiuntivi che consentono l'implementazione di applicazioni .NET su Amazon ECS, AWS Fargate e Amazon ECR. Queste estensioni CLI dotnet non supportano l'implementazione di applicazioni .NET Framework.
Nota: al momento della stesura di questo documento, sebbene possano essere utilizzati sia dalla riga di comando che da Visual Studio, i progetti di implementazione personalizzati possono essere creati solo utilizzando lo strumento a riga di comando.
AWS.Deploy.Tools
Il pacchetto AWS.Deploy.Tools su NuGet è l'equivalente a riga di comando di Pubblica su AWS in Visual Studio su Windows. La versione a riga di comando, che può essere utilizzata su piattaforme Windows, macOS e Linux, espone le stesse ricette di implementazione disponibili in Visual Studio. Ciò include la possibilità di selezionare progetti di implementazione personalizzati definiti per un'applicazione. Il pacchetto è gestito come progetto open source su GitHub.
Nota: al momento della stesura di questo documento, sebbene possano essere utilizzati sia dalla riga di comando che da Visual Studio, i progetti di implementazione personalizzati possono essere creati solo utilizzando lo strumento a riga di comando.
Per installare il pacchetto, apri uno shell (interprete di comandi) a riga di comando ed esegui il comando:
dotnet tool install -g aws.deploy.tools
Vengono distribuite periodicamente nuove versioni, per aggiornarle esegui il comando:
dotnet tool update -g aws.deploy.tools
Come Pubblica su AWS in Visual Studio, il pacchetto AWS.Deploy.Tools presenta una dipendenza da Node.js e dall'AWS Cloud Development Kit, quindi assicurati di installare anche questi strumenti.
Dopo l'installazione, per verificare che l'installazione sia riuscita e visualizzare le opzioni di comando di primo livello disponibili, esegui:
dotnet aws
Per iniziare un'implementazione a livello della riga di comando, dalla cartella contenente il file di progetto dell'applicazione (file.csproj), esegui il comando:
dotnet aws deploy
L'applicazione viene analizzata e viene visualizzata una serie di ricette di implementazione numerate da cui scegliere. Nella schermata seguente, lo strumento ha completato l'analisi di un'applicazione che attualmente non dispone di un Dockerfile e consiglia l'implementazione su macchine virtuali in AWS Elastic Beanstalk. Tuttavia, questo scenario può essere modificato inserendo il numero di ricetta desiderato, in questo caso 3, da implementare come container utilizzando AWS Fargate. Un Dockerfile verrà creato durante l'implementazione e aggiunto al progetto.
Una volta selezionata la ricetta, una serie di richieste raccoglie le informazioni necessarie, come il nome dell'implementazione (che per impostazione predefinita è il nome del progetto ma può essere modificato). Altre impostazioni opzionali sono regolabili attraverso menu secondari numerati.
Nella schermata qui sopra, premendo "4" si abilita la selezione di un ruolo IAM personalizzato che l'applicazione assumerà durante l'esecuzione, anziché la creazione di un nuovo ruolo vuoto da parte dell'implementazione. Immettendo "altro", sono disponibili ulteriori opzioni avanzate da configurare per l'implementazione.
Quando le impostazioni sono adeguate, puoi avviare l'implementazione premendo il tasto Invio. Per gli scenari in cui l'applicazione non necessita di specificare un ruolo personalizzato e i valori predefiniti proposti sono accettabili, è sufficiente premere il tasto Invio due volte, una per confermare il nome predefinito dell'implementazione e un'altra per iniziare l'implementazione dell'applicazione.
Analogamente all'implementazione da Visual Studio, se è stata selezionata una ricetta per un container, all'occorrenza viene generato un Dockerfile, l'immagine viene creata e inviata ad Amazon ECR (lo strumento esegue l'autenticazione per tuo conto) e viene creato un progetto CDK per effettuare il provisioning dell'infrastruttura, che viene poi implementata su AWS CloudFormation. Gli eventi e le altre informazioni sullo stato dell'implementazione vengono inviate in copia al terminale. Infine, viene emesso l'URL dell'endpoint dell'applicazione insieme ad altre informazioni di riepilogo come i nomi di cluster e servizi.
La reimplementazione delle applicazioni è supportata anche a livello della riga di comando. Quando viene eseguito nella cartella di un progetto che è stato implementato in precedenza, il comando dotnet aws deploy elencherà prima le implementazioni esistenti per la selezione e poi l'opzione per selezionare una ricetta per una nuova implementazione.
Implementazione di container da pipeline CI/CD
AWS.Deploy.Tools può essere utilizzato dall'interno di pipeline di integrazione e distribuzione continua. Tuttavia, in questi scenari le richieste possono essere problematiche. Per disabilitare le richieste, aggiungi al comando l'opzione --silent.
Una volta disattivate le richieste, lo strumento non è in grado di raccogliere le impostazioni di implementazione durante l'esecuzione. Per fornire tutte le impostazioni richieste e facoltative, specificale in un file di testo in formato JSON e fornisci il nome del file, facoltativamente con percorso, al comando di implementazione con l'opzione --apply:
dotnet aws deploy --apply settings.json –-silent
La creazione di un file di impostazioni non rientra nell'ambito di questo corso. Un collegamento alla definizione del file nel repository GitHub dello strumento è disponibile nella sezione intitolata Creazione di un file di impostazioni di implementazione nel repository GitHub di AWS.NET.
Creazione di progetti di implementazione personalizzati
Sebbene non sia l'argomento di questo corso e non venga discusso in maggiore dettaglio, tieni presente che puoi creare progetti di implementazione personalizzati per le applicazioni .NET containerizzate. La creazione di un progetto di implementazione personalizzato consente di aggiungere un'ulteriore infrastruttura o altre risorse per supportare l'applicazione implementata e personalizzare l'ambiente di runtime. È possibile verificare i progetti di implementazione personalizzati nel controllo del codice sorgente, insieme all'applicazione, e condividerli con il team di sviluppo, così da assicurare che tutti eseguano l'implementazione con le medesime impostazioni e personalizzazioni, a prescindere dal fatto che vengano implementati da Visual Studio o dalla riga di comando.
Consulta https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/ per avere ulteriori informazioni sull'uso dei progetti di implementazione personalizzati con Pubblica su AWS in Visual Studio o AWS.Deploy.Tools nella riga di comando.
Eliminazione delle implementazioni di container effettuate con AWS.Deploy.Tools
Le implementazioni di applicazioni eseguite con AWS.Deploy.Tools e Pubblica su AWS in Visual Studio possono essere facilmente eliminate quando si lavora a livello della riga di comando eseguendo il comando:
dotnet aws delete-deployment deployment-name
Sostituisci deployment-name con il nome dello stack AWS CloudFormation creato per l'implementazione.
Amazon.ECS.Tools
Il pacchetto Amazon. ECS.Tools su NuGet è l'equivalente a riga di comando di Pubblica container su AWS in Visual Studio. Il pacchetto può essere utilizzato su piattaforme Windows, macOS e Linux ed è gestito come progetto open source su GitHub. Tale repository include altre due estensioni CLI dotnet utilizzate per l'implementazione su AWS Lambda e AWS Elastic Beanstalk.
Per visualizzare le opzioni dei comandi di primo livello, esegui il comando:
dotnet ecs
Tutti i comandi offrono un aiuto aggiuntivo, accessibile fornendo l'opzione --help.
Per iniziare un'implementazione, decidi innanzitutto se eseguirla su un servizio (viene eseguita continuamente), un'attività (viene eseguita una volta e termina) o un'attività pianificata (viene eseguita periodicamente, terminando dopo ogni esecuzione). In alternativa, l'immagine può essere creata e inviata a un repository nel tuo registro privato Amazon ECR. Per il sito Web di esempio utilizzato in questo corso, la scelta appropriata è un servizio in esecuzione continua. Se specifichi il comando deploy-service con l'opzione --help, vengono elencate tutte le impostazioni che puoi applicare.
Una volta inviata l'immagine, ti viene richiesto di fornire il tipo di avvio, cioè EC2 o FARGATE. Per i tipi di avvio EC2, devi aver già creato l'infrastruttura cluster necessaria. Il tipo di avvio FARGATE non richiede alcun provisioning anticipato, ma richiede di specificare la CPU e la memoria per l'attività. Consulta https://docs.thinkwithwp.com/AmazonECS/latest/userguide/task_definition_parameters.html per conoscere le ultime combinazioni valide di valori, che differiscono leggermente tra i tipi di container Linux e Windows.
Nella schermata seguente, è stato selezionato FARGATE come tipo di lancio, con 512 MiB di memoria e CPU da 256 (.25 vCPU) corrispondente. Prima di completare 'implementazione, lo strumento ha inoltre richiesto i valori relativi ai nomi di cluster e servizio. Una volta inseriti e convalidati questi valori, viene richiesta l'implementazione e il comando termina.
Nota: a differenza di Pubblica su AWS e AWS.Deploy.Tools, descritti in precedenza in questo modulo, i comandi Amazon.ECS.Tools non attendono il completamento dell'implementazione. Per ottenere dati come l'URL dell'applicazione implementata, dovrai visitare la console di gestione o utilizzare la vista Cluster in Visual Studio.
Il file delle impostazioni scritto da questa implementazione è mostrato nella schermata seguente. È sostanzialmente simile a quello che verrebbe scritto per un'implementazione avviata da Visual Studio (la versione IDE scrive leggermente più impostazioni). Questo file può essere archiviato in un repository di codice sorgente, insieme al codice dell'applicazione, e utilizzato sia con Visual Studio su Windows che con le implementazioni a riga di comando su Windows, macOS e Linux. Un file di impostazioni molto più esteso può essere curato manualmente per fornire valori per tutte le opzioni della riga di comando. Per comodità, i nomi delle opzioni corrispondono ai tasti nel file delle impostazioni.
Implementazione di container da pipeline CI/CD
Amazon.ECS.Tools può essere utilizzato dall'interno di pipeline di integrazione e distribuzione continua. Tuttavia, in questi scenari le richieste possono essere problematiche. Per disabilitare le richieste, aggiungi al comando l'opzione --disable-interactive.
Una volta disattivate le richieste, lo strumento non è in grado di raccogliere le impostazioni di implementazione durante l'esecuzione. Per fornire tutte le impostazioni richieste e opzionali, specificale in un file di impostazioni nel formato JSON e fornisci il nome del file, facoltativamente con percorso, al comando di implementazione con l'opzione --config-file
Eliminazione delle implementazioni di container effettuate con Amazon.ECS.Tools
Amazon.ECS.Tools non supporta l'eliminazione delle applicazioni container implementate dalla riga di comando. Per eliminare un'implementazione, utilizza una delle seguenti opzioni.
- Nella Console di gestione AWS, accedi alla dashboard ECS, seleziona il cluster nell'elenco visualizzato e scegli Elimina cluster nella vista dei dettagli del cluster.
- In Visual Studio, apri la vista del cluster relativa all'applicazione implementata, scegli Modifica e imposta il conteggio delle Attività desiderate su 0. Quando nessuna attività è più in esecuzione, seleziona Elimina nella vista Cluster o dal menu contestuale alla voce Cluster nella vista dell'Esploratore AWS per eliminare il cluster.
Una volta eliminato il cluster, potresti voler eliminare anche il repository contenente l'una o più immagini utilizzate durante l'implementazione
Implementazione di container.NET su AWS da Azure DevOps
Per implementare applicazioni .NET su Amazon ECS e AWS Fargate dalle pipeline Azure DevOps, è possibile utilizzare le estensioni CLI dotnet AWS.Deploy.Toolso Amazon.ECS.Tools, descritte in precedenza in questo modulo. In entrambi i casi, installa lo strumento come mostrato durante la pipeline e quindi esegui i comandi di implementazione appropriati in un'attività di shell (interprete di comandi), utilizzando i file di configurazione delle impostazioni per fornire le impostazioni necessarie e opzionali, insieme alle opzioni --silent (AWS.Deploy.Tools) o -disable-interactive- (Amazon.ECS.Tools) per eliminare le richieste.
In alternativa, per gli scenari in cui la build deve semplicemente inviare o estrarre immagini rispetto a un repository nel tuo registro privato Amazon ECR, l'estensione Strumenti AWS per Azure DevOps contiene due attività che potrebbero risultare pratiche.
Gli strumenti possono essere installati dal marketplace Azure DevOps. Una volta installate e configurate con le credenziali del servizio, aggiungi le attività di Invio Amazon ECR o Estrazione Amazon ECR alla pipeline della build. Di seguito è riportata una schermata delle impostazioni disponibili nel comando di invio.
Le attività rendono semplice e pratica la configurazione di un'operazione di invio o estrazione per un'immagine creata in precedenza nella pipeline, gestendo al posto tuo il processo di autorizzazione richiesto dal repository. Gli strumenti sono gestiti come progetto open source su GitHub e nella guida per l'utente sono disponibili ulteriori informazioni sulla configurazione post-installazione e sulle singole attività all'interno degli strumenti.
Verifica delle conoscenze
Hai completato il Modulo 2: Strumenti di sviluppo di container .NET su AWS. Il seguente test ti consentirà di verificare ciò che hai imparato finora.
1. Lo strumento Pubblica su AWS su quali servizi esegue la pubblicazione? (selezionane due)
a. Lambda
b. ECS
c. EC2
d. ECR
2. Quali sono i due prerequisiti necessari per utilizzare lo strumento Pubblica su AWS?
a. C# e Node.js
b. CDK e Node.js
c. Python e CDK
d. Python e Node.js
3. Su quali sistemi operativi può essere utilizzato il pacchetto AWS.Deploy.Tools?
a. Windows
b. macOS
c. Linux
d. Tutte le opzioni precedenti
Risposte: 1-b e d, 2-b, 3-d