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

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

2. Kurulum ve şartlar

Yönlendirmesiz ortam kurulumu

  1. 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.

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. 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_ID olarak 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.
  1. 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

  1. Cloud Console'da Cloud Shell'i etkinleştir 'i 853e55310c205094.png 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 ekran gösterildiyse Devam'ı tıklayın.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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.

  1. 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`
  1. 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

  1. Uygulamayı App Engine standart ortamına dağıtmak için yeni bir src/main/appengine/app.yaml tanımlayı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ü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

  1. JAVA_HOME'un 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.png tı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, 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
  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://<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:

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