Sanal makine örnekleri, kümeler, kapsüller, hizmetler vb. oluşturma ve yönetme görevlerinin getirdiği ek yükle web sitelerini çalıştırmak zorlu olabilir. Bu durum büyük ve çok katmanlı uygulamalar için normal karşılanmakla birlikte yalnızca web sitenizi dağıtıp görünür hale getirmek istiyorsanız tüm bu işlerin oldukça külfetli olduğu söylenebilir.
Knative'in Google Cloud'daki uygulaması olan Cloud Run sayesinde, sanal makine veya Kubernetes tabanlı dağıtımlar için gereken ek yük olmadan web sitenizi yönetip dağıtabilirsiniz. Yönetim açısından daha basit bir yaklaşım olmakla kalmayıp aynı zamanda web sitenize hiçbir istek gelmediğinde size sıfıra ölçeklendirme olanağı da sunar.
Cloud Run, container'lara sunucusuz geliştirme özelliği getirmenin yanı sıra kendi Google Kubernetes Engine (GKE) kümelerinizde veya Cloud Run'ın sağladığı tümüyle yönetilen bir platform hizmeti (PaaS) çözümü olarak da çalıştırılabilir. Bu codelab'de ikinci senaryoyu test edeceksiniz.
Aşağıdaki şemada, dağıtım ve Cloud Run barındırma akışı gösterilmektedir. Cloud Shell'de tetiklediğiniz Cloud Build aracılığıyla oluşturulan bir Docker görüntüsüyle başlarsınız. Ardından, Cloud Shell'deki bir komutla bu görüntüyü Cloud Run'a dağıtırsınız.

Ön koşullar
- Docker hakkında genel bilgi (Docker'ın web sitesindeki Başlarken bölümüne bakın.)
Neler öğreneceksiniz?
- Cloud Build ile Docker görüntüsü oluşturma ve gcr.io'ya yükleme
- Docker görüntülerini Cloud Run'a dağıtma
- Cloud Run dağıtımlarını yönetme
- Cloud Run'da bir uygulama için uç nokta kurulumu yapma
Ne oluşturacaksınız?
- Docker container'ında çalışan statik bir web sitesi
- Bu kapsayıcının Container Registry'de bulunan bir sürümü
- Statik web siteniz için bir Cloud Run dağıtımı
İhtiyacınız olanlar
- Proje oluşturmak için yönetim erişimine sahip bir Google Hesabı veya proje sahibi rolüne sahip olduğunuz bir proje
Kendi hızınızda ortam kurulumu
Henüz bir Google Hesabınız yoksa oluşturmanız gerekir. Ardından, Google Cloud Console'da oturum açın ve Proje > Proje oluştur'u tıklayın.


Proje adınızın altında otomatik olarak doldurulan proje kimliğini unutmayın. Proje kimliği, tüm Google Cloud projelerinde benzersiz bir addır. Bu nedenle, ekran görüntüsündeki ad zaten alınmıştır ve sizin için çalışmaz. Bu değişken, daha sonra PROJECT_ID olarak adlandırılacaktır.
Ardından, Google Cloud kaynaklarını kullanmak ve Cloud Run API'yi etkinleştirmek için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Cloud Run API'yi etkinleştirin
Gezinme menüsü ☰ > API'ler ve Hizmetler > Kontrol Paneli > API'leri ve Hizmetleri Etkinleştir'i tıklayın. .

"Cloud Run API"yi arayın, ardından Cloud Run API > Etkinleştir'i tıklayın.

Bu codelab'i tamamlamak size birkaç dolardan fazla maliyet getirmemelidir. Ancak daha fazla kaynak kullanmaya karar verirseniz veya kaynakları çalışır durumda bırakırsanız maliyet daha yüksek olabilir (son bölümdeki Temizleme'ye bakın). Daha fazla bilgi için Fiyatlandırma bölümüne bakın.
Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.
Cloud Shell
Google Cloud ve Cloud Run, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. Ortam, ihtiyacınız olan tüm istemci kitaplıkları ve çerçevelerle önceden yapılandırılmıştır.
Bu Debian tabanlı sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde iyileştirilir. Bu nedenle, bu codelab için ihtiyacınız olan tek şey bir tarayıcıdır (Chromebook'ta da çalışır).
Google Cloud Shell'i etkinleştirmek için geliştirici konsolunda sağ üst taraftaki düğmeyi tıklamanız yeterlidir (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç dakika sürer):
"Start Cloud Shell" (Cloud Shell'i başlat) düğmesini tıklayın:
Cloud Shell'e bağlandıktan sonra kimliğinizin zaten doğrulandığını ve projenin PROJECT_ID olarak ayarlandığını görmeniz gerekir :
gcloud auth list
Komut çıkışı
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
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>
Herhangi bir nedenle proje ayarlanmamışsa şu komutu verin :
gcloud config set project <PROJECT_ID>
PROJECT_ID cihazınızı mı arıyorsunuz? Kurulum adımlarında hangi kimliği kullandığınızı kontrol edin veya konsol kontrol panelinde arayın:
ÖNEMLİ: Son olarak, varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın:
gcloud config set compute/zone us-central1-f
Çeşitli bölgeler arasından seçim yapabilirsiniz. Bölgeler ve Alt Bölgeler belgelerinden daha fazla bilgi edinebilirsiniz.
Mevcut bir web sitesini dağıtacağınız için yalnızca deponuzdaki kaynağı klonlamanız yeterlidir. Böylece, Docker görüntüleri oluşturup Cloud Run'a dağıtmaya odaklanabilirsiniz.
Depoyu Cloud Shell örneğinize klonlamak ve uygun dizine geçmek için aşağıdaki komutları çalıştırın. Dağıtım öncesinde uygulamanızı test edebilmeniz için Node.js bağımlılıklarını da yüklemeniz gerekir.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
Bu komut, deponuzu klonlar, dizine geçer ve uygulamanızı yerel olarak çalıştırmak için gereken bağımlılıkları yükler. Komut dosyasının çalışması birkaç dakika sürebilir.
Gerekli özeni gösterin ve uygulamanızı test edin. Web sunucunuzu başlatmak için aşağıdaki komutu çalıştırın:
cd ~/monolith-to-microservices/monolith npm start
Çıkış:
Monolith listening on port 8080!
Web Önizlemesi'ni
tıklayıp 8080 numaralı bağlantı noktasında önizle'yi seçerek uygulamanızı önizleyebilirsiniz.

Bu işlemi yaptığınızda Fancy Store'unuzu iş başında görebileceğiniz yeni bir pencere açılır.

Web sitesini görüntüledikten sonra bu pencereyi kapatabilirsiniz. Web sunucusu işlemini durdurmak için terminal penceresinde CONTROL+C (Macintosh'ta Command+C) tuşuna basın.
Kaynak dosyalarınız artık hazır olduğuna göre sıra, uygulamanızı Docker'a uygun hale getirmeye geldi.
Normalde bu süreç iki adımda tamamlanır: Bir Docker container'ı derlenir ve görüntünün GKE'nin çekebileceği şekilde depolanması için bu container bir kayıt defterine aktarılır. Ancak Docker container'ını Cloud Build yardımıyla oluşturup görüntüyü tek bir komutla Container Registry'ye yerleştirerek işinizi kolaylaştırabilirsiniz. Dockerfile oluşturma ve aktarma işlemlerinden oluşan manuel süreci görüntülemek için Container Registry Hızlı Başlangıç Kılavuzu'na bakın.
Cloud Build, dizindeki dosyaları sıkıştırır ve bir Cloud Storage paketine taşır. Ardından, derleme işlemi sırasında paketteki tüm dosyalar alınır ve aynı dizinde bulunan Dockerfile üzerinden Docker derleme işlemi çalıştırılır. Docker görüntüsü için ana makineyi gcr.io olarak ayarladığınız ve --tag işaretini belirttiğinizden, elde edilen Docker görüntüsü Container Registry'ye aktarılır.
Öncelikle Cloud Build API'nin etkinleştirildiğinden emin olmanız gerekir. API'yi etkinleştirmek için aşağıdaki komutu çalıştırın:
gcloud services enable cloudbuild.googleapis.com
API etkinleştirildikten sonra derleme işlemini başlatmak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .Bu işlem birkaç dakika sürer ve tamamlandıktan sonra terminalde aşağıdakine benzer bir çıkış alınır:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
Derleme geçmişinizi görüntülemek veya işlemi gerçek zamanlı olarak izlemek için Cloud Console'a gidip Gezinme menüsü ☰ > Cloud Build > Geçmiş'i tıklayabilirsiniz. Burada, önceki tüm derlemelerinizin listesini görebilirsiniz. Şimdilik yalnızca oluşturduğunuz derleme vardır.

Build id'yi (Derleme kimliği) tıklarsanız derlemenin günlük çıkışı da dahil olmak üzere tüm ayrıntılarını görebilirsiniz. Resim'in yanındaki bağlantıyı tıklayarak oluşturulan container görüntüsünü görebilirsiniz.

Web sitenizi container mimarisine aldığınıza ve Container Registry'ye aktardığınıza göre sıra Cloud Run'a dağıtım yapmaya geldi.
Cloud Run'a dağıtım yapmak için iki yaklaşım mevcuttur:
- Cloud Run (tümüyle yönetilen), tüm container yaşam döngüsünün yönetildiği PaaS modelidir. Bu codelab'de bu yaklaşımı kullanacaksınız.
- Cloud Run for Anthos, GKE'den kümelerinizi ve kapsüllerinizi getirmenize olanak tanıyan ek bir kontrol katmanına sahip Cloud Run'dır. Daha fazla bilgi için Google Cloud'da Anthos için Cloud Run'ı ayarlama başlıklı makaleyi inceleyin.
Komut satırı örnekleri, daha önce ayarladığınız ortam değişkenleri kullanılarak Cloud Shell'de verilir.
Komut satırı
Uygulamanızı dağıtmak için aşağıdaki komutu çalıştırın:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed Uygulamayı hangi bölgede çalıştırmak istediğinizi belirtmeniz istenir. Size en yakın bölgeyi seçin ve önerilen varsayılan hizmet adını (monolith) kabul edin.

Test amacıyla, kimliği doğrulanmamış isteklerin uygulamaya erişmesine izin verin. İstemde y girin.

Dağıtımı doğrulama
Dağıtımın başarıyla oluşturulduğunu doğrulamak için aşağıdaki komutu çalıştırın. Pod status simgesinin Running olması birkaç dakika sürebilir:
gcloud run services list
[1] Cloud Run (tümüyle yönetilen) seçeneğini belirleyin.
Çıkış:
SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT ✔ monolith us-east1 <your url> <your email> 2019-09-16T21:07:38.267Z
Çıkışta çeşitli bilgiler sunulmaktadır. Dağıtımınızın yanı sıra dağıtım yapan kullanıcıyı (e-posta adresiniz) ve uygulamaya erişmek için kullanabileceğiniz URL'yi görebilirsiniz. Bu durumda her şey başarıyla oluşturulmuş demektir.
Hizmetler listesinde sağlanan URL'yi web tarayıcınızda açtığınızda yerel olarak önizlediğiniz web sitesini görürsünüz.
Şimdi uygulamanızı tekrar dağıtın ancak bu defa parametrelerden birini düzenleyin.
Varsayılan olarak bir Cloud Run uygulamasının eşzamanlılık değeri 80'dir, yani her container örneği tek seferde en fazla 80 isteğe hizmet verir. Bu, bir örneğin tek seferde bir isteği işlediği hizmet olarak işlevler (FaaS) modeline kıyasla büyük bir farktır.
Test amacıyla, eşzamanlılık değerini 1 yaparak aynı container görüntüsünü yeniden dağıtın ve neler olacağına bakın.
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 1Ardından gelen soruları, ilk seferde yaptığınız gibi yanıtlayın. Komut başarılı olduğunda sonucu görmek için Cloud Console'a bakın.
Ayrıntıları görmek için Cloud Run kontrol panelinde monolith hizmetini tıklayın.

Düzeltmeler sekmesini tıklayın. İki düzeltmenin oluşturulduğunu göreceksiniz. monolith-00002'yi tıklayın ve ayrıntıları inceleyin. Eşzamanlılık değerinin 1'e düştüğünü görürsünüz.
]

Test için bu yapılandırma yeterli olsa da çoğu üretim senaryosunda birden çok eşzamanlı isteği destekleyen container'larınız olur.
Şimdi yeniden dağıtım yapmadan ilk eşzamanlılık değerini geri yükleyin. Eşzamanlılık değerini varsayılan 80 değerine veya 0'a ayarlayabilirsiniz. Bu durumda eşzamanlılık kısıtlamaları kaldırılır ve varsayılan maksimum değer (bu yazı yazıldığı sırada 80) ayarlanır.
Mevcut düzeltmeyi güncellemek için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --platform managed --concurrency 80Yeni bir düzeltmenin oluşturulduğunu, trafiğin yönlendirildiğini ve eşzamanlılığın tekrar 80 olduğunu fark edeceksiniz.
Pazarlama ekibiniz, şirketinizin web sitesinin ana sayfasını değiştirmenizi istedi. Bu sayfanın şirket ve satışları hakkında daha bilgilendirici olması gerektiğini düşünüyorlar. Bu bölümde, pazarlama ekibini memnun etmek için ana sayfaya bazı metinler ekleyeceksiniz.
Geliştiricilerinizden biri, istenen değişiklikleri index.js.new adlı bir dosyada hazırlamış. Bu dosyayı index.js dosyasına kopyalarsanız değişiklikleriniz sayfaya yansıtılacaktır. Uygun değişiklikleri yapmak için talimatları uygulayın.
Aşağıdaki komutları çalıştırın, güncellenen dosyayı doğru dosya adına kopyalayın ve değişiklikleri doğrulamak için dosya içeriğini yazdırın:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Bu işlem sonucunda elde edilen kod aşağıdaki gibi görünmelidir:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}React bileşenlerini güncellediniz ancak statik dosyaları oluşturmak için React uygulamasını derlemeniz gerekiyor. React uygulamasını derlemek için aşağıdaki komutu çalıştırın ve monolitin herkese açık dizinine kopyalayın:
cd ~/monolith-to-microservices/react-app npm run build:monolith
Kodunuz güncellendiğine göre Docker kapsayıcınızı yeniden oluşturup Container Registry'de yayınlamanız gerekiyor. Önceki komutu tekrar kullanabilirsiniz ancak bu kez sürüm etiketini güncelleyin.
Güncellenmiş 2.0.0 görüntü sürümüyle yeni bir Cloud Build tetiklemek için aşağıdaki komutu çalıştırın:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .Sonraki bölümde, kapalı kalma süresi olmadan uygulamanızı güncellemek için bu görüntüyü kullanacaksınız.
Değişiklikler tamamlandı ve pazarlama ekibi yaptığınız güncellemelerden memnun kaldı. Sırada, kullanıcıların işlerini kesintiye uğratmadan web sitesini güncellemek var.
Cloud Run tüm dağıtımları önce online hale getirilen, daha sonra kendisine trafik yönlendirilen yeni bir düzeltme olarak değerlendirir.
Web sitenizi güncellemek için sonraki talimatları uygulayın.
Komut satırı
Komut satırından aşağıdaki komutla hizmeti yeniden dağıtarak görüntüyü yeni sürüme güncelleyebilirsiniz:
gcloud run deploy --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --platform managedDağıtımı doğrulama
Aşağıdaki komutu çalıştırarak dağıtım güncellemenizi doğrulayın:
gcloud run services describe monolith --platform managed
Çıkış şu şekilde görünür:
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
annotations:
client.knative.dev/user-image: gcr.io/my-cloudrun-codelab/monolith:2.0.0
...
Hizmetinizin artık yeni bir düzeltmede dağıtılmış olan görüntünüzün son sürümünü kullandığını görürsünüz.
Değişikliklerinizi doğrulamak için Cloud Run hizmetinizin harici URL'sine tekrar gidin ve uygulama başlığınızın güncellenmiş olup olmadığına bakın.
Hizmetleri listelemek ve IP adresini görüntülemek için (unuttuysanız) aşağıdaki komutu çalıştırın:
gcloud run services list
Ana sayfa bileşenine eklediğiniz metin artık web sitenizde gösterilir.

Container Registry görüntülerini silme
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quietCloud Storage'daki Cloud Build yapılarını silme
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; doneCloud Run hizmeti silme
gcloud run services delete monolith --platform managed
Web sitenizi Cloud Run ile dağıttınız, ölçeklendirdiniz ve güncellediniz.