1. Genel Bakış
Bir web uygulamasını ilk kez dağıtmak korkutucu olabilir. İlk dağıtımdan sonra bile süreç çok fazla iş gerektiriyorsa uygulamanızın yeni sürümlerini dağıtmaktan kaçınabilirsiniz. Sürekli dağıtım sayesinde, uygulamanızdaki değişiklikleri kolayca otomatik olarak dağıtabilirsiniz.
Bu laboratuvarda bir web uygulaması yazacak ve uygulamanızın kaynak kodunda değişiklik yapıldığında uygulamanızı otomatik olarak dağıtmak için Cloud Run'ı yapılandıracaksınız. Ardından, uygulamanızı değiştirip tekrar dağıtırsınız.
Öğrenecekleriniz
- Cloud Shell Düzenleyici ile web uygulaması yazma
- Uygulama kodunuzu GitHub'da saklama
- Uygulamanızı Cloud Run'a otomatik olarak dağıtma
- Vertex AI'ı kullanarak uygulamanıza üretken yapay zeka ekleme
2. Ön koşullar
- Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.
- İş veya okul hesabı yerine kişisel hesap kullanıyorsanız. İş ve okul hesaplarında, bu laboratuvar için gereken API'leri etkinleştirmenizi engelleyen kısıtlamalar olabilir.
- Henüz bir GitHub hesabınız yoksa GitHub hesabı oluşturmanız gerekir
- .
- Varsa mevcut bir GitHub hesabını kullanın. GitHub, yeni bir hesabı spam olarak engelleme olasılığı daha yüksektir.
- Hesabınızın spam olarak işaretlenme olasılığını azaltmak için GitHub hesabınızda iki öğeli kimlik doğrulamayı yapılandırın.
3. Proje ayarlama
- Google Cloud Console'da oturum açın.
- Cloud Console'da faturalandırmayı etkinleştirin.
- Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
- Daha fazla ödeme alınmaması için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
- Yeni kullanıcılar 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
- Gen AI for Devs etkinliğine mi katılıyorsunuz? 1 ABD doları tutarında kredi alabilirsiniz.
- Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.
- Cloud Faturalandırma'daki Projelerim bölümünde faturalandırmanın etkinleştirildiğini onaylayın.
- Yeni projenizin
Billing accountsütunundaBilling is disabledyazıyorsa:Actionssütunundaki üç noktayı tıklayın.- Faturalandırmayı değiştir'i tıklayın.
- Kullanmak istediğiniz faturalandırma hesabını seçin.
- Gen AI for Devs etkinliğine katılıyorsanız hesabın adı büyük olasılıkla Google Cloud Platform Deneme Sürümü Faturalandırma Hesabı olur.
- Yeni projenizin
4. Cloud Shell Düzenleyici'yi açma
- Cloud Shell Düzenleyici'ye gidin.
- Terminal ekranın alt kısmında görünmüyorsa açın:
- Hamburger menüsünü
tıklayın. - Terminal'i tıklayın.
- Yeni Terminal'i tıklayın.

- Hamburger menüsünü
- Terminalde şu komutla projenizi ayarlayın:
- Biçim:
gcloud config set project [PROJECT_ID] - Örnek:
gcloud config set project lab-project-id-example - Proje kimliğinizi hatırlamıyorsanız:
- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
- Biçim:
- Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın.

- Şu mesajı görmeniz gerekir:
Updated property [core/project].
WARNINGsimgesini görüyorsanız veDo you want to continue (Y/N)?soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz.Ntuşuna,Entertuşuna basın vegcloud config set projectkomutunu tekrar çalıştırmayı deneyin.
5. API'leri etkinleştir
Terminalde API'leri etkinleştirin:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda aşağıdakine benzer bir başarılı mesaj üretmesi gerekir:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Git'i yapılandırma
- Genel Git kullanıcı e-posta adresinizi ayarlayın:
git config --global user.email "you@example.com" - Genel Git kullanıcı adınızı ayarlayın:
git config --global user.name "Your Name" - Global git varsayılan dalınızı
mainolarak ayarlayın:git config --global init.defaultBranch main
7. Kodunuzu yazın
Go ile uygulama yazmak için:
- Ana dizine gidin:
cd ~ codelab-genaidizinini oluşturun:mkdir codelab-genaicodelab-genaidizinine gidin:cd codelab-genai- Modülümüzü bildirmek için bir go.mod dosyası başlatın:
go mod init codelab-genai main.godosyası oluşturma:touch main.gomain.godosyasını Cloud Shell Düzenleyici'de açın: Ekranın üst kısmında artık boş bir dosya görünmelidir. Bucloudshell edit main.gomain.godosyasını buradan düzenleyebilirsiniz.
main.godosyasını düzenleyin ve aşağıdaki kodu dosyaya yapıştırın: Cloud Shell Düzenleyici, birkaç saniye sonra kodunuzu otomatik olarak kaydeder. Bu kod, http isteklerine "Hello world!" karşılama mesajıyla yanıt verir.package main import ( "fmt" "log" "net/http" "os" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world!") }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
Uygulamanızın ilk kodu tamamlandı ve sürüm kontrolünde depolanmaya hazır.
8. Kod deposu oluştur
- Ekranınızın alt kısmındaki Cloud Shell terminaline dönün.
- Doğru dizinde olduğunuzdan emin olun:
cd ~/codelab-genai - Git deponuzu başlatma
git init -b main - GitHub CLI'ye giriş yapma
Varsayılan seçenekleri kabul etmek içingh auth loginEntertuşuna basın ve GitHub CLI aracındaki talimatları uygulayın. Bu talimatlar şunları içerir:- Hangi hesaba giriş yapmak istiyorsunuz?
GitHub.com - Bu ana makinede Git işlemleri için tercih ettiğiniz protokol nedir?
HTTPS - Git'in kimliğini GitHub kimlik bilgilerinizle mi doğrulamak istiyorsunuz?
Y(Bu seçenek görünmüyorsa atlayın.) - GitHub CLI'nin kimliğini nasıl doğrulamak istersiniz?
Login with a web browser - Tek seferlik kodunuzu kopyalayın
- https://github.com/login/device adresini açın.
- Tek seferlik kodunuzu yapıştırın
- Authorize github'ı (GitHub'ı yetkilendir) tıklayın.
- Girişinizi tamamlama
- Hangi hesaba giriş yapmak istiyorsunuz?
- Oturum açtığınızı onaylayın:
Başarıyla giriş yaptıysanız bu komut, GitHub kullanıcı adınızı çıkış olarak vermelidir.gh api user -q ".login" GITHUB_USERNAMEdeğişkeni oluşturmaGITHUB_USERNAME=$(gh api user -q ".login")- Ortam değişkenini oluşturduğunuzu onaylayın:
Değişkeni başarıyla oluşturduysanız bu komut, GitHub kullanıcı adınızı verir.echo ${GITHUB_USERNAME} codelab-genaiadlı boş bir GitHub deposu oluşturun: Bu hatayı alırsanız:gh repo create codelab-genai --private Bu durumdaGraphQL: Name already exists on this account (createRepository)
codelab-genaiadlı bir deponuz zaten var. Bu eğitime devam etmek için iki seçeneğiniz vardır:- Mevcut GitHub deposunu silin
- Farklı bir ada sahip bir depo oluşturun ve aşağıdaki komutlarda bu adı değiştirmeyi unutmayın.
codelab-genaideposunu uzakoriginolarak ekleyin:git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. Kodunuzu paylaşma
- Doğru dizinde olduğunuzu onaylayın:
cd ~/codelab-genai - Geçerli dizindeki tüm dosyaları bu commite ekleyin:
git add . - İlk commit'i oluşturun:
git commit -m "add http server" - Kaydınızı
origindeposununmaindalına aktarın:git push -u origin main
Bu komutu çalıştırabilir ve sonuçta elde edilen URL'yi ziyaret ederek GitHub'daki uygulama kodunuzu görüntüleyebilirsiniz:
echo -e "\n\nTo see your code, visit this URL:\n \
https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/main.go \n\n"
10. Otomatik dağıtımları ayarlama
- Cloud Shell Düzenleyici sekmesini açık bırakın. Bu sekmeye daha sonra geri döneceğiz.
- Yeni bir sekmede Cloud Run sayfasını ziyaret edin.
- Konsolda doğru Google Cloud projesini seçin

- CONNECT REPO'yu (Depoyu bağla) tıklayın.
- CLOUD BUILD İLE AYARLA'yı tıklayın.
- Depo Sağlayıcı olarak GitHub'ı seçin.
- Tarayıcıda GitHub hesabınıza giriş yapmadıysanız kimlik bilgilerinizle giriş yapın.
- Kimlik doğrulama'yı ve ardından Devam'ı tıklayın.
- Giriş yaptıktan sonra Cloud Run sayfasında The GitHub App is not installed on any of your repositories. (GitHub uygulaması, hiçbir deponuzda yüklü değil.) mesajını görürsünüz.
- GOOGLE CLOUD BUILD'U YÜKLE düğmesini tıklayın.
- Yükleme Ayarları sayfasında Yalnızca belirli depoları seç'i belirleyin ve CLI aracılığıyla oluşturduğunuz codelab-genai deposunu seçin.
- Yükle'yi tıklayın.
- Not: Çok sayıda GitHub deponuz varsa bu işlemin yüklenmesi birkaç dakika sürebilir.
- Depo olarak
your-user-name/codelab-genaiseçeneğini belirleyin.- Depo yoksa Bağlı Depoları Yönet bağlantısını tıklayın.
- Branch'i
^main$olarak bırakın. - Google Cloud'un buildpack'leri aracılığıyla Go, Node.js, Python, Java, .NET Core, Ruby veya PHP'yi tıklayın.
- Diğer alanları (
Build context directory,EntrypointveFunction target) olduğu gibi bırakın.
- Diğer alanları (
- Kaydet'i tıklayın
- Depo Sağlayıcı olarak GitHub'ı seçin.
- Kimlik doğrulama'ya gidin.
- Kimliği doğrulanmayan çağrılara izin ver'i tıklayın.
- OLUŞTUR'u tıklayın.
Derleme işlemi tamamlandıktan sonra (birkaç dakika sürer) bu komutu çalıştırın ve çalışan uygulamanızı görüntülemek için sonuç URL'sini ziyaret edin:
echo -e "\n\nOnce the build finishes, visit your live application:\n \
"$( \
gcloud run services list | \
grep codelab-genai | \
awk '/URL/{print $2}' | \
head -1 \
)" \n\n"
11. Kodunuzu değiştirme
- Ekranınızın alt kısmındaki Cloud Shell terminaline dönün.
- Doğru dizinde olduğunuzdan emin olun:
cd ~/codelab-genai main.godosyasını Cloud Shell Düzenleyici'de yeniden açın.cloudshell edit main.go- Go için Vertex AI SDK'yı yükleyin:
go get cloud.google.com/go/vertexai/genai - Geçerli proje kimliğini almak için Go'ya yönelik meta veri kitaplığını yükleyin:
go get cloud.google.com/go/compute/metadata main.godosyanızdaki kodu şu kodla değiştirin:package main import ( "context" "fmt" "log" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) func main() { ctx := context.Background() var projectId string var err error projectId = os.Getenv("GOOGLE_CLOUD_PROJECT") if projectId == "" { projectId, err = metadata.ProjectIDWithContext(ctx) if err != nil { return } } var client *genai.Client client, err = genai.NewClient(ctx, projectId, "us-central1") if err != nil { return } defer client.Close() model := client.GenerativeModel("gemini-1.5-flash-001") http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { animal := r.URL.Query().Get("animal") if animal == "" { animal = "dog" } resp, err := model.GenerateContent( ctx, genai.Text( fmt.Sprintf("Give me 10 fun facts about %s. Return the results as HTML without markdown backticks.", animal)), ) if err != nil { w.WriteHeader(http.StatusServiceUnavailable) return } if len(resp.Candidates) > 0 && len(resp.Candidates[0].Content.Parts) > 0 { htmlContent := resp.Candidates[0].Content.Parts[0] w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprint(w, htmlContent) } }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
12. Yeniden dağıt
- Cloud Shell'de doğru dizinde olduğunuzdan emin olun:
cd ~/codelab-genai - Uygulamanızın yeni bir sürümünü yerel Git deponuza göndermek için şu komutları çalıştırın:
git add . git commit -m "add latest changes" - Değişiklikleri GitHub'a aktarın:
git push - Derleme işlemi tamamlandıktan sonra şu komutu çalıştırın ve dağıtılan uygulamanızı ziyaret edin:
echo -e "\n\nOnce the build finishes, visit your live application:\n \ "$( \ gcloud run services list | \ grep codelab-genai | \ awk '/URL/{print $2}' | \ head -1 \ )" \n\n"
Değişikliklerinizi görebilmeniz için derlemenin tamamlanması birkaç dakika sürebilir.
Tüm düzeltmelerin geçmişini şu adreste görebilirsiniz: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions
13. (İsteğe bağlı) Vertex AI kullanımınızı denetleme
Diğer Google Cloud hizmetlerinde olduğu gibi Vertex AI işlemlerini denetleyebilirsiniz. Denetleme günlükleri şu sorulara yanıt vermenize yardımcı olur: "Kim neyi, nerede ve ne zaman yaptı?" Vertex AI için yönetim denetleme günlükleri varsayılan olarak etkindir. İçerik oluşturma isteklerini denetlemek için Veri Erişimi denetleme günlüklerini etkinleştirmeniz gerekir:
- Google Cloud Console'da Denetleme Günlükleri sayfasına gidin:
Bu sayfayı bulmak için arama çubuğunu kullanıyorsanız alt başlığı IAM ve Yönetici olan sonucu seçin. - Mevcut Google Cloud projesinin, Cloud Run uygulamanızı oluşturduğunuz proje olduğundan emin olun.
- Veri erişimi denetleme günlükleri yapılandırması tablosunda, Hizmet sütunundan
Vertex AI APIseçeneğini bulun. - Günlük Türleri sekmesinde, Veri Erişimi denetleme günlüğü türleri
Admin readveData read'ü seçin. - Kaydet'i tıklayın.
Bu özelliği etkinleştirdikten sonra uygulamanın her çağrılması için denetleme günlüklerini görebilirsiniz. Çağrı ayrıntılarını içeren denetleme günlüklerini görmek için aşağıdakileri yapın:
- Dağıtılan uygulamanıza dönün ve günlüğü tetiklemek için sayfayı yenileyin.
- Google Cloud Console'da Günlük Gezgini sayfasına gidin:
- Sorgu penceresine şunu yazın:
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com" - Sorguyu çalıştır'ı tıklayın.
Denetleme günlükleri, Vertex AI API'nin kullanımını yakalar ancak istemler veya yanıt ayrıntıları gibi iş yüküyle ilgili verileri gözlemlemenize izin vermez.
14. (İsteğe bağlı) Yapay zeka iş yükünüzün gözlemlenebilirliğini artırın
Denetleme günlükleri, iş yüküyle ilgili bilgileri yakalamaz. İş yüklerinizin gözlemlenebilirliğini artırmak için bu bilgileri açıkça günlüğe kaydetmeniz gerekir. Bunu yapmak için favori günlük kaydı çerçevenizi kullanabilirsiniz. Aşağıdaki adımlarda, Go'nun yapılandırılmış günlük kaydı kitaplığı kullanılarak bu işlemin nasıl yapılacağı gösterilmektedir.
main.godosyasını Cloud Shell Düzenleyici'de yeniden açın.cloudshell edit ~/codelab-genai/main.go- İçe aktarma bloğunuzu Go'nun yapılandırılmış günlük kaydı ve JSON kitaplıklarını içerecek şekilde değiştirin:
import ( "context" "encoding/json" "fmt" "log" "log/slog" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) - Vertex istemcinizi başlattıktan sonra (33. satır), Google Cloud Logging için doğru alanları kullanan yapılandırılmış bir günlük kaydediciyi başlatmak üzere aşağıdaki satırları ekleyin:
opts := &slog.HandlerOptions{ Level: slog.LevelDebug, ReplaceAttr: func(group []string, a slog.Attr) slog.Attr { if a.Key == slog.LevelKey { return slog.Attr{Key: "severity", Value: a.Value} } if a.Key == slog.MessageKey { return slog.Attr{Key: "message", Value: a.Value} } return slog.Attr{Key: a.Key, Value: a.Value} }, } jsonHandler := slog.NewJSONHandler(os.Stdout, opts) slog.SetDefault(slog.New(jsonHandler)) GenerateContent(69. satır) yanıtı kontrol edildikten sonra aşağıdaki satırları if bloğunun içine ekleyin: Bu kod, yapılandırılmış günlük kaydı biçimini kullanarak oluşturulan içeriklerle ilgilijsonBytes, err := json.Marshal(resp) if err != nil { slog.Error("Failed to marshal response to JSON", "error", err) } else { jsonString := string(jsonBytes) slog.Debug("Complete response content", "json_response", jsonString) }stdoutbilgilerini yazar. Cloud Run'daki bir günlük aracısı,stdout'ya yazdırılan çıkışı yakalar ve bu biçimi Cloud Logging'e yazar.- Cloud Shell'i yeniden açın ve doğru dizinde olduğunuzdan emin olmak için aşağıdaki komutu yazın:
cd ~/codelab-genai - Değişiklikleri kaydedin:
git commit -am "Observe generated content" - Değiştirilen sürümün yeniden dağıtımını tetiklemek için değişiklikleri GitHub'a gönderin:
git push
Yeni sürüm dağıtıldıktan sonra Vertex AI'a yapılan çağrılarla ilgili hata ayıklama bilgilerini gözlemleyebilirsiniz.
Uygulama günlüklerinizi görmek için şunları yapın:
- Google Cloud Console'da Günlük Gezgini sayfasına gidin:
- Sorgu penceresine şunu yazın:
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG - Sorguyu çalıştır'ı tıklayın.
Sorgunun sonucu, güvenlik uygulamalarını izlemek için kullanılabilecek "güvenlik derecelendirmeleri" de dahil olmak üzere istem ve Vertex AI yanıtı içeren günlükleri gösterir.
15. (İsteğe bağlı) Temizleme
Cloud Run, hizmet kullanılmadığında ücret almaz ancak container görüntüsünü Artifact Registry'de depoladığınız için ücretlendirilebilirsiniz. Ücret ödememek için Cloud projenizi silebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.
İsterseniz projeyi silebilirsiniz:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Ayrıca, gereksiz kaynakları Cloud Shell diskinizden de silebilirsiniz. Şunları yapabilirsiniz:
- Codelab proje dizinini silin:
rm -rf ~/codelab-genai - Artık ihtiyacınız olmayabilecek Go paketlerini temizleyin:
cd ~ go clean -modcache - Uyarı! Bu işlem geri alınamaz. Yer açmak için Cloud Shell'inizdeki her şeyi silmek istiyorsanız tüm ana dizininizi silebilirsiniz. Saklamak istediğiniz her şeyin başka bir yere kaydedildiğinden emin olun.
sudo rm -rf $HOME
16. Tebrikler
Bu laboratuvarda bir web uygulaması yazdınız ve uygulamanızın kaynak kodunda değişiklik yapıldığında uygulamanızı otomatik olarak dağıtmak için Cloud Run'ı yapılandırdınız. Ardından, uygulamanızı değiştirip tekrar dağıttınız.
Bu laboratuvarı beğendiyseniz başka bir kodlama dilinde veya çerçevesinde tekrar deneyebilirsiniz:
Bugün kullandığınız ürünleri iyileştirmek için kullanıcı deneyimi (UX) araştırmasına katılmak isterseniz buradan kaydolun.
Öğrenmeye devam etmek için kullanabileceğiniz bazı seçenekler:
- Dokümanlar: Herhangi bir model API'sini entegre etmeyi ve topluluk tarafından desteklenen modelleri kullanmayı kolaylaştıran esnek bir model soyutlaması olarak Genkit'i kullanın.
- Codelab: Gemini destekli sohbet uygulamasını Cloud Run'da dağıtma
- Cloud Run ile Gemini işlev çağrısını kullanma
- İsteğe bağlı atölye: Google Kubernetes Engine Onboard
- Cloud Run Jobs Video Intelligence API'yi kullanarak bir video sahnesini adım adım işleme