1. Başlamadan önce

Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanıza olanak tanıyan yönetilen bir işlem platformudur. Cloud Run sunucusuzdur. Altyapı yönetimi ihtiyacını ortadan kaldırır. Böylece en önemli iş olan mükemmel uygulamalar geliştirmeye odaklanabilirsiniz. Knative'den derlenen bu platform sayesinde, container'larınızı Cloud Run (tümüyle yönetilen) veya Cloud Run for Anthos ile ç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.
Ön koşullar
Yok
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. (Gmail veya G Suite hesabınız yoksa hesap oluşturmanız gerekir.)
Proje kimliğini unutmayın. Bu kimlik, tüm Google Cloud projelerinde benzersiz bir addır (Yukarıdaki ad zaten alınmış olduğundan sizin için çalışmayacaktır). Bu codelab'in ilerleyen kısımlarında PROJECT_ID olarak adlandırılacaktır.
- Ardından, Google Cloud kaynaklarını 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ı nasıl kapatacağınız konusunda size tavsiyelerde bulunan "Temizleme" bölümündeki talimatları uyguladığınızdan emin olun. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir ancak bu laboratuvarda Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
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 bulunur ve 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 (ortamın sağlanması ve bağlantının kurulması yalnızca birkaç saniye sürer).
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, PROJECT_ID'nize ayarlandığını görürsünüz.
gcloud auth list
Komut çıkışı
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
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? Kurulum adımlarında hangi kimliği kullandığınızı kontrol edin veya Cloud Console kontrol panelinde arayın:
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 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. 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, şuna 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 Express tabanlı Node.js uygulaması oluşturacaksınız.
Uygulamanızı oluşturmak için Cloud Shell'i kullanarak helloworld-nodejs adlı yeni bir dizin oluşturun ve dizini değiştirerek bu dizine geçin.
mkdir helloworld-nodejs cd helloworld-nodejs
Aşağıdaki içeriğe sahip bir package.json dosyası oluşturun:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
En önemlisi, yukarıdaki dosya bir başlangıç komut dosyası komutu ve Express web uygulaması çerçevesine bağımlılık içeriyor.
Ardından, aynı dizinde bir index.js dosyası oluşturun ve aşağıdaki içeriği bu dosyaya kopyalayın:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
Bu kod, PORT ortam değişkeninin tanımladığı bağlantı noktasında dinleme yapan temel bir web sunucusu oluşturur. Uygulamanız artık container mimarisine alınmaya, test edilmeye ve Container Registry'ye yüklenmeye hazır.
4. Uygulamanızı kapsayıcıya alın ve Container Registry'ye yükleyin
Örnek uygulamayı kapsayıcıya almak için kaynak dosyalarla aynı dizinde Dockerfile adlı yeni bir dosya oluşturun ve aşağıdaki içeriği bu dosyaya kopyalayın:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
Şimdi, Dockerfile'ı içeren dizinden aşağıdaki komutu çalıştırarak Cloud Build'i kullanarak kapsayıcı görüntünüzü oluşturun:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT, Cloud Shell'de çalışırken Google Cloud proje kimliğinizi içeren bir ortam değişkenidir. gcloud config get-value project komutunu çalıştırarak da alabilirsiniz.
Kayıt defterine aktarıldıktan sonra, görüntü adını (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld) içeren bir SUCCESS mesajı görürsünüz. Görüntü, Container Registry'de depolanır ve istenirse yeniden kullanılabilir.
Şu komutu kullanarak mevcut projenizle ilişkili tüm kapsayıcı resimlerini listeleyebilirsiniz:
gcloud container images list
Uygulamayı Cloud Shell'den yerel olarak çalıştırmak ve test etmek istiyorsanız şu standart docker komutunu kullanarak başlatabilirsiniz:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Cloud Shell'de Web Önizlemesi'ni
tıklayın ve 8080 numaralı bağlantı noktasında önizle'yi seçin.

Bu işlem, Hello World! (Merhaba Dünya!) yazan bir tarayıcı penceresi açar.

curl localhost:8080 aracını da kullanabilirsiniz.
5. Cloud Run'a dağıt
Container mimarisine alınmış uygulamanızı Cloud Run'a dağıtmak için aşağıdaki komutu kullanın (oluşturduğunuz uygulama için doğru görüntü adını ayarladığınızdan veya gcr.io/cloudrun/hello önceden oluşturulmuş görüntüyü kullandığınızdan emin olun):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
--allow-unauthenticated dağıtma seçeneği, kimlik doğrulaması yapmadan uygulamaya ulaşmanızı sağlar. --platform managed \ dağıtma seçeneği, Anthos aracılığıyla Kubernetes altyapısını değil, tümüyle yönetilen ortamı istediğiniz anlamına gelir.
Dağıtım tamamlanana kadar birkaç dakika bekleyin. İşlem tamamlandığında komut satırında hizmet URL'si gösterilir.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at 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:

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.
6. Temizleme
Cloud Run, hizmet kullanılmadığında ücret almaz ancak oluşturulan container görüntüsünü depolama için ücretlendirilebilirsiniz.
Ücretlendirilmemek için Google Cloud projenizi silebilirsiniz. Bu durumda, söz konusu proje için kullanılan tüm kaynakların faturalandırılması durdurulur. Alternatif olarak, şu komutu kullanarak helloworld resminizi silebilirsiniz:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Cloud Run hizmetini silmek için şu komutu kullanın:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. Tebrikler
Tebrikler! Container görüntüsünde paketlenmiş bir uygulamayı Cloud Run'a dağıttınız.
Daha fazla bilgi
Bir sonraki adım olarak Hızlı Başlangıç: Google Cloud'da Cloud Run for Anthos'a dağıtma başlıklı makaleye göz atabilirsiniz.
Kod kaynağında Cloud Run için uygun durum bilgisiz bir 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:
Temel alınan açık kaynak projesi Knative hakkında daha fazla bilgi edinmek için Knative başlıklı makaleyi inceleyin.