GOOGLE CLOUD PLATFORM CHO NGƯỜI MỚI BẮT ĐẦU (PHẦN 3 - App Engine )

Back-end with Google App Engine and Java | by Ajeet Meena | Medium

Google App Engine và thách thức deploy Back-End Server

Google App Engine (GAE) là một nền tảng giúp deploy Back End Server. Đại khái nó như 1 cái server bình thường, nhưng thay vì phải config đủ thứ thứ môi trường để chạy được một cái app BE, thì GAE nó đã config sẵn. Các ngôn ngữ support bao gồm: Python, Java, Node.js, Go, Ruby, PHP, or .NET. Đi kèm với đó thì GAE cung cấp hai sự lựa chọn môi trường cho người dùng, bao gồm standard environmentflex environment. Để hiểu rõ về sự khác nhau, ae tham khảo link này https://cloud.google.com/appengine/docs/the-appengine-environments

Cơ bản nhất, dùng standard thì nó rẻ hơn flex nhưng về độ phản hồi request thì flex ngon hơn, tiền nào của nấy :)).

EDIT - 14/05/20: Flex nó tốn tiền rất nhiều, google nó tính tiền hour/instance

Nói sơ về mặt cấu trúc, GAE bao gồm những tầng: Service, Version, Instance. Mỗi service thì có nhiều version, mỗi version thì lại có nhiều instance. Nhờ vậy mà GAE hỗ trợ rất tốt về versioning, load balancing


Tiếp theo là hướng dẫn deploy BE lên GAE,


Đầu tiên để kết nối được với Google Cloud Platform ae cài Google Cloud SDK https://cloud.google.com/sdk/docs/downloads-versioned-archives

Tải về, unzip và đặt ở Home

Tiến hành khởi tạo và chọn project mặc định để tương tác https://cloud.google.com/sdk/docs/quickstart-macos#initialize_the_sdk


Xong phần config trên máy local. Tiến hành config trong project BE để có thể deploy











Bước 1: Mở project BE, tạo thư mục appenginefile app.yaml. Lưu ý appengine phải cùng level với thư mục java



File app.yaml chính là nơi khai báo config các thuộc tính khi deploy app lên GAE như: ngôn ngữ compiler, môi trường flex hay standard, bộ nhớ sử dụng…

Với môi trường flex thì nhập như sau

runtime: java

env: flex

Với môi trường standard thì config

runtime: java11

env: standard

instance_class: F4_1G

handlers:

 - url: .*

   script: auto

automatic_scaling:

 min_idle_instances: 1

 max_idle_instances: automatic

 min_pending_latency: automatic

 max_pending_latency: automatic

network: {}

inbound_services:

- warmup


Bước 2: Mở file pom.xml thêm vào plugin sau, phần version thì nhập gì cũng được:

<plugin>

   <groupId>com.google.cloud.tools</groupId>

   <artifactId>appengine-maven-plugin</artifactId>

   <version>1.3.2</version>

   <configuration>

       <version>2324d324</version>

   </configuration>

</plugin>

Plugin này trợ giúp việc deploy app dễ dàng, chỉ cần nhấn nút. 


Bước 4: Cũng trong pom.xml, thêm dependency để config kết nối SQL Cloud

Thêm tag 

<dependencyManagement>

  <dependencies>

     <dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-gcp-dependencies</artifactId>

        <version>1.2.2.RELEASE</version>

        <type>pom</type>

        <scope>import</scope>

     </dependency>

  </dependencies>

</dependencyManagement>

<dependency>

  <groupId>org.springframework.cloud</groupId>

  <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>

</dependency>


Bước 5: Config SQL Cloud

Đối với Spring Boot, ae vào application.properties thêm 2 thuộc tính

spring.cloud.gcp.sql.instance-connection-name=telapp-274804:us-central1:telapp

spring.cloud.gcp.sql.database-name=telapp_db


Thì ở đâu cần khai báo tên instance (như đã đề cập ở phần trên) và tên db muốn trỏ vào. Còn username, password vẫn xài như bình thường, ví dụ:

Lưu ý: Ngoài lề 1 tí là port khi deploy thì luôn luôn bắt buộc là 8080

EDIT BƯỚC 5: mysql-connector-java dùng bản > 8.0.20


Bước 6: Thêm dependency sau để tránh lỗi java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

<dependency>

  <groupId>javax.xml.bind</groupId>

  <artifactId>jaxb-api</artifactId>

  <version>2.3.1</version>

</dependency>



Bước 7:

Tới đầy thì xong phần config, hãy đảm bảo code khi chạy local bình thường, không lỗi lầm gì :)). Trước tiên hãy thử với môi trường flex trước

Như đã nói ở bước Bước 2, ae mở Maven lên, tìm tới plugin appengine -> appengine:deploy và nhấn Run.



Cơ bản quá trình deploy là: Đầu tiên nó sẽ build thành file .war/.jar sau đó nó copy file app.yaml cùng file war đó quăng vào target/appengine-staging. Cuối cùng nó chạy lệnh gcloud app deploy, nếu không xài plugin, ae làm thủ công cũng được


Quá trình deploy với flex environment chạy khá lâu, chắc tầm 10 phút. Standard thì nhanh hơn, tầm 1 phút. Vẫn chưa hiểu tại sao có sự khác biệt này.

Comments