C# ile Hello Cloud Run

1. Giriş

89eb4723767d4525.png

Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanıza olanak tanıyan yönetilen bir platformdur. Cloud Run sunucusuzdur: Tüm altyapı yönetimini soyutladığı için en önemli işe, yani harika uygulamalar geliştirmeye odaklanabilirsiniz.

Knative'den derlenen bu platform sayesinde, container'larınızı Cloud Run ile tümüyle yönetilecek şekilde veya Cloud Run on GKE ile Google Kubernetes Engine kümenizde çalıştırmayı tercih edebilirsiniz.

Bu kod laboratuvarının amacı, bir container görüntüsü oluşturup Cloud Run'a dağıtmanızı sağlamaktır.

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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.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 dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir 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ğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • 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ırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Google Cloud Shell

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

Cloud Shell, tarayıcınızı kullanarak her yerden erişebileceğiniz bir online geliştirme ve işlem ortamıdır. Cloud Shell'in gcloud komut satırı aracı, kubectl ve daha fazlası gibi yardımcı programlarla önceden yüklenmiş olan online terminalini kullanarak kaynaklarınızı yönetebilirsiniz. Ayrıca, online Cloud Shell Düzenleyici'yi kullanarak bulut tabanlı uygulamalarınızı geliştirebilir, derleyebilir, hatalarını ayıklayabilir ve dağıtabilirsiniz.

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 doğrudan Google Cloud'da çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).

  • Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir'i tıklamanız yeterlidir :

cb81e7c8e34bc8d.png

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

bfde7b083abc9544.png

Ortamın sağlanması yalnızca birkaç saniye sürer :

cbb597d2be277a14.png

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını görürsünüz :

gcloud auth list

Komut çıkışı

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

Proje, web konsolunda bir proje seçtiyseniz PROJECT_ID olarak ayarlanmış olmalıdır:

gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Herhangi bir nedenle proje ayarlanmamışsa şu komutu verin:

gcloud config set project <PROJECT_ID>

PROJECT_ID cihazınızı mı arıyorsunuz? Cloud Console'un üst kısmındaki açılır listeye göz atın :

2c7a57249d954735.png

Proje ayrıntılarınızı "Ayarlar ve yardımcı programlar" bölümünü kullanarak da kontrol edebilirsiniz:

791f101797cfef39.png

Cloud Shell, gelecekteki komutları çalıştırırken faydalı olabilecek bazı ortam değişkenlerini de varsayılan olarak ayarlar.

echo $GOOGLE_CLOUD_PROJECT

Komut çıkışı

<PROJECT_ID>
  • Son olarak, varsayılan bölgeyi ayarlayabilirsiniz :
gcloud config set compute/zone us-central1-f

Farklı bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Alt Bölgeler başlıklı makaleyi inceleyin.

Cloud Run API'yi etkinleştirme

Cloud Shell'den Cloud Run API'yi etkinleştirin :

gcloud services enable run.googleapis.com

Bu işlem, aşağıdakine benzer bir başarı mesajı oluşturur :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. Örnek uygulamayı yazma

HTTP isteklerine yanıt veren basit bir ASP.NET C# uygulaması oluşturacağız.

Uygulamanızı oluşturmak için Cloud Shell'de dotnet komut satırı aracını kullanın:

dotnet new web -o helloworld-csharp

helloworld-csharp dizinine geçin:

cd helloworld-csharp

Ardından, Program.cs uygulamasını aşağıdaki bilgilerle eşleşecek şekilde güncelleyin:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Bu kod, PORT ortam değişkeninin tanımladığı bağlantı noktasında dinleme yapan ve Hello World ile yanıt veren temel bir web sunucusu oluşturur.

Uygulamayı Cloud Shell'de yerel olarak çalıştırarak test edebilirsiniz. 8080 numaralı bağlantı noktasında dinlediğini görmeniz gerekir:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. Cloud Run'a dağıt

Aşağıdaki komutu kullanarak uygulamanızı Cloud Run'a dağıtın:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world hizmet adıdır.
  • allow-unauthenticated işareti, hizmeti kimlik doğrulama koşulu olmadan herkese açık bir hizmet olarak dağıtır.
  • us-central1, uygulamanın dağıtılacağı bölgedir.
  • source işareti, oluşturulacak kaynağın konumunu belirler. Cloud Run, kaynak koddan otomatik olarak kapsayıcı oluşturmak için buildpack'leri kullanır.

Dağıtım tamamlanana kadar birkaç dakika bekleyin. İşlem başarılı olduğunda komut satırında hizmet URL'si gösterilir :

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

Artık hizmet URL'sini bir web tarayıcısında açarak dağıtılan kapsayıcınızı ziyaret edebilirsiniz :

85e7fbbd264444c9.png

Tebrikler! Container görüntüsünde paketlenmiş bir uygulamayı Cloud Run'a dağıttınız. Cloud Run, alınan istekleri işlemek için kapsayıcı resminizi otomatik olarak ve yatay yönde ölçeklendirir, talep azaldığında ise ölçeği küçültür. Yalnızca istek işleme sırasında kullanılan CPU, bellek ve ağ iletişimi için ödeme yaparsınız.

5. Temizleme zamanı

Ücretlendirilmemek için GCP projenizi silmeyi tercih edebilirsiniz. Bu durumda, söz konusu projede kullanılan tüm kaynaklar için faturalandırma durdurulur. Alternatif olarak, yalnızca Cloud Run hizmetini de silebilirsiniz:

gcloud run services delete helloworld

6. Sırada ne var?

Bir sonraki adım olarak GKE'de Cloud Run'a dağıtım yapabilirsiniz.

Kaynak koddan Cloud Run için uygun bir durum bilgisiz HTTP kapsayıcısı oluşturma ve bunu Container Registry'ye gönderme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: