Men-deploy aplikasi ASP.NET ke Compute Engine

Tutorial ini menjelaskan cara men-deploy aplikasi web .NET ke Compute Engine.

Tutorial ini ditujukan untuk developer dan engineer DevOps yang memiliki pengetahuan dasar tentang Microsoft .NET dan Compute Engine.

Tujuan

Deploy aplikasi web ASP.NET Core yang menggunakan .NET 6 dan berjalan di Linux ke satu instance Compute Engine.

Tutorial ini menunjukkan cara menyelesaikan tugas berikut untuk mencapai tujuan Anda:

  • Men-deploy VM Compute Engine
  • Menyiapkan load balancing
  • Men-deploy aplikasi ASP.NET

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, baca bagian Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

Men-deploy VM Compute Engine

Bagian ini menunjukkan cara membuat VM Linux, atau VM Windows Server yang menjalankan server web Microsoft Internet Information Services (IIS) di Compute Engine.

  1. Tetapkan nilai default untuk project ID dan zona Compute Engine Anda. Cara ini akan menghemat waktu Anda.

    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE
    

    Ganti kode berikut:

    • PROJECT_ID dengan ID project Google Cloud Anda.
    • ZONE dengan nama zona yang akan Anda gunakan untuk membuat resource. Jika Anda tidak yakin zona mana yang harus dipilih, gunakan zona yang secara geografis paling dekat dengan Anda.

    Contoh:

    gcloud config set project test-project-12345
    gcloud config set compute/zone us-central1-a
    
  2. Buat instance VM:

    Untuk membuat VM Linux, lakukan langkah-langkah berikut:

    1. Buat skrip startup untuk instance VM. Skrip ini berjalan selama inisialisasi VM dan menginstal 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.sh
      
    2. Buat instance VM dan gunakan startup.sh sebagai skrip startup:

      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
      
  3. Pantau proses inisialisasi VM dengan melihat output port serialnya:

    gcloud compute instances tail-serial-port-output clouddemo-1
    

    Tunggu sekitar 5 menit hingga Anda melihat output Instance setup finished atau Startup finished, lalu tekan Ctrl+C. Pada tahap ini, penginstalan prasyarat telah selesai dan instance VM siap digunakan.

Menyiapkan load balancing

Untuk membuat aplikasi ASP.NET Anda tersedia di internet, Anda harus menggunakan load balancer HTTPS. Untuk mengaitkan instance VM dengan load balancer, buat grup instance dan tetapkan grup instance ini ke load balancer:

  1. Buat grup instance tidak terkelola dan tambahkan instance VM:

    gcloud compute instance-groups unmanaged create clouddemo-1
    gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
    
  2. Buat health check yang memeriksa apakah server web berjalan:

    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:5000
    
  3. Buat layanan backend load balancer yang menggunakan health check HTTP dan grup instance yang Anda buat sebelumnya:

    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)
    
  4. Buat front-end untuk load balancer:

    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
    
  5. Buat aturan firewall yang mengizinkan load balancer mengirim permintaan HTTP ke instance yang telah diberi anotasi dengan tag loadbalancer-backend.

    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
    
  6. Cari alamat IP load balancer:

    gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
    

    Catat alamat IP-nya. Anda akan membutuhkannya nanti.

Men-deploy aplikasi ASP.NET

  1. Buka konsol PowerShell.

  2. Download dan unzip atau clone repositori contoh dari github:

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    
  3. Buat paket deployment:

    1. Beralih ke direktori yang berisi aplikasi contoh:

      cd dotnet-docs-samples\applications\clouddemo\netcore
      
    2. Membangun solusi:

      dotnet publish -c Release
      
  4. Salin paket deployment ke VM:

    1. Salin konten folder publish ke direktori beranda Anda di VM:

      gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
      
    2. Hubungkan ke VM menggunakan SSH.

    3. Di VM, buat folder /var/www/clouddemo dan salin file aplikasi ke dalam folder ini:

      sudo mkdir -p /var/www/clouddemo
      sudo chown -R www-data:www-data /var/www/clouddemo
      sudo cp -r publish/* /var/www/clouddemo
      
    4. Daftarkan aplikasi sebagai 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
      
  5. Di komputer lokal Anda, buka browser web dan buka alamat berikut:

    http://LOADBALANCER_IP/
    

    Ganti LOADBALANCER_IP dengan alamat IP yang Anda dapatkan setelah men-deploy load balancer.

    Sekarang Anda akan melihat aplikasi demo dan judul Aplikasi ini berjalan di Compute Engine.

Pembersihan

Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat sehingga resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

    Menghapus Google Cloud project:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

Anda harus menghapus semua resource yang dibuat untuk project ini satu per satu (misalnya: grup instance, health check, layanan backend, proxy http, dan aturan penerusan). Anda tidak dapat menghapus instance VM sebelum menghapus semua resource ini.

Langkah berikutnya