Esegui un contenitore Docker dell'API Web ASP.NET Core su un'istanza Linux Amazon EC2 - Prontuario AWS

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

Esegui un contenitore Docker dell'API Web ASP.NET Core su un'istanza Linux Amazon EC2

Creato da Vijai Anand Ramalingam (AWS) e Sreelaxmi Pai (AWS)

Ambiente: PoC o pilota

Tecnologie: contenitori e microservizi DevelopmentAndTesting; App Web e mobili

Carico di lavoro: Microsoft

Servizi AWS: Amazon EC2; Elastic Load Balancing (ELB)

Riepilogo

Questo modello è destinato alle persone che stanno iniziando a containerizzare le proprie applicazioni sul cloud Amazon Web Services (AWS). Quando inizi a containerizzare le app sul cloud, in genere non sono configurate piattaforme di orchestrazione dei container. Questo modello ti aiuta a configurare rapidamente l'infrastruttura su AWS per testare le tue applicazioni containerizzate senza bisogno di un'elaborata infrastruttura di orchestrazione dei container.

Il primo passo nel percorso di modernizzazione consiste nel trasformare l'applicazione. Se si tratta di un'applicazione.NET Framework legacy, è necessario innanzitutto modificare il runtime in ASP.NET Core. Quindi, esegui queste operazioni:

  • Crea l'immagine del contenitore Docker

  • Esegui il contenitore Docker utilizzando l'immagine integrata

  • Convalida l'applicazione prima di distribuirla su qualsiasi piattaforma di orchestrazione dei container, come Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS). 

Questo modello copre gli aspetti di compilazione, esecuzione e convalida dello sviluppo di applicazioni moderne su un'istanza Linux Amazon Elastic Compute Cloud (Amazon EC2).

Prerequisiti e limitazioni

Prerequisiti

Versioni del prodotto

  • Visual Studio Community 2022 o versioni successive

Architettura

Architettura Target

Questo modello utilizza un CloudFormation modello AWS per creare l'architettura ad alta disponibilità mostrata nel diagramma seguente. Un'istanza Amazon EC2 Linux viene lanciata in una sottorete privata. AWS Systems Manager Session Manager viene utilizzato per accedere all'istanza privata di Amazon EC2 Linux e per testare l'API in esecuzione nel contenitore Docker.

Un utente che accede all'istanza Linux di Amazon EC2 e testa l'API in esecuzione nel contenitore Docker.
  1. Accesso all'istanza Linux tramite Session Manager

Strumenti

Servizi AWS

  • Interfaccia a riga di comando AWS: AWS Command Line Interface (AWS CLI) è uno strumento open source per interagire con i servizi AWS tramite comandi nella shell della riga di comando. Con una configurazione minima, puoi eseguire comandi AWS CLI che implementano funzionalità equivalenti a quelle fornite dalla Console di gestione AWS basata su browser.

  • Console di gestione AWS: la Console di gestione AWS è un'applicazione Web che comprende e fa riferimento a un'ampia raccolta di console di servizio per la gestione delle risorse AWS. Quando effettui l'accesso per la prima volta, visualizzi la home page della console. La home page fornisce l'accesso a ciascuna console di servizio e offre un unico posto per accedere alle informazioni necessarie per eseguire le attività relative ad AWS.

  • AWS Systems Manager Session Manager — Session Manager è una funzionalità di AWS Systems Manager completamente gestita. Con Session Manager, puoi gestire le tue istanze Amazon Elastic Compute Cloud (Amazon EC2). Session Manager fornisce una gestione sicura e verificabile dei nodi senza la necessità di aprire porte in entrata, gestire host bastion o gestire chiavi SSH.

Altri strumenti

  • Visual Studio 2022 — Visual Studio 2022 è un ambiente di sviluppo integrato (IDE).

  • Docker: Docker è un set di prodotti Platform as a Service (PaaS) che utilizzano la virtualizzazione a livello di sistema operativo per fornire software in contenitori.

Codice

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"] RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj" COPY . . WORKDIR "/src/DemoNetCoreWebAPI" RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]

Epiche

AttivitàDescrizioneCompetenze richieste

Crea un esempio di API Web ASP.NET Core utilizzando Visual Studio.

Per creare un esempio di API web ASP.NET Core, procedi come segue:

  1. Apri Visual Studio 2022.

  2. Scegliere Create a new project (Crea un nuovo progetto).

  3. Seleziona il modello di progetto ASP.NET Core Web API e scegli Avanti.

  4. Per il nome del progetto, inserisci DemoNetCoreWebAPI e scegli Avanti.

  5. Scegli Crea.

  6. Per eseguire il progetto localmente, premi F5.

  7. Verifica che l'endpoint WeatherForecastAPI predefinito restituisca i risultati utilizzando Swagger.

  8. Apri il prompt dei comandi, vai alla cartella del progetto.csproj ed esegui i seguenti comandi per inviare la nuova API web al tuo repository. GitHub  

    git add --all git commit -m “Initial Version” git push
Sviluppatore di app

Crea un Dockerfile.

Per creare un Dockerfile, esegui una delle seguenti operazioni:

  • Crea il Dockerfile manualmente utilizzando il Dockerfile di esempio nella sezione Codice. In base ai requisiti, seleziona l'immagine di base.NET appropriata. Per informazioni sulle immagini relative a .NET e ASP.NET Core, consulta Docker hub

  • Crea il Dockerfile utilizzando Visual Studio e Docker Desktop. In Solution Explorer, fai clic con il pulsante destro del mouse sul progetto, scegli Aggiungi -> Docker Support. Per Target OS, seleziona Linux. Assicurati che il nuovo Dockerfile si trovi nello stesso percorso del file della soluzione (.sln). 

Per inviare le modifiche al tuo GitHub repository, esegui il comando seguente.

git add --all git commit -m “Dockerfile added” git push
Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Configura l'infrastruttura.

Avvia il CloudFormation modello AWS per creare l'infrastruttura, che include quanto segue: 

  • Un cloud privato virtuale (VPC), che utilizza AWS VPC Quick Start, con due sottoreti pubbliche e due private che si estendono su due zone di disponibilità.

  • Il ruolo IAM richiesto per abilitare AWS Systems Manager.

  • In una delle sottoreti private, un'istanza demo di Amazon Linux 2 con l'agente SSM più recente. Sebbene questa istanza non disponga di alcuna connettività diretta da Internet, è possibile accedervi in modo sicuro utilizzando AWS Systems Manager Session Manager senza richiedere un host bastion.

Per ulteriori informazioni sull'accesso a un'istanza privata di Amazon EC2 utilizzando Session Manager senza richiedere un bastion host, consulta il post sul blog Toward a bastion-less world.

Sviluppatore di app, amministratore AWS, AWS DevOps

Accedi all'istanza Amazon EC2 Linux.

Per connetterti all'istanza Amazon EC2 Linux nella sottorete privata, procedi come segue:

  1. Aprire la console Amazon EC2.       

  2. Nel riquadro di navigazione, scegliere Instances (Istanze).

  3. Seleziona l'istanza demo di Amazon Linux 2 e scegli Connect.

  4. Scegli Session Manager.

  5. Scegli Connect per aprire una nuova finestra di terminale.

  6. Esegui il comando seguente.

     sudo su
Sviluppatore di app

Installa e avvia Docker.

Per installare e avviare Docker nell'istanza Amazon EC2 Linux, procedi come segue:

  1. Per installare Docker, esegui il comando seguente.

    yum install -y docker
  2. Per avviare il servizio Docker, esegui il comando seguente.

     service docker start
  3. Per verificare l'installazione di Docker, esegui il comando seguente.

    docker info
Sviluppatore di app, amministratore AWS, AWS DevOps

Installa Git e clona il repository.

Per installare Git sull'istanza Linux di Amazon EC2 e clonare il repository GitHub, procedi come segue.

  1. Per installare Git, esegui il seguente comando.

    yum install git -y
  2. Per clonare il repository, esegui il comando seguente.

    git clone https://github.com/<username>/<repo-name>.git
  3. Per accedere al Dockerfile, esegui il comando seguente.

    cd <repo-name>/DemoNetCoreWebAPI/
Sviluppatore di app, amministratore AWS, AWS DevOps

Crea ed esegui il contenitore Docker.

Per creare l'immagine Docker ed eseguire il contenitore all'interno dell'istanza Amazon EC2 Linux, procedi come segue:

  1. Per creare l'immagine Docker, esegui il comando seguente.

    docker build -t aspnetcorewebapiimage -f Dockerfile .
  2. Per visualizzare tutte le immagini Docker, esegui il comando seguente.

    docker images
  3. Per creare ed eseguire il contenitore, esegui il comando seguente.

    docker run -d -p 80:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage
Sviluppatore di app, amministratore AWS, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Testa l'API web usando il comando curl.

Per testare l'API web, esegui il comando seguente.

curl -X GET "http://localhost/WeatherForecast" -H "accept: text/plain"

Verifica la risposta dell'API.

Nota: puoi ottenere i comandi curl per ogni endpoint da Swagger quando lo esegui localmente.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Eliminare tutte le risorse.

Elimina lo stack per rimuovere tutte le risorse. In questo modo non ti verranno addebitati costi per i servizi che non utilizzi.

Amministratore AWS, AWS DevOps

Risorse correlate