1. Başlamadan önce
Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanızı sağlayan bir yönetilen bilgi işlem platformudur. Cloud Run sunucusuzdur; altyapı yönetimi ihtiyacını ortadan kaldırır, böylece siz de en önemli şey olan mükemmel uygulamalar geliştirmeye odaklanabilirsiniz. Knative'den derlenen bu platform, container'larınızı Cloud Run (tümüyle yönetilen) veya Cloud Run for Anthos ile çalıştırmayı seçebilmenizi sağlar. Bu codelab'in amacı, container görüntüsü oluşturup Cloud Run'a dağıtmaktır.
Ön koşullar
Yok
2. Kurulum ve şartlar
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp 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.)
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID
olarak adlandırılacaktır.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları 300 ABD doları ücretsiz deneme programından yararlanabilir.
Cloud Shell
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Bu Debian tabanlı sanal makine, ihtiyacınız olan tüm geliştirme araçlarıyla yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Yani bu codelab'de ihtiyacınız olan tek şey bir tarayıcıdır (evet, Chromebook'ta çalışır).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika sürer).
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin PROJECT_ID
olarak ayarlanmış olduğunu göreceksiniz.
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 vermeniz yeterlidir:
gcloud config set project <PROJECT_ID>
PROJECT_ID
cihazınızı mı arıyorsunuz? Kurulum adımlarında kullandığınız kimliği kontrol edin veya Cloud Console kontrol panelinde arayın:
Cloud Shell bazı ortam değişkenlerini de varsayılan olarak ayarlar. Bu değişkenler, gelecekte komut çalıştırdığınızda işinize yarayabilir.
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 farklı alt bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Bölgeler.
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 başarılı bir mesaj üretir:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Örnek uygulamayı yazma
HTTP isteklerine yanıt veren basit, ekspres tabanlı bir Node.js uygulaması oluşturacaksınız.
Uygulamanızı derlemek için Cloud Shell'i kullanarak helloworld-nodejs
adlı yeni bir dizin oluşturun ve dizini bunun üzerinde değiştirin.
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 komut dosyası başlatma komutu ve Express web uygulaması çerçevesine bağımlılık içerir.
Daha sonra, 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şkeni tarafından tanımlanan 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ı container mimarisine alma ve Container Registry'ye yükleme
Örnek uygulamayı container mimarisine almak için kaynak dosyalarla aynı dizinde Dockerfile
adlı yeni bir dosya oluşturun ve aşağıdaki içeriği buna 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 container görüntünüzü derleyin:
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. Bu eklentiyi gcloud config get-value project
komutunu çalıştırarak da edinebilirsiniz.
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 container görüntülerini listeleyebilirsiniz:
gcloud container images list
Uygulamayı Cloud Shell'den yerel olarak çalıştırıp test etmek isterseniz ş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 bağlantı noktasında önizle'yi seçin.
Hello World! ifadesini içeren bir tarayıcı penceresi açılır.
Yalnızca curl localhost:8080
kullanmanız da yeterlidir.
5. Cloud Run'a dağıt
Container mimarisine alınmış uygulamanızı Cloud Run'a dağıtma işlemi şu komut kullanılarak gerçekleştirilir (uygulamayı, derlediğiniz uygulama için doğru görüntü adına ayarladığınızdan emin olun veya önceden oluşturulmuş gcr.io/cloudrun/hello
görüntüsünü kullanın):
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, uygulamaya kimlik doğrulama olmadan erişmenizi sağlar. --platform managed \
dağıtım seçeneği, tümüyle yönetilen ortamı (Anthos aracılığıyla Kubernetes altyapısını değil) 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 container görüntünüzü otomatik ve yatay olarak ölçeklendirir, ardından talep azaldığında ölçeği azaltır. Yalnızca istek işleme sırasında tüketilen CPU, bellek ve ağ için ödeme yaparsınız.
6. Temizleme
Cloud Run hizmet kullanılmadığında da ücret ödemez ancak derlenen container görüntüsünü depolamak için yine de ücret alınabilir.
Ücret ödemek istemiyorsanız söz konusu proje için kullanılan tüm kaynakların faturalandırılmasını durdurmak üzere Google Cloud projenizi silebilir veya şu komutu kullanarak helloworld görüntünüzü 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
Sonraki adım olarak Hızlı Başlangıç: Google Cloud'da Cloud Run for Anthos'a Dağıtım başlıklı makaleye göz atabilirsiniz.
Kod kaynağından Cloud Run'a uygun durum bilgisiz bir HTTP container'ı derleme ve bunu Container Registry'ye aktarma hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
Temel açık kaynak projesi olan Knative hakkında daha fazla bilgi edinmek için Knative'e göz atın.