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
Bu eğitimi nasıl kullanacaksınız?
Google Cloud Platform deneyiminizi nasıl değerlendirirsiniz?
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- 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.



- 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_IDolarak 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.
- 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
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.

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:

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

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

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

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.

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.

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.

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.

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.

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:

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.

Sürümü seçip durdurun.

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.

İş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
- Google Cloud Platform'da Windows hakkında daha fazla bilgi edinin.
- Google Cloud Platform'da.NET hakkında daha fazla bilgi edinin.
- Google Cloud Platform'da SQL Server hakkında daha fazla bilgi edinin.
- Cloud Tools for Visual Studio hakkında daha fazla bilgi edinin.
- Cloud Tools for PowerShell hakkında daha fazla bilgi edinin.
Lisans
Bu çalışma, Creative Commons Attribution 2.0 Genel Amaçlı Lisans ile lisans altına alınmıştır.