1. Genel Bakış
Bu laboratuvarda bir Cloud Run işi oluşturacak ve bir Cloud Scheduler işi ayarlayacaksınız. Cymbal Eats Menü Hizmeti'ni, kurulum komut dosyasını kullanarak dağıtacaksınız. Cymbal Eats Menü Hizmeti'ne API çağrıları yapan bir Cloud Run işi oluşturacaksınız. Google Cloud KSA'yı kullanarak işi yürütecek ve iş için bir plan oluşturacaksınız. Menü öğelerinin silindiğini doğrulamak için günlükleri inceleyerek ve Menü Hizmeti'ne API çağrıları yaparak yürütmeyi doğrularsınız.
Cloud Run işleri nedir?
Cloud Run işi, web istekleri sunmayan ancak operasyonel görevleri veya veri işlemeyi yürüten bir kapsayıcı çalıştırır. Kapsayıcı, görevi çalıştırır ve tamamlandığında çıkar.
Temizleme hizmeti işi
Temizlik hizmet işi, "Başarısız" durumundaki menü öğelerini alır ve siler. Yeni menü öğeleri oluşturulduğunda, bir gıda öğesi olup olmadığını tespit etmek için resimler Vision API kullanılarak analiz edilir. Bu doğrulama işleminde başarısız olan resimlerin menü öğesi durumu "Başarısız" olarak güncellenir ve daha sonra temizleme işi tarafından silinir.
Öğrenecekleriniz
Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:
- Cloud Run işleri oluşturma
- Cloud Run işlerini yürütme
- Cloud Scheduler işleri oluşturma
- İşlerin yürütülmesini doğrulama
Ön koşullar
- Bu laboratuvarda, Cloud Console ve kabuk ortamlarına aşina olduğunuz varsayılır.
- Cloud Run ve Cloud Scheduler deneyimi faydalı olsa da gerekli değildir.
2. Kurulum ve Gereksinimler
Cloud projesi oluşturma
- 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ının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle
PROJECT_ID
olarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı olmayacaktır. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Ortam Kurulumu
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.
Cloud Shell'de, bu depoda bulunan uygulama kodunu klonlamak ve menü hizmetini içeren dizine gitmek için aşağıdaki komutu çalıştırın:
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/menu-service
Kurulum komut dosyasını kullanarak Menü hizmetini Cloud Run'a dağıtın. Menü hizmeti, arka ucu için Cloud SQL Postgres veritabanı kullanan Quarkus çerçevesiyle oluşturulmuş Java tabanlı bir mikro hizmettir. Menü hizmeti, aşağıdaki adımlarda oluşturacağınız Cloud Run işinin çalışma zamanı bağımlılığıdır.
./setup.sh
Gerekli tüm bileşenlerin dağıtım işlemi yaklaşık 10 dakika sürer.
Yukarıdaki komutu çalıştırdıktan sonra sonraki adımlara geçin.
3. Cloud Run iş kodunu keşfetme
Artı simgesini tıklayarak Cloud Shell'de yeni bir sekme açın.
Temizleme hizmetini ve işi oluşturan dosyaları içeren dizine gidin:
cd ~/cymbal-eats/cleanup-service
Bu dizindeki cleanup-service, temizleme hizmeti işinin kapsayıcı resmini gerekli bağımlılıklarla(httpie, jq) tanımlayan bir Dockerfile
içerir.
Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get install -y httpie jq && apt-get clean
COPY script.sh /
RUN chmod +x /script.sh
CMD ["/script.sh"]
ENTRYPOINT ["/bin/bash"]
Aşağıda listelenen gerçek temizleme komut dosyası, başarısız durumdaki menü öğelerinin listesini alma ve Menü hizmetine API çağrıları yaparak bunları silme komutlarını içerir.
script.sh
echo "FAILED_ITEM_AGE=$FAILED_ITEM_AGE"
echo "MENU_SERVICE_URL=$MENU_SERVICE_URL"
# Failed items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/failed | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber) )| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
# Processing items older than FAILED_ITEM_AGE in minutes
for id in $(http GET $MENU_SERVICE_URL/menu/processing | jq '[.[] | select(.updateDateTime < ((now - 60 * (env.FAILED_ITEM_AGE | tonumber))| strftime("%Y-%m-%dT%H:%M:%S.%f")))]'| jq '.[].id'); do
echo "Deleting Menu Item : $MENU_SERVICE_URL/menu/$id"
http GET $MENU_SERVICE_URL/menu/$id
http DELETE $MENU_SERVICE_URL/menu/$id
done
Komut dosyasıyla ilgili aşağıdakilere dikkat edin:
FAILED_ITEM_AGE
veMENU_SERVICE_URL
ortam değişkenleri dağıtım sırasında ayarlanır ve Cloud Run işi tarafından iletilir.FAILED_ITEM_AGE
: Başarısız öğenin silinmesi için gereken dakika sayısı.MENU_SERVICE_URL
: Cymbal Eats Menü hizmet URL'si.
4. Cloud Run işi oluşturma
Ardından bir kapsayıcı görüntüsü oluşturacak ve bunu Artifact Registry'de yayınlayacaksınız.
Bu kapsayıcı görüntüsü, Cloud Run işi oluşturmak için kullanılır.
Hizmet API'lerini etkinleştirme:
gcloud services enable \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudscheduler.googleapis.com \
--quiet
Ortam değişkenlerini ayarlayın:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export PROJECT_NAME=$(gcloud projects describe $PROJECT_ID --format='value(name)')
export REGION=us-east1
export MENU_SERVICE_NAME=menu-service
Temizleme işi için Docker görüntülerini depolayacak yeni bir Artifact Registry deposu oluşturun:
gcloud artifacts repositories create cymbal-eats --repository-format=docker --location=$REGION
Cloud Build'i kullanarak container görüntüsünü derleyin ve tek bir komutla Artifact Registry'ye aktarın:
gcloud builds submit -t $REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest
Örnek çıkış:
DURATION: 35S SOURCE: gs://cymbal-eats-14906-569_cloudbuild/source/1657126400.933586-dc3e91ec85934a55bb6d2f7012611365.tgz IMAGES: us-east1-docker.pkg.dev/cymbal-eats-14906-569/cymbal-eats/cleanup-service (+1 more) STATUS: SUCCESS
Yayınlama işlemi tamamlandıktan sonra Artifact Registry'ye gidin ve yayınlanan resmi inceleyin:
İkinci Cloud Shell sekmesine geri dönün. Menü hizmetini tanımlamak ve URL'yi ortam değişkenine kaydetmek için aşağıdaki komutu çalıştırın. Bu ortam değişkeni, Cloud Run işini yapılandırmak için kullanılır.
MENU_SERVICE_URL=$(gcloud run services describe $MENU_SERVICE_NAME \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
1 dakikadan eski olan başarısız menü öğelerini temizlemek için bir Cloud Run işi oluşturun [FAILED_ITEM_AGE
tarafından ayarlanır].
gcloud beta run jobs create cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
Örnek çıkış:
Creating Cloud Run job [cleanup-service] in project [cymbal-eats] region [us-east1] OK Creating job... Done. Done. Job [cleanup-service] has successfully been created.
Konsolda Cloud Run İŞLER bölümüne gidin ve oluşturulan işi inceleyin.
İşi tıklayın ve mevcut sekmeleri keşfedin: GEÇMİŞ, GÜNLÜKLER, YAPILANDIRMA ve YAML.
Konsolda işin KONFİGÜRASYON bölümünü inceleyerek ortam değişkenlerinin ayarlandığını doğrulayın:
(İsteğe bağlı) Başarısız Öğe Yaşı veya Menü Hizmeti URL'si değişkenlerini değiştirmek istiyorsanız Cloud Run işi oluşturulduktan sonra update komutunu kullanabilirsiniz:
gcloud beta run jobs update cleanup-service \
--image=$REGION-docker.pkg.dev/$PROJECT_NAME/cymbal-eats/cleanup-service:latest \
--set-env-vars MENU_SERVICE_URL=$MENU_SERVICE_URL \
--set-env-vars FAILED_ITEM_AGE=1 \
--region $REGION
İşi doğrulamak için aşağıdaki komutu çalıştırarak Cloud Run işini yürütün:
gcloud beta run jobs execute cleanup-service --region=$REGION
Örnek çıkış:
OK Creating execution... Done. OK Provisioning resources... Done. Execution [cleanup-service-rlxs4] has successfully started running. View details about this execution by running: gcloud beta run jobs executions describe cleanup-service-rlxs4
İşin çıktısını incelemek için GÜNLÜKLER sekmesine geçin. Günlüklerde Başarısız Öğe Yaşı ve Menü Hizmeti URL'sini görürsünüz.
5. Cloud Run işi için program oluşturma
Cloud Scheduler, tümüyle yönetilen, kurumsal düzeyde bir cron işi planlayıcıdır. Toplu işler, büyük veri işleri, bulut altyapısı işlemleri dahil olmak üzere neredeyse her işi planlamanıza olanak tanır.
Cloud Scheduler işi ile çalışırken güvenlikle ilgili en iyi uygulamalardan biri, her işi ayrı kimlik bilgileriyle yürütmektir. Bu adımda, temizleme planlayıcısı işinin kullanacağı bir hizmet hesabı oluşturun.
export SCHEDULER_SERVICE_ACCOUNT=cleanup-scheduler-job-sa
gcloud iam service-accounts create ${SCHEDULER_SERVICE_ACCOUNT}
Cloud Scheduler işinin, Cloud Run işlerine çağrı yapmak için izinlere ihtiyacı vardır.
Cloud Scheduler işinde kullanılan hizmet hesabına Cloud Run Invoker
rolünü verin:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Ardından, temizleme hizmet işini çalıştırmak için bir plan oluşturacaksınız.
Cloud Scheduler tarafından desteklenen birden fazla hedef türü vardır.
- HTTP
- Pub/Sub
- App Engine HTTP
HTTP hedef türünü kullanarak bir planlayıcı işi oluşturursunuz.
Demo amacıyla, raporu 5 dakikada bir çalışacak şekilde planlayacaksınız.
gcloud scheduler jobs create http cleanup-schedule \
--location $REGION \
--schedule="*/5 * * * *" \
--uri="https://$REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/$PROJECT_ID/jobs/cleanup-service:run" \
--http-method POST \
--oauth-service-account-email ${SCHEDULER_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com
Cloud Run işini çağırmak için kullanılan uri
parametresini inceleyin:
REGION
vePROJECT_ID
: Temizleme hizmeti işinin dağıtıldığı Cloud Run bölgesi ve proje kimliğicleanup-service
: Cloud Run işinin adı
Oluşturulan planlayıcı işini incelemek için konsolda Cloud Scheduler'a gidin:
İşlemler menüsündeki seçenekleri inceleyin.
6. Cloud Run İşini Test Etme
Menü Hizmeti uç noktalarını kullanarak mevcut menü öğelerini ve durumlarını inceleyin:
curl ${MENU_SERVICE_URL}/menu | jq
Çıkış:
Ready
durumunda 3 menü öğesi görürsünüz.
1 numaralı menü öğesinin durumunu Failed
olarak değiştirin:
curl -X PUT "${MENU_SERVICE_URL}/menu/1" \
-H 'Content-Type: application/json' \
-d '{"status": "Failed"}' | jq
1 dakika bekleyin. Menü öğesinin silinmesi için FAILED_ITEM_AGE
parametresi tarafından ayarlandığı gibi 1 dakikalık olması gerekir.
Planlanan bir sonraki çalıştırmayı bekleyebilir veya konsoldan iş yürütmeyi zorlayabilirsiniz.
Bir işi tetiklemenin birden çok yolu vardır (kullanıcı arayüzü veya komut satırı).
Bu örnekte, işi tetiklemek için Cloud Shell'de komutu çalıştırın(3. seçenek).
- Cloud Scheduler'da İşlemler menüsünden "İşi çalıştırmaya zorla"yı seçerek.
- Cloud Run İşi'nde "YÜRÜT" düğmesini tıklayarak.
- Cloud Shell'de aşağıdaki komutu çalıştırarak:
gcloud beta run jobs execute cleanup-service --region=$REGION
Cloud Run İŞLER bölümüne gidin, GÜNLÜKLER sekmesini açın ve menü öğesinin silindiğini doğrulayın.
Günlükleri bulmak için "deleting" anahtar kelimesine göre filtreleyin.
Mevcut menü öğelerini REST uç noktası üzerinden kontrol etmek için Menü Hizmeti uç noktalarını kullanın.
curl ${MENU_SERVICE_URL}/menu | jq
Çıkış:
Ready
durumunda 2 menü öğesi görürsünüz.
7. Tebrikler!
Tebrikler, kod laboratuvarını tamamladınız.
Ele aldığımız konular:
- Cloud Run işleri oluşturma
- Cloud Run işlerini yürütme
- Cloud Scheduler işleri oluşturma
- İşlerin yürütülmesini doğrulama
Sıradaki adım:
Diğer Cymbal Eats codelab'lerini keşfedin:
- Eventarc ile Cloud iş akışlarını tetikleme
- Cloud Storage'dan etkinlik işlemeyi tetikleme
- Cloud Run'dan Private CloudSQL'e bağlanma
- Cloud Run'dan Tümüyle Yönetilen Veritabanlara Bağlanma
- Identity-Aware Proxy (IAP) ile sunucusuz uygulamayı güvence altına alma
- Cloud Run'a Güvenli Dağıtım
- Cloud Run giriş trafiğinin güvenliğini sağlama
- GKE Autopilot'ten özel AlloyDB'ye bağlanma
Temizleme
Bu eğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi saklayıp kaynakları tek tek silin.
Projeyi silme
Faturalandırmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.