Phát triển InsideLoop bằng cách sử dụng máy trạm trên đám mây với NodeJS

1. Tổng quan

Phòng thí nghiệm này trình bày các tính năng và chức năng được thiết kế để đơn giản hoá quy trình phát triển dành cho các kỹ sư phần mềm được giao nhiệm vụ phát triển các ứng dụng NodeJS trong môi trường vùng chứa. Thông thường, quá trình phát triển vùng chứa yêu cầu người dùng hiểu thông tin chi tiết về vùng chứa và quy trình xây dựng vùng chứa. Ngoài ra, các nhà phát triển thường phải ngắt luồng của mình, rời khỏi IDE để kiểm thử và gỡ lỗi ứng dụng trong môi trường từ xa. Với các công cụ và công nghệ được đề cập trong hướng dẫn này, nhà phát triển có thể làm việc hiệu quả với các ứng dụng trong vùng chứa mà không cần rời khỏi IDE của họ.

Kiến thức bạn sẽ học được

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu các phương pháp phát triển bằng vùng chứa trong Google Cloud, bao gồm:

  • Tạo ứng dụng Nodejs khởi đầu
  • Định cấu hình ứng dụng Nodejs để phát triển vùng chứa
  • Lập trình một Dịch vụ nghỉ ngơi CRUD đơn giản
  • Triển khai cho GKE
  • Gỡ lỗi trạng thái lỗi
  • Sử dụng điểm ngắt / nhật ký
  • Các thay đổi về quy trình triển khai nóng quay lại GKE
  • Không bắt buộc: Tích hợp CloudSQL để lưu trữ cố định phần phụ trợ

58a4cdd3ed7a123a.pngS

2. Thiết lập và yêu cầu

Thiết lập môi trường theo tiến độ riêng

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
  • Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử phương pháp của riêng mình và xem có được cung cấp hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Khởi động Cloudshell Editor

Phòng thí nghiệm này được thiết kế và thử nghiệm để sử dụng với Google Cloud Shell Editor. Để truy cập vào trình chỉnh sửa,

  1. truy cập vào dự án google của bạn tại https://console.cloud.google.com.
  2. Ở góc trên cùng bên phải, hãy nhấp vào biểu tượng trình chỉnh sửa vỏ đám mây

8560cc8d45e8c112.pngS

  1. Một ngăn mới sẽ mở ra ở cuối cửa sổ
  2. Nhấp vào nút Open Editor (Mở trình chỉnh sửa)

9e504cb98a6a8005.pngS

  1. Trình chỉnh sửa sẽ mở ra cùng với một trình khám phá ở bên phải và trình chỉnh sửa ở khu vực trung tâm
  2. Ngăn thiết bị đầu cuối cũng sẽ xuất hiện ở cuối màn hình
  3. Nếu cửa sổ dòng lệnh KHÔNG mở, hãy sử dụng tổ hợp phím "ctrl+" để mở cửa sổ dòng lệnh mới

Thiết lập gcloud

Trong Cloud Shell, hãy đặt mã dự án và khu vực mà bạn muốn triển khai ứng dụng. Hãy lưu các biến này dưới dạng biến PROJECT_IDREGION.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Cung cấp cơ sở hạ tầng dùng trong phòng thí nghiệm này

Trong phòng thí nghiệm này, bạn sẽ triển khai mã cho GKE và truy cập vào dữ liệu được lưu trữ trong cơ sở dữ liệu CloudSQL. Tập lệnh thiết lập dưới đây chuẩn bị cơ sở hạ tầng này cho bạn.

  1. Tải tập lệnh thiết lập xuống và làm cho tập lệnh đó có thể thực thi.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. Mở tệp setup_with_cw.sh và chỉnh sửa giá trị của mật khẩu hiện được đặt thành CHANGEME
  2. Chạy tập lệnh thiết lập để duy trì cụm GKE và cơ sở dữ liệu CloudSQL mà bạn sẽ sử dụng trong phòng thí nghiệm này
./setup_with_cw.sh &

Cụm Cloud Workstation

  1. Mở Cloud Workstations trong Cloud Console. Chờ cụm ở trạng thái READY.

305e1a3d63ac7ff6.pngS

Tạo cấu hình máy trạm

  1. Nếu phiên Cloud Shell của bạn bị ngắt kết nối, hãy nhấp vào "Kết nối lại" rồi chạy lệnh gcloud cli để đặt mã dự án. Thay thế mã dự án mẫu bên dưới bằng mã dự án qwiklabs của bạn trước khi chạy lệnh.
gcloud config set project qwiklabs-gcp-project-id
  1. Tải xuống và chạy tập lệnh bên dưới trong cửa sổ dòng lệnh để tạo cấu hình Cloud Workstation.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. Xác minh kết quả trong phần Cấu hình. Sẽ mất 2 phút để chuyển sang trạng thái SẴN SÀNG.

c8f0b8662fdb827e.png

  1. Mở Cloud Workstations trong Console rồi tạo phiên bản mới.

a53adeeac81a78c8.png

  1. Đổi tên thành my-workstation và chọn cấu hình hiện có: codeoss-js.

675d83f30c1319df.png.

  1. Xác minh kết quả trong phần Workstations (Máy trạm).

bf67586e6695852.png

Khởi chạy máy trạm

  1. Khởi động và khởi chạy máy trạm. Sẽ mất vài phút để khởi động Máy trạm.

a9ad54f4b4b668e9.png

  1. Cho phép cookie của bên thứ ba bằng cách nhấp vào biểu tượng trên thanh địa chỉ. 1b8923e2943f9bc4.pngs

fcf9405b6957b7d7.png

  1. Nhấp vào "Trang web không hoạt động?".

36a84c0e2e3b85b.png.

  1. Nhấp vào "Allow cookies" (Cho phép cookie).

2259694328628fba.png.

  1. Sau khi máy trạm chạy, bạn sẽ thấy IDE Mã OSS xuất hiện. Nhấp vào "Đánh dấu là đã xong" trên trang Bắt đầu một, IDE máy trạm

94874fba9b74cc22.pngs

3. Tạo ứng dụng khởi đầu Nodejs mới

Trong phần này, bạn sẽ tạo một ứng dụng Nodejs mới.

  1. Mở một cửa sổ dòng lệnh mới.

c31d48f2e4938c38.png

  1. Trong Cloud Shell, hãy tạo một thư mục mới có tên là mynodejsapp
mkdir mynodejsapp

Nhấp vào nút Cho phép nếu bạn thấy thông báo này để bạn có thể sao chép và dán vào máy trạm.

58149777e5cc350a.pngS

  1. Thay đổi sang thư mục này và mở thư mục này dưới dạng một không gian làm việc. Thao tác này sẽ tải lại trình chỉnh sửa bằng cách tạo một cấu hình không gian làm việc trong thư mục mới tạo.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
  1. Mở lại thiết bị đầu cuối mới. Dùng NVM để cài đặt Nút và TLD.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

4. Tạo ứng dụng khởi đầu mới

  1. Khởi chạy ứng dụng

Tạo tệp package.json bằng cách chạy lệnh sau

npm init
    Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. Thêm điểm truy cập

Mở và chỉnh sửa tệp package.json trong IDE để thêm lệnh bắt đầu vào tập lệnh "start": "node src/index.js",. Sau khi thay đổi, các tập lệnh sẽ trông giống như đoạn mã dưới đây:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. Thêm phần phụ thuộc Express

Mã chúng ta sẽ thêm vào cũng sử dụng express. Vì vậy, hãy thêm phần phụ thuộc đó vào tệp package.json này. Vì vậy, sau tất cả các thay đổi, tệp package.json sẽ có dạng như dưới đây.

{
 "name": "mynodejsapp",
 "version": "1.0.0",
 "description": "",
 "main": "src/index.js",
 "scripts": {
   "start": "node src/index.js",
   "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
   "express": "^4.17.3"
 }
}
  1. Tạo tệp chỉ mục.js

Tạo thư mục nguồn có tên là src bằng cách chọn Thư mục mới trong chế độ xem trình khám phá.

eb507d48f283ce46.png

Tạo tệp src/index.js

3e3e6e6062e501fc.png.

bằng mã sau

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

Lưu ý rằng PORT được đặt thành giá trị 8080

Tạo tệp kê khai

Skaffold cung cấp các công cụ tích hợp để đơn giản hoá việc phát triển vùng chứa. Ở bước này, bạn sẽ khởi chạy Skaffold. Thao tác này sẽ tự động tạo các tệp YAML kubernetes cơ sở. Thực thi lệnh dưới đây để bắt đầu quy trình.

Thực thi lệnh sau trong dòng lệnh

skaffold init --generate-manifests

Khi được nhắc:

  • Nhập 8080 cho cổng
  • Nhập y để lưu cấu hình

Hai tệp được thêm vào không gian làm việc viz, skaffold.yamldeployment.yaml

Cập nhật tên ứng dụng

Các giá trị mặc định có trong cấu hình hiện không khớp với tên ứng dụng của bạn. Cập nhật các tệp để tham chiếu tên ứng dụng của bạn thay vì các giá trị mặc định.

  1. Thay đổi các mục trong cấu hình Skaffold
  • Mở skaffold.yaml
  • Chọn tên hình ảnh hiện được đặt là package-json-image
  • Nhấp chuột phải rồi chọn Thay đổi tất cả lần xuất hiện
  • Nhập tên mới là mynodejsapp
  1. Thay đổi các mục trong cấu hình Kubernetes
  • Mở tệp deployment.yaml
  • Chọn tên hình ảnh hiện được đặt là package-json-image
  • Nhấp chuột phải rồi chọn Thay đổi tất cả lần xuất hiện
  • Nhập tên mới là mynodejsapp

Xin lưu ý rằng trong tệp skaffold.yaml, phần build sử dụng buildpacks để chứa ứng dụng. Mã này không có Dockerfile và nhà phát triển không cần có kiến thức về docker để chứa ứng dụng này.

Ngoài ra, tính năng đồng bộ hoá nóng được tự động bật giữa trình chỉnh sửa và vùng chứa đang chạy theo cấu hình skaffold này. Không cần cấu hình bổ sung để bật tính năng đồng bộ hoá nóng.

5. Tìm hiểu về quá trình phát triển

Trong phần này, bạn sẽ tìm hiểu một số bước sử dụng trình bổ trợ Mã đám mây để tìm hiểu các quy trình cơ bản, cũng như để xác thực cấu hình và chế độ thiết lập ứng dụng khởi đầu.

Cloud Code tích hợp với skaffold để đơn giản hoá quy trình phát triển của bạn. Khi bạn triển khai GKE ở các bước sau, Cloud Code và Skaffold sẽ tự động tạo hình ảnh vùng chứa của bạn, đẩy hình ảnh vùng chứa đó vào Container Registry, sau đó triển khai ứng dụng của bạn lên GKE. Quá trình này xảy ra trong nền, trừu tượng chi tiết khỏi quy trình của nhà phát triển. Cloud Code cũng giúp cải thiện quá trình phát triển bằng cách cung cấp các chức năng gỡ lỗi và đồng bộ hoá nóng truyền thống cho hoạt động phát triển dựa trên vùng chứa.

Đăng nhập vào Google Cloud

  1. Nhấp vào biểu tượng Mã đám mây rồi chọn "Đăng nhập vào Google Cloud":

1769afd39be372ff.pngS

  1. Nhấp vào "Tiếp tục để đăng nhập".

923bb1c8f63160f9.pngS

  1. Kiểm tra kết quả trong dòng lệnh và mở đường liên kết:

517fdd579c34aa21.pngS

  1. Đăng nhập bằng thông tin đăng nhập của sinh viên trên Qwiklabs.

db99b345f7a8e72c.png

  1. Chọn "Cho phép":

a5376553c430ac84.png

  1. Sao chép mã xác minh rồi quay lại thẻ Máy trạm.

6719421277b92eac.png.

  1. Dán mã xác minh rồi nhấn Enter.

e9847cfe3fa8a2ce.png

Thêm cụm Kubernetes

  1. Thêm một cụm

62a3b97bdbb427e5.pngs

  1. Chọn Google Kubernetes Engine:

9577de423568bbaa.pngS

  1. Chọn dự án.

c5202fcbeebcd41c.png

  1. Chọn "mycluster" được tạo ở bước thiết lập ban đầu.

33863e94d1c5045f.png.

  1. Giờ đây, cụm đó sẽ xuất hiện trong danh sách cụm Kubernetes trong Cloud Code. Điều hướng và khám phá cụm từ đây.

7e5f50662d4eea3c.png.

Đặt mã dự án hiện tại bằng gcloud cli

  1. Sao chép mã dự án của phòng thí nghiệm này từ trang qwiklabs.

fcff2d10007ec5bc.png

  1. Trên cửa sổ dòng lệnh, hãy chạy lệnh gcloud cli để đặt mã dự án. Hãy thay thế mã dự án mẫu trước khi chạy lệnh. SUBSTITUTE mã dự án trước khi chạy lệnh bên dưới.
gcloud config set project qwiklabs-gcp-project-id

Triển khai cho Kubernetes

  1. Trong ngăn ở cuối Cloud Shell Editor, hãy chọn Cloud Code ‡

c5dd5a749136407b.png

  1. Trong bảng điều khiển xuất hiện ở trên cùng trong phần PHIÊN PHÁT TRIỂN, hãy chọn Run on Kubernetes (Chạy trên Kubernetes). Nếu được nhắc, hãy chọn Có để sử dụng ngữ cảnh Kubernetes hiện tại.

7da53b9480e8eb0d.png.

  1. Trong lần đầu tiên bạn chạy lệnh, một lời nhắc sẽ xuất hiện ở đầu màn hình và hỏi xem bạn có muốn sử dụng bối cảnh kubernetes hiện tại hay không. Hãy chọn "Yes" (Có) để chấp nhận và sử dụng ngữ cảnh hiện tại.

a6e58a7f0d117391.png

  1. Tiếp theo, một lời nhắc sẽ xuất hiện hỏi xem bạn nên dùng sổ đăng ký vùng chứa nào. Nhấn phím Enter để chấp nhận giá trị mặc định được cung cấp

13236a26c8dbe84f.pngS

  1. Chọn thẻ Output (Kết quả) trong ngăn phía dưới rồi chọn Kubernetes: Run/Debug (Chạy/Gỡ lỗi) trong trình đơn thả xuống để xem tiến trình và thông báo

606ff9cdebc03dff.png.

  1. Chọn "Kubernetes: Chạy/Gỡ lỗi – Chi tiết" trong trình đơn thả xuống ở bên phải của kênh để xem thêm thông tin chi tiết và nhật ký phát trực tiếp từ các vùng chứa

ab45d2574f4f2478.png

  1. Quay lại chế độ xem đơn giản bằng cách chọn "Kubernetes: Chạy/Gỡ lỗi" trong trình đơn thả xuống
  2. Khi quá trình tạo và kiểm thử hoàn tất, thẻ Đầu ra sẽ cho biết: Resource deployment/mynodejsapp status completed successfully, và một URL có trong danh sách: "Được chuyển tiếp URL từ ứng dụng minh hoạ dịch vụ: http://localhost:8080"
  3. Trong cửa sổ dòng lệnh Mã đám mây, hãy di chuột qua URL trong dữ liệu đầu ra (http://localhost:8080), sau đó chọn Theo đường liên kết trong công cụ xuất hiện.

Câu trả lời sẽ là:

{"message":"Greetings from Node"}

Tải lại nhanh

  1. Chuyển đến src/index.js. Chỉnh sửa mã của tin nhắn chào mừng thành 'Hello from Node'

Lưu ý ngay rằng trong cửa sổ Output, khung hiển thị Kubernetes: Run/Debug, trình theo dõi sẽ đồng bộ hoá các tệp đã cập nhật với vùng chứa trong Kubernetes

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. Nếu chuyển sang chế độ xem Kubernetes: Run/Debug - Detailed, bạn sẽ thấy chế độ này nhận ra các thay đổi đối với tệp và khởi động lại nút
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. Làm mới trình duyệt của bạn để xem kết quả được cập nhật.

Gỡ lỗi

  1. Chuyển đến chế độ xem Debug (Gỡ lỗi) và dừng luồng hiện tại 647213126d7a4c7b.pngS.
  2. Nhấp vào Cloud Code ở trình đơn dưới cùng rồi chọn Debug on Kubernetes để chạy ứng dụng ở chế độ debug.

dbd0c6cfd9e9d0e9.png

  • Trong khung hiển thị Kubernetes Run/Debug - Detailed của cửa sổ Output, hãy lưu ý rằng skaffold sẽ triển khai ứng dụng này ở chế độ gỡ lỗi.
  • Sẽ mất vài phút để xây dựng và triển khai ứng dụng. Lần này, bạn sẽ thấy một trình gỡ lỗi được đính kèm.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. Thanh trạng thái ở dưới cùng thay đổi màu từ màu xanh dương sang màu cam cho biết đang ở chế độ Gỡ lỗi.

d1224f12cd659995.png

  1. Trong khung hiển thị Kubernetes Run/Debug, lưu ý rằng vùng chứa có thể Gỡ lỗi đã được bắt đầu
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

Khai thác các điểm ngắt

  1. Mở src/index.js
  2. Tìm câu lệnh có nội dung var message="Hello from Node";
  3. Thêm điểm ngắt vào dòng đó bằng cách nhấp vào khoảng trống ở bên trái số dòng. Một chỉ báo màu đỏ sẽ xuất hiện để ghi chú điểm ngắt đã được đặt
  4. Tải lại trình duyệt và lưu ý rằng trình gỡ lỗi sẽ dừng quá trình này tại điểm ngắt và cho phép bạn điều tra các biến cũng như trạng thái của ứng dụng đang chạy từ xa trong GKE
  5. Nhấp vào mục biến cho đến khi bạn thấy biến "message".
  6. Thực thi dòng bằng cách nhấn Bước qua 7cfdee4fd6ef5c3a.png.
  7. Quan sát giá trị hiện tại của biến "message" thay đổi thành "Hello from Node"
  8. Nhấp đúp vào tên biến "mục tiêu" và trong cửa sổ bật lên, hãy thay đổi giá trị thành giá trị khác như "Hi from Node"
  9. Nhấp vào nút Tiếp tục trong bảng điều khiển gỡ lỗi
  10. Xem lại phản hồi trong trình duyệt để hiện giá trị được cập nhật mà bạn vừa nhập.
  11. Dừng "Gỡ lỗi" bằng cách nhấn nút dừng 647213126d7a4c7b.pngS và xoá điểm ngắt bằng cách nhấp lại vào điểm ngắt đó.

6. Phát triển một dịch vụ nghỉ ngơi CRUD đơn giản

Tại thời điểm này, ứng dụng của bạn đã được định cấu hình đầy đủ để phát triển theo vùng chứa và bạn đã tìm hiểu quy trình phát triển cơ bản bằng Cloud Code. Trong các phần sau, bạn sẽ thực hành nội dung đã học bằng cách thêm điểm cuối của dịch vụ Kiến trúc chuyển trạng thái đại diện (REST) để kết nối với một cơ sở dữ liệu được quản lý trong Google Cloud.

Định cấu hình phần phụ thuộc

Mã xử lý ứng dụng dùng cơ sở dữ liệu để lưu trữ dữ liệu dịch vụ còn lại. Đảm bảo các phần phụ thuộc đều có sẵn bằng cách thêm nội dung sau đây vào tệp package.json

  1. Thêm 2 phần phụ thuộc khác là pgsequelize vào tệp package.json để tạo ứng dụng CRUD Postgres. Đăng các thay đổi, phần phụ thuộc sẽ có dạng như sau.
    "dependencies": {
    "express": "^4.17.3",
    "pg": "^8.8.0",
    "sequelize": "^6.25.7"
  }

Viết mã cho dịch vụ REST

  1. Thêm mã xử lý ứng dụng CRUD vào ứng dụng này
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

Mã này có

  • thư mục models có mô hình thực thể cho item
  • thư mục controllers (bộ điều khiển) chứa mã thực hiện các hoạt động CRUD
  • tuyến định tuyến các mẫu URL cụ thể đến các lệnh gọi khác nhau
  • thư mục config có thông tin chi tiết về khả năng kết nối cơ sở dữ liệu
  1. Lưu ý rằng cấu hình cơ sở dữ liệu trong tệp db.config.js đề cập đến các biến môi trường cần được cung cấp để kết nối với cơ sở dữ liệu. Ngoài ra, bạn cần phân tích cú pháp yêu cầu được gửi đến để mã hoá URL.
  2. Thêm đoạn mã sau vào src/index.js để có thể kết nối với mã CRUD từ tệp javascript chính của bạn ngay trước phần cuối cùng bắt đầu bằng app.listen(PORT, () => {
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. Chỉnh sửa hoạt động triển khai trong tệp deployment.yaml để thêm các biến môi trường nhằm cung cấp thông tin về khả năng kết nối với cơ sở dữ liệu.

Cập nhật mục thông số kỹ thuật ở cuối tệp để khớp với định nghĩa sau

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. Thay thế giá trị DB_HOST bằng địa chỉ của Cơ sở dữ liệu của bạn
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

Triển khai và xác thực ứng dụng

  1. Trong ngăn ở cuối Cloud Shell Editor, chọn Cloud Code rồi chọn Debug on Kubernetes ở đầu màn hình.
  2. Khi quá trình tạo và kiểm thử hoàn tất, thẻ Đầu ra sẽ cho biết: Resource deployment/mynodejsapp status completed successfully và một URL được liệt kê: "Được chuyển tiếp URL từ dịch vụ mynodejsapp: http://localhost:8080"
  3. Thêm một vài mục.

Trên Cloudshell Terminal, hãy chạy các lệnh dưới đây

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. Kiểm tra GET bằng cách chạy $URL/items trong trình duyệt. Bạn cũng có thể chạy curl từ dòng lệnh
curl -X GET $URL/items
  1. Kiểm thử Xoá: Bây giờ, hãy thử xoá một mục bằng cách chạy lệnh bên dưới. Thay đổi giá trị của item-id nếu cần.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

Xác định và khắc phục vấn đề

  1. Ứng dụng đang chạy ở chế độ Gỡ lỗi. Vì vậy, hãy sử dụng các điểm ngắt để tìm vấn đề. Dưới đây là một số mẹo:
  • Chúng ta biết đã xảy ra lỗi với DELETE vì thành phần này không trả về kết quả mong muốn. Vì vậy, bạn cần đặt điểm ngắt trong phương thức itemcontroller.js->exports.delete.
  • Chạy thực thi từng bước và theo dõi các biến ở mỗi bước để quan sát giá trị của các biến cục bộ trong cửa sổ bên trái.
  • Để quan sát các giá trị cụ thể, chẳng hạn như request.params, hãy thêm biến này vào Cửa sổ xem.
  1. Lưu ý rằng giá trị được gán cho idundefined. Hãy thay đổi mã để khắc phục vấn đề.

Đoạn mã cố định sẽ có dạng như sau.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. Sau khi ứng dụng được khởi động lại, hãy kiểm tra lại bằng cách cố gắng xoá.
  2. Dừng phiên gỡ lỗi bằng cách nhấp vào hình vuông màu đỏ trên thanh công cụ gỡ lỗi 647213126d7a4c7b.pngS

7. Dọn dẹp

Xin chúc mừng! Trong phòng thí nghiệm này, bạn đã tạo một ứng dụng Nodejs mới từ đầu và định cấu hình để ứng dụng đó hoạt động ở chế độ triển khai nóng với các vùng chứa. Sau đó, bạn đã triển khai và gỡ lỗi ứng dụng cho một cụm GKE từ xa theo cùng một quy trình dành cho nhà phát triển trong các ngăn xếp ứng dụng truyền thống.

Cách làm sạch sau khi hoàn thành phòng thí nghiệm:

  1. Xoá các tệp được sử dụng trong phòng thí nghiệm
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. Xoá dự án để xoá tất cả cơ sở hạ tầng và tài nguyên có liên quan