1. Başlamadan önce
App Engine uygulamalarını oluşturmak, bakımını yapmak ve trafik ile veri depolama ihtiyaçlarınız değiştikçe ölçeklendirmek kolaydır. App Engine ile bakımını yapmanız gereken sunucu yoktur. Uygulamanızı yüklemeniz yeterlidir.
App Engine uygulamaları, gelen trafiğe göre otomatik olarak ölçeklendirilir. Yük dengeleme, mikro hizmetler, yetkilendirme, SQL ve NoSQL veritabanları, bellek önbelleğe alma, trafik bölme, günlük kaydı, arama, sürüm oluşturma, kullanıma sunma ve geri alma işlemleri ile güvenlik taraması yerel olarak desteklenir ve son derece özelleştirilebilir.
App Engine standart ortamı ve App Engine esnek ortamı; Java, Python, PHP, NodeJS ve Go dahil olmak üzere çeşitli programlama dillerini destekler. İki ortam da geliştiricilere uygulamalarının davranış şekli konusunda maksimum esneklik sağlar. Her ortamın belirli avantajları vardır. Daha fazla bilgi için App Engine ortamı seçme başlıklı makaleyi inceleyin.
Bu eğitimde, Spring Boot uygulamasını App Engine standart ortamına dağıtmayı öğreneceksiniz. Standart ortam, kimse kullanmadığında sıfır örneğe ölçeklenir ve otomatik olarak ölçeklenir.
Ön koşullar
- Java programlama dili ve araçları hakkında bilgi sahibi olma
- Vim, Emacs ve nano gibi standart Linux metin düzenleyicileri hakkında bilgi sahibi olmanız gerekir.
Yapacaklarınız
- App Engine'de Spring Boot Java uygulaması oluşturma
Gerekenler
- Google Cloud projesi
- Google Chrome gibi bir tarayıcı
2. Kurulum ve şartlar
Yönlendirmesiz ortam kurulumu
- 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ı için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini 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ırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Cloud Shell
Google Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Cloud Shell'i etkinleştirme
- Cloud Console'da Cloud Shell'i etkinleştir 'i
tıklayın.

Cloud Shell'i ilk kez başlatıyorsanız ne olduğunu açıklayan bir ara ekran gösterilir. Ara ekran gösterildiyse Devam'ı tıklayın.

Cloud Shell'in temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır.

Bu sanal makineye, ihtiyaç duyacağınız tüm geliştirme araçları yüklenmiştir. 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 codelab'deki çalışmalarınızın neredeyse tamamını tarayıcıyla yapabilirsiniz.
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin, proje kimliğinize ayarlandığını görürsünüz.
- Kimliğinizin doğrulandığını onaylamak için Cloud Shell'de şu komutu çalıştırın:
gcloud auth list
Komut çıkışı
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- gcloud komutunun projeniz hakkında bilgi sahibi olduğunu onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Değilse şu komutla ayarlayabilirsiniz:
gcloud config set project <PROJECT_ID>
Komut çıkışı
Updated property [core/project].
3. Yeni bir Spring Boot web uygulaması oluşturma
Cloud Shell başlatıldıktan sonra, Spring Initializr ile yeni bir Spring Boot uygulaması oluşturmak için komut satırını kullanabilirsiniz.
$ curl https://start.spring.io/starter.tgz \ -d bootVersion=3.0.5 \ -d dependencies=web \ -d type=maven-project \ -d baseDir=gae-standard-example | tar -xzvf - $ cd gae-standard-example
4. Maven pom.xml dosyasını güncelleme
Java sunucu uygulamasını dağıtmanın iki yolu vardır: Maven App Engine Eklentisi veya Gradle App Engine Eklentisi'ni kullanarak ya da war paket dizinini dağıtarak. Uygulamayı dağıtmak için Maven App Engine Eklentisi'ni kullanacaksınız.
Maven App Engine Plugin'i ekleme
Dağıtım sürecini basitleştiren bir Google Cloud eklentisi eklemek için pom.xml'yı güncelleyin. Dosyayı düzenlemek için Vim, nano veya Emacs'i kullanabilirsiniz.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
...
<build>
<plugins>
...
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.4.4</version>
<configuration>
<version>1</version>
<projectId>GCLOUD_CONFIG</projectId>
</configuration>
</plugin>
...
</plugins>
</build>
</project>
5. App Engine tanımlayıcısı ekleme
- Uygulamayı App Engine standart ortamına dağıtmak için yeni bir
src/main/appengine/app.yamltanımlayıcı dosyası oluşturmanız gerekir.
$ mkdir -p src/main/appengine/ $ touch src/main/appengine/app.yaml
src/main/appengine/app.yamldosyasını düzenleyip aşağıdaki içeriği ekleyin:
src/main/appengine/app.yaml
runtime: java17
instance_class: F1
6. Kumanda ekleme
DemoApplication.java içinde "hello world!" döndüren yeni bir denetleyici ekleyin.
src/main/java/com/example/demo/DemoApplication.java
package com.example.demo;
...
// Add imports
import org.springframework.web.bind.annotation.*;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
// Add the controller.
@RestController
class HelloWorldController {
@GetMapping("/")
public String hello() {
return "hello world!";
}
}
7. Uygulamayı yerel olarak çalıştırma
- JAVA_HOME'un doğru JDK sürümüne ayarlandığından emin olun:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
- Spring Boot uygulamasını Spring Boot eklentisiyle başlatabilirsiniz:
$ ./mvnw -DskipTests spring-boot:run
- Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi'ni
tıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

Tarayıcınızda bir sekme açılır ve başlattığınız sunucuya bağlanır.

8. Uygulamayı App Engine'e dağıtma
- Öncelikle, App Engine uygulamalarını çalıştırabilmek için projeyi başlatın. Ayrıca, projenin ABD'nin merkezi bölgesinde çalışacak şekilde başlatılması gerekir.
$ gcloud app create --region us-central You are creating an app for project [...]. WARNING: Creating an App Engine application for a project is irreversible and the region cannot be changed. More information about regions is at https://cloud.google.com/appengine/docs/locations
- Ardından,
mvn appengine:deploykomutunu çalıştırarak uygulamanızı App Engine standart ortamına dağıtın.
$ ./mvnw -DskipTests package appengine:deploy ... first time deploy may take a couple of minutes
- Uygulama dağıtıldıktan sonra web tarayıcınızda http://<project-id>.appspot.com adresini açarak uygulamayı ziyaret edebilir veya Cloud Shell'de aşağıdaki komutu kullanabilirsiniz:
$ gcloud app browse ... [It may print out the URL for your app]
9. Temizleme
App Engine uygulamasını silemezsiniz ancak devre dışı bırakabilirsiniz.
Google Cloud Console'da App Engine ve Settings'a gidip Disable Application'ı seçin:

Alternatif olarak, projenin tamamını silebilirsiniz:
$ gcloud projects delete YOUR-PROJECT-ID
10. Tebrikler
İlk App Engine web uygulamanızı yazmayı öğrendiniz.