GOOGLE CLOUD PLATFORM CHO NGƯỜI MỚI BẮT ĐẦU (PHẦN 3 - App Engine )
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 environment và flex 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 appengine và file 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>
Và
<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
Post a Comment