App Engine'e ASP.NET Core uygulaması dağıtma

1. Genel Bakış

ASP.NET Core, C# programlama dilini kullanarak modern bulut tabanlı ve internete bağlı uygulamalar oluşturmak için yeni bir açık kaynaklı ve platformlar arası çerçevedir.

Bu laboratuvarda, App Engine esnek ortamına basit bir ASP.NET Core uygulaması dağıtacaksınız. Bu codelab, Google Cloud Shell'de ASP.NET Core uygulaması derleme ve kullanıma sunma codelab'ine dayanmaktadır. Bu laboratuvara başlamadan önce söz konusu laboratuvarı tamamlamanız önerilir.

Google App Engine uygulamalarını oluşturmak, korumak ve trafik ile veri depolama ihtiyaçlarınız değiştikçe ölçeklendirmek kolaydır. App Engine ile yönetilecek sunucu yoktur. Uygulamanızı yüklemeniz yeterlidir.

App Engine uygulamaları, gelen trafiğe göre otomatik olarak ölçeklendirilir. App Engine; yük dengeleme, mikro hizmetler, yetkilendirme, SQL ve NoSQL veritabanları, Memcache, trafik bölme, günlük kaydı, arama, sürüm oluşturma, kullanıma sunma ve geri alma işlemleri ile güvenlik taraması gibi özellikleri yerel olarak destekler. Bu özelliklerin tümü yüksek düzeyde özelleştirilebilir.

App Engine'in ortamları olan standart ortam ve esnek ortam; C#, Java, Python, PHP, Node.js, Go gibi birçok programlama dilini destekler. İki ortam da belirli avantajlara sahip olduğundan kullanıcılar, uygulamalarının davranış şekli konusunda maksimum esnekliğe sahip olur. Daha fazla bilgi için App Engine Ortamı Seçme başlıklı makaleyi okuyun.

Neler öğreneceksiniz?

  • Basit bir ASP.NET Core uygulamasını Docker container'ı olarak paketleme
  • Basit bir ASP.NET Core uygulamasını App Engine'e dağıtma

İhtiyacınız olanlar

  • Google Cloud Platform projesi
  • Chrome veya Firefox gibi bir tarayıcı

Bu eğitimi nasıl kullanacaksınız?

Yalnızca okuyun Okuyun ve alıştırmaları tamamlayın

Google Cloud Platform deneyiminizi nasıl değerlendirirsiniz?

Başlangıç Orta İleri

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Bu nedenle, beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Cloud Shell'i etkinleştirme

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i 4292cbf4971c9786.png tıklayın.

bce75f34b2c53987.png

Cloud Shell'i daha önce hiç başlatmadıysanız ne olduğunu açıklayan bir ara ekran (ekranın alt kısmı) gösterilir. Bu durumda Devam'ı tıkladığınızda bu ekranı bir daha görmezsiniz. Bu tek seferlik ekran aşağıdaki gibi görünür:

70f315d7b402b476.png

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

fbe3a0674c982259.png

Bu sanal makine, ihtiyaç duyduğunuz tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin bulunur ve Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki çalışmalarınızın neredeyse tamamını yalnızca bir tarayıcı veya Chromebook'unuzla yapabilirsiniz.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.

  1. Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list

Komut çıkışı

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Değilse şu komutla ayarlayabilirsiniz:

gcloud config set project <PROJECT_ID>

Komut çıkışı

Updated property [core/project].

3. Cloud Shell'de ASP.NET Core uygulaması oluşturma

Cloud Shell isteminde, yüklü .NET SDK'larını listeleyerek dotnet komut satırı aracının zaten yüklü olduğunu doğrulayabilirsiniz:

dotnet --list-sdks

Ardından, hedef çerçevesi netcoreapp3.1 olan yeni bir iskelet ASP.NET Core web uygulaması oluşturun:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Bu komut bir proje oluşturur ve projenin bağımlılarını yeniler. Aşağıdakine benzer bir mesaj görürsünüz.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. ASP.NET Core uygulamasını çalıştırma

Uygulamamızı çalıştırmaya neredeyse hazırız. Uygulama klasörüne gidin.

cd HelloWorldAspNetCore

Son olarak uygulamayı çalıştırın.

dotnet run --urls=http://localhost:8080

Uygulama, 8080 numaralı bağlantı noktasında dinlemeye başlar.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

Uygulamanın çalıştığını doğrulamak için sağ üstteki web önizleme düğmesini tıklayın ve "8080 numaralı bağlantı noktasında önizle"yi seçin.

Capture.PNG

Varsayılan ASP.NET Core web sayfasını görürsünüz:

f579a9baedc108a9.png

Uygulamanın çalıştığını doğruladıktan sonra Ctrl+C tuşlarına basarak uygulamayı kapatın.

5. ASP.NET Core uygulamasını yayınlama

Şimdi, dotnet publish komutunu kullanarak bağımsız bir DLL elde etmek için uygulamayı yayınlayın.

dotnet publish -c Release

publish çalıştırıldığında, işlemin sonunda başarıyla yayınlanmış bir DLL ile ilgili bazı mesajlar gösterilir.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. App Engine esnek için app.yaml oluşturma

app.yaml dosyası, uygulamanın App Engine'e (bu örnekte App Engine esnek ortamı) nasıl dağıtılacağını açıklar.

Öncelikle publish klasörüne gidin. Bu, bin/Release klasöründe olmalıdır ancak tam yol, .NET sürümüne bağlıdır:

cd bin/Release/netcoreapp3.1/publish/

publish klasöründe bir app.yaml dosyası oluşturun:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

app.yaml dosyasının ortamı flex, çalışma zamanını ise aspnetcore olarak belirttiğine dikkat edin.

7. App Engine esnek ortamına dağıtma

Uygulamanızı gcloud kullanarak App Engine esnek ortamına dağıtmaya hazırsınız. publish dizininde aşağıdakileri çalıştırın:

gcloud app deploy --version v0

Dağıtım sırasında uygulamanız için bir bölge seçmeniz istenebilir. Uygulamanızın çalışmasını istediğiniz bir bölge seçin.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

Bu işlem, bulutta uygulamanız için bir görüntü oluşturur, bu görüntüyü Google Container Registry'ye kaydeder ve App Engine'e dağıtır. Dağıtım sırasında, container görüntüsünün oluşturulduğunu görebilirsiniz:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

Sonunda, uygulamanın dağıtıldığını görürsünüz.

...
Deployed service [default] to [https://<project-id>.appspot.com]

Uygulamayı dağıttıktan sonra web tarayıcınızda http://<project-id>.appspot.com URL'sini açarak uygulamayı ziyaret edin.

Varsayılan ASP.NET Core web sayfasını yeni bir sekmede görürsünüz.

f579a9baedc108a9.png

Bulutta sizin için oluşturulan kapsayıcı görüntüsüne de göz atabilirsiniz. Cloud Console'da Container Registry > Görseller'e gidin. Ardından appengine klasöründe uygulamanızın görüntüsünü görürsünüz.

de788f4949d0c5a.png

8. Hizmetinizin yeni bir sürümünü dağıtma

Üretime dağıttığınız uygulama, bir noktada hata düzeltmeleri veya ek özellikler gerektirecektir. App Engine, kullanıcılarınızı etkilemeden yeni bir sürümü üretime dağıtmanıza yardımcı olmak için burada.

Öncelikle uygulamayı değiştirelim. Cloud Shell'den kod düzenleyiciyi açın.

868c4f615e2331fe.png

HelloWorldAspNetCore klasörünün Views/Home klasöründeki Index.cshtml bölümüne gidin ve varsayılan mesajı şu şekilde güncelleyin:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

Değişiklikleri kaydedip Cloud Shell'e geri dönün. HelloWorldAspNetCore,, bağımsız bir DLL almak için uygulamayı yayınlayın.

dotnet publish -c Release

Yayın dizinine gidin.

cd bin/Release/netcoreapp3.1/publish/

Artık uygulamanızın yeni bir sürümünü (bu örnekte v1) dağıtabilirsiniz.

gcloud app deploy --version v1

Dağıtım tamamlandıktan sonra, Google Cloud Console'un App Engine sürümleri bölümüne giderek uygulamanızın yeni sürümünün tüm trafiğe yeni mesajla hizmet verdiğini görebilirsiniz.

8cc0cc992b4e07ed.png

9. Gösterge Tabloları ve Trafiği Bölme

App Engine'deki Kontrol Paneli bölümünde, uygulamanızla ilgili gecikme, CPU vb. için çeşitli kontrol panelleri görebilirsiniz. Bunları kendiniz inceleyebilirsiniz.

5c879431935b080d.png

Sürümler bölümünde, uygulamanızın dağıtılan sürümlerini görebilir ve Trafiği Bölme bölümünde trafiği farklı sürümler arasında bölebilirsiniz. Trafiği iki sürüm arasında bölelim:

176a2e22e755b6d3.png

10. Tebrikler!

Temizleme

Maliyetten tasarruf etmek ve genel olarak iyi bir bulut kullanıcısı olmak için uygulamayı kapatma zamanı geldi.

App Engine'in sürümler bölümüne gidin.

7e9b3b4406e785b9.png

Sürümü seçip durdurun.

7f80d9ff2c959e0.png

Sürüm durdurulduktan sonra destekleyici örnekler silinir ve örnek sayısının sıfıra düştüğünü görürsünüz.

29f3cb5c71225b2d.png

İşlediğimiz konular

İşte bu kadar. ASP.NET Core uygulaması oluşturup Docker kapsayıcısı olarak paketlediniz ve Google App Engine Esnek'e dağıttınız.

  • Basit bir ASP.NET Core uygulamasını Docker container'ı olarak paketleme
  • Basit bir ASP.NET Core uygulamasını App Engine'e dağıtma

Sonraki Adımlar

Lisans

Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.