App Engine standart ortamına Spring Boot uygulaması dağıtma

1. Başlamadan önce

App Engine uygulamalarını oluşturmak ve bakımı kolay olmasının yanı sıra trafik ve veri depolama ihtiyaçlarınız değiştikçe kolayca ölçeklendirilebilir. App Engine'de bakım gerektiren bir sunucu yoktur. Kullanıma hazır hale getirmek için uygulamanızı yüklemeniz yeterli.

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, trafiği bölme, günlük kaydı, arama, sürüm oluşturma, kullanıma sunma ve geri alma işlemleri ile güvenlik taramasının tümü yerel olarak desteklenir ve büyük ölçüde özelleştirilebilir.

App Engine standart ortamı ve App Engine esnek ortamı; Java, Python, PHP, NodeJS ve Go gibi bir dizi programlama dilini destekler. Bu iki ortam, geliştiricilere uygulamalarının davranışı konusunda maksimum esneklik sağlar. Her ortamın belirli güçlü yanları vardır. Daha fazla bilgi için App Engine ortamı seçme bölümüne bakın.

Bir Spring Boot uygulaması uygulamasını App Engine standart ortamına dağıtmayı öğreneceksiniz. Standart ortam, kimse kullanmadığında sıfır örneğine ölçeklendirilir ve otomatik olarak yukarı ölçeklenir.

Ön koşullar

  • Java programlama dili ve araçları hakkında bilgi
  • Vim, Emacs ve nano gibi standart Linux metin düzenleyicileri hakkında bilgi

Yapacaklarınız

  • App Engine'de Spring Boot Java uygulaması oluşturma

Gerekenler

2. Kurulum ve şartlar

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle PROJECT_ID olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden 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

  1. Cloud Console'da, Cloud Shell'i etkinleştir 853e55310c205094.png simgesini tıklayın.

55efc1aaa7a4d3ad.png

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

9c92662c6a846a5c.png

Temel hazırlık ve Cloud Shell'e bağlanmak yalnızca birkaç dakika sürer.

9f0e51b578fecce5.png

Gereken tüm geliştirme araçları bu sanal makinede 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. Bu codelab'deki çalışmalarınızın tamamı olmasa bile büyük bir kısmı tarayıcıyla yapılabilir.

Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin proje kimliğinize ayarlandığını göreceksiniz.

  1. Kimlik doğrulamanızın tamamlandığını onaylamak için Cloud Shell'de aşağıdaki 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`
  1. gcloud komutunun projenizi bildiğini onaylamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud config list project

Komut çıkışı

[core]
project = <PROJECT_ID>

Doğru değilse aşağıdaki 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üncelleyin

Java sunucu uygulamalarını dağıtmanın iki yolu vardır: Maven App Engine Plugin ya da Gradle App Engine Plugin kullanarak ya da war paket dizinini dağıtarak. Uygulamayı dağıtmak için Maven App Engine Plugin kullanacaksınız.

Maven App Engine Eklentisini Ekle

pom.xml uygulamasını, dağıtım sürecini basitleştiren bir Google Cloud eklentisi içerecek şekilde 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ı ekleyin

  1. Uygulamayı App Engine standart ortamına dağıtmak için yeni bir src/main/appengine/app.yaml açıklayıcı dosyası oluşturmanız gerekir.
$ mkdir -p src/main/appengine/
$ touch src/main/appengine/app.yaml
  1. src/main/appengine/app.yaml dosyasını düzenleyerek aşağıdaki içeriği ekleyin:

src/main/appengine/app.yaml

runtime: java17
instance_class: F1

6. Denetleyici ekleyin

DemoApplication.java içinde "hello world!" değerini döndüren yeni bir kumanda 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

  1. JAVA_HOME öğesinin doğru JDK sürümüne ayarlandığından emin olun:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
  1. Spring Boot uygulamasını Spring Boot eklentisiyle başlatabilirsiniz:
$ ./mvnw -DskipTests spring-boot:run
  1. Uygulama başladıktan sonra Cloud Shell araç çubuğunda Web Önizlemesi'ni 1a94d5bd10bfc072.pngtıklayın ve 8080 bağlantı noktasında önizle'yi seçin.

3aca52f76c6c22a3.png

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

7b0d8494f647822a.png

8. Uygulamayı App Engine'e dağıtma

  1. Öncelikle, App Engine uygulamalarını çalıştırabilmek için projeyi başlatın. Ayrıca projeyi ABD'nin orta bölgesinde çalışacak şekilde başlatın.
$ 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
  1. Ardından mvn appengine:deploy komutunu ç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
  1. Uygulama dağıtıldıktan sonra web tarayıcınızda http://<proje-kimliği>.appspot.com sayfasını açarak veya Cloud Shell'de aşağıdaki komutu kullanarak uygulamayı ziyaret edebilirsiniz:
$ gcloud app browse
... [It may print out the URL for your app]

9. Temizleme

Bir App Engine uygulamasını silemezsiniz ancak devre dışı bırakabilirsiniz.

Google Cloud Console'da App Engine ve Settings bölümlerine gidip Disable Application öğesini seçin:

8052c1e4ad73d70e.png

Alternatif olarak projenin tamamını silebilirsiniz:

$ gcloud projects delete YOUR-PROJECT-ID

10. Tebrikler

İlk App Engine web uygulamanızı yazmayı öğrendiniz.

Daha fazla bilgi