Questo tutorial descrive come eseguire il deployment di un'applicazione web .NET su Compute Engine.
Questo tutorial è rivolto a sviluppatori e DevOps engineer che hanno una conoscenza di base di Microsoft .NET e Compute Engine.
Obiettivi
Esegui il deployment di un'applicazione web ASP.NET Core che utilizza .NET 6 ed è in esecuzione su Linux in una singola istanza Compute Engine.
Questo tutorial mostra come completare le seguenti attività per raggiungere il tuo obiettivo:
- Esegui il deployment di una VM di Compute Engine
- Configura il bilanciamento del carico
- Esegui il deployment dell'applicazione ASP.NET
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
Esegui il deployment di una VM di Compute Engine
Questa sezione mostra come creare una VM Linux o una VM Windows Server che esegue server web Microsoft Internet Information Services (IIS) su Compute Engine.
Imposta i valori predefiniti per l'ID progetto e la zona di Compute Engine. In questo modo risparmierai tempo.
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
Sostituisci quanto segue:
PROJECT_IDcon l'ID del tuo Google Cloud progetto.ZONEcon il nome della zona che utilizzerai per creare le risorse. Se non sai quale zona scegliere, utilizza quella geograficamente più vicina a te.
Ad esempio:
gcloud config set project test-project-12345 gcloud config set compute/zone us-central1-a
Crea un'istanza VM:
Per creare una VM Linux:
Crea uno script di avvio per l'istanza VM. Lo script viene eseguito durante l'inizializzazione della VM e installa il runtime .NET:
"if ! dpkg-query -W aspnetcore-runtime-6.0 then curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0 fi " | Out-File -Encoding ASCII startup.shCrea l'istanza VM e utilizza
startup.shcome script di avvio:gcloud compute instances create clouddemo-1 ` --image-family debian-11 ` --image-project debian-cloud ` --machine-type n1-standard-2 ` --boot-disk-type pd-ssd ` --tags loadbalancer-backend ` --metadata-from-file startup-script=startup.sh
Monitora il processo di inizializzazione della VM visualizzando l'output della porta seriale:
gcloud compute instances tail-serial-port-output clouddemo-1
Attendi circa 5 minuti finché non viene visualizzato l'output
Instance setup finishedoStartup finished, quindi premi Ctrl+C. A questo punto, l'installazione dei prerequisiti è completa e l'istanza VM è pronta per essere utilizzata.
Configura il bilanciamento del carico
Per rendere disponibile la tua app ASP.NET su internet, devi utilizzare un bilanciatore del carico HTTPS. Per associare l'istanza VM al bilanciatore del carico, crea un gruppo di istanze e assegna questo gruppo di istanze al bilanciatore del carico:
Crea un gruppo di istanze non gestito e aggiungi l'istanza VM:
gcloud compute instance-groups unmanaged create clouddemo-1 gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
Crea un controllo di integrità che verifichi se il server web è in esecuzione:
gcloud compute http-health-checks create clouddemo-health ` --check-interval 5s ` --unhealthy-threshold 2 ` --request-path / ` --port 5000 gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:5000Crea un servizio di backend del bilanciatore del carico che utilizzi il controllo di integrità HTTP e il gruppo di istanze che hai creato in precedenza:
gcloud compute backend-services create clouddemo-backend ` --http-health-checks clouddemo-health ` --port-name http ` --protocol HTTP ` --global gcloud compute backend-services add-backend clouddemo-backend ` --instance-group clouddemo-1 ` --global ` --instance-group-zone $(gcloud config get-value compute/zone)
Crea un frontend per il bilanciatore del carico:
gcloud compute url-maps create clouddemo-map --default-service clouddemo-backend gcloud compute target-http-proxies create clouddemo-proxy --url-map clouddemo-map gcloud compute forwarding-rules create clouddemo-frontend --global --target-http-proxy clouddemo-proxy --ports 80
Crea una regola firewall che consenta al bilanciatore del carico di inviare richieste HTTP alle istanze annotate con il
loadbalancer-backendtag.gcloud compute firewall-rules create loadbalancer-backend ` --source-ranges "130.211.0.0/22,35.191.0.0/16" ` --target-tags loadbalancer-backend ` --allow tcp:80,tcp:5000
Cerca l'indirizzo IP del bilanciatore del carico:
gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
Prendi nota dell'indirizzo IP. ti servirà in un secondo momento.
Esegui il deployment dell'applicazione ASP.NET
Apri una console PowerShell.
Scarica e decomprimi o clona il repository di esempio da GitHub:
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
Crea il pacchetto di deployment:
Passa alla directory che contiene l'applicazione di esempio:
cd dotnet-docs-samples\applications\clouddemo\netcore
Crea la soluzione:
dotnet publish -c Release
Copia il pacchetto di deployment nella VM:
Copia i contenuti della cartella
publishnella tua home directory sulla VM:gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
Sulla VM, crea una cartella
/var/www/clouddemoe copia i file dell'applicazione in questa cartella:sudo mkdir -p /var/www/clouddemo sudo chown -R www-data:www-data /var/www/clouddemo sudo cp -r publish/* /var/www/clouddemo
Registra l'applicazione come unità systemd:
cat <<EOF > kestrel-clouddemo.service [Unit] Description=Cloud Demo ASP.NET app [Service] WorkingDirectory=/var/www/clouddemo ExecStart=/usr/bin/dotnet /var/www/clouddemo/CloudDemo.MvcCore.dll Restart=always Environment=ASPNETCORE_ENVIRONMENT=Production Environment=ASPNETCORE_URLS=http://0.0.0.0:5000 [Install] WantedBy=multi-user.target EOF sudo mv kestrel-clouddemo.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl start kestrel-clouddemo
Sul computer locale, apri un browser web e vai al seguente indirizzo:
http://
LOADBALANCER_IP/Sostituisci
LOADBALANCER_IPcon l'indirizzo IP ottenuto dopo il deployment del bilanciatore del carico.Ora vedi l'applicazione demo e il titolo Questa app è in esecuzione su Compute Engine.
Libera spazio
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che non utilizzino più la quota generando addebiti. Le sezioni seguenti descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto creato per il tutorial.
Elimina un Google Cloud progetto:
gcloud projects delete PROJECT_ID
Elimina singole risorse
Dovrai eliminare singolarmente tutte le risorse create per il progetto (ad esempio: gruppi di istanze, controlli di integrità, servizi di backend, proxy HTTP e regole di forwarding). Non puoi eliminare le istanze VM finché non elimini tutte queste risorse.
Passaggi successivi
- Scopri di più sulla creazione e sull'esecuzione di macchine virtuali sull'infrastruttura di Google.
- Consulta le best practice nel Google Cloud Well-Architected Framework.
- Esplora architetture, diagrammi e best practice di riferimento su Google Cloud. Consulta il nostro Cloud Architecture Center.