1. Tổng quan
Loạt lớp học lập trình này (hướng dẫn thực hành theo tốc độ của riêng bạn) nhằm mục đích giúp các nhà phát triển Google App Engine (Chuẩn) hiện đại hoá ứng dụng của họ bằng cách hướng dẫn họ thực hiện một loạt quy trình di chuyển. Sau khi hoàn tất, người dùng có thể làm cho ứng dụng của họ dễ dàng di chuyển hơn bằng cách tạo vùng chứa một cách rõ ràng cho Cloud Run, dịch vụ lưu trữ vùng chứa tương tự như App Engine của Google Cloud và các dịch vụ lưu trữ vùng chứa khác.
Hướng dẫn này sẽ hướng dẫn bạn cách tạo vùng chứa cho các ứng dụng App Engine để triển khai vào dịch vụ được quản lý hoàn toàn của Cloud Run bằng cách sử dụng Cloud Buildpacks (một giải pháp thay thế cho Docker). Cloud Buildpacks chứa các ứng dụng của bạn mà không cần quản lý các tệp Dockerfile hoặc thậm chí không cần biết gì về Docker.
Lớp học lập trình này dành cho những nhà phát triển App Engine Python 2 đã di chuyển ứng dụng của họ khỏi các dịch vụ tích hợp ban đầu và chuyển chúng sang Python 3, đồng thời hiện đang tìm cách chạy các ứng dụng đó trong một vùng chứa. Lớp học lập trình này BẮT ĐẦU bằng một ứng dụng Python 3 đã hoàn thành của Mô-đun 2 hoặc Mô-đun 3.
Bạn sẽ tìm hiểu cách
- Tạo vùng chứa cho ứng dụng bằng Cloud Buildpacks
- Triển khai hình ảnh vùng chứa lên Cloud Run
Bạn cần có
- Một dự án Google Cloud Platform có:
- Kỹ năng cơ bản về Python
- Có kiến thức cơ bản về các lệnh Linux thường dùng
- Kiến thức cơ bản về cách phát triển và triển khai các ứng dụng App Engine
- Bạn nên hoàn thành một (hoặc cả hai) lớp học lập trình Mô-đun 2 hoặc Mô-đun 3, bao gồm cả việc chuyển chúng sang Python 3, trước khi bắt đầu lớp học lập trình này (Mô-đun 5).
- Một ứng dụng Python 3 App Engine đang hoạt động và sẵn sàng được đóng gói vào vùng chứa
Bản khảo sát
Bạn sẽ sử dụng lớp học lập trình này như thế nào?
2. Thông tin khái quát
Các hệ thống PaaS như App Engine và Cloud Functions mang lại nhiều tiện ích cho nhóm và ứng dụng của bạn. Ví dụ: các nền tảng không máy chủ này cho phép quản trị viên hệ thống/DevOps tập trung vào việc xây dựng các giải pháp. Ứng dụng của bạn có thể tự động mở rộng quy mô khi cần, giảm quy mô xuống 0 với tính năng thanh toán theo mức sử dụng giúp kiểm soát chi phí và sử dụng nhiều ngôn ngữ phát triển phổ biến.
Tuy nhiên, tính linh hoạt của các vùng chứa cũng rất hấp dẫn, khả năng chọn bất kỳ ngôn ngữ, thư viện, tệp nhị phân nào. Google Cloud Run mang đến cho người dùng cả sự tiện lợi của công nghệ không máy chủ và tính linh hoạt của vùng chứa.
Tìm hiểu cách sử dụng Cloud Run không thuộc phạm vi của lớp học lập trình này; nội dung đó được đề cập trong tài liệu về Cloud Run. Mục tiêu ở đây là giúp bạn biết cách tạo vùng chứa cho ứng dụng App Engine để chạy trên Cloud Run (hoặc các dịch vụ khác). Có một vài điều bạn nên biết trước khi tiếp tục, chủ yếu là trải nghiệm người dùng của bạn sẽ hơi khác một chút, ở cấp độ thấp hơn vì bạn sẽ không còn lấy mã xử lý ứng dụng và triển khai mã đó nữa.
Thay vào đó, bạn cần tìm hiểu một số điều về các vùng chứa, chẳng hạn như cách tạo và triển khai chúng. Bạn cũng có thể quyết định nội dung muốn đưa vào hình ảnh vùng chứa, bao gồm cả máy chủ web vì bạn sẽ không dùng máy chủ web của App Engine nữa. Nếu bạn không muốn đi theo hướng này, thì việc giữ các ứng dụng của bạn trên App Engine cũng không phải là một lựa chọn tồi.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo vùng chứa cho ứng dụng, xoá các tệp cấu hình App Engine, quản lý một máy chủ web, bao gồm cả cách khởi động ứng dụng.
Quá trình di chuyển này có các bước sau:
- Thiết lập/Công việc chuẩn bị
- Ứng dụng vùng chứa
- Thay thế tệp cấu hình
- Sửa đổi tệp ứng dụng
3. Thiết lập/Công việc chuẩn bị
Trước khi bắt đầu phần chính của hướng dẫn, hãy thiết lập dự án, lấy mã nguồn rồi triển khai ứng dụng cơ sở để đảm bảo chúng ta bắt đầu bằng mã nguồn hoạt động.
1. Thiết lập dự án
Nếu đã hoàn thành lớp học lập trình Mô-đun 2 hoặc Mô-đun 3, bạn nên sử dụng lại chính dự án (và mã) đó. Ngoài ra, bạn có thể tạo một dự án hoàn toàn mới hoặc sử dụng lại một dự án hiện có khác. Đảm bảo dự án có một tài khoản thanh toán đang hoạt động và App Engine (ứng dụng) được bật.
2. Tải ứng dụng mẫu cơ sở
Một trong những điều kiện tiên quyết để tham gia lớp học lập trình này là bạn phải có một ứng dụng mẫu đang hoạt động trong Mô-đun 2 hoặc 3. Nếu không có, bạn nên hoàn thành một trong hai hướng dẫn (các đường liên kết ở trên) trước khi tiếp tục. Nếu đã quen thuộc với nội dung của các thư mục này, bạn có thể bắt đầu bằng cách lấy một trong các thư mục mã bên dưới.
Cho dù bạn sử dụng tài khoản của mình hay của chúng tôi, đó là nơi hướng dẫn này BẮT ĐẦU. Lớp học lập trình này sẽ hướng dẫn bạn quy trình di chuyển và khi bạn hoàn tất, nội dung này sẽ chủ yếu khớp với nội dung trong thư mục kho lưu trữ Module 5 FINISH.
- BẮT ĐẦU:
- Cloud NDB: Mã mô-đun 2
- Cloud Datastore: Mã mô-đun 3
- HOÀN TẤT: Mã mô-đun 5
- Toàn bộ kho lưu trữ (để sao chép hoặc tải tệp ZIP xuống)
Thư mục của các tệp START (của bạn hoặc của chúng tôi) sẽ có dạng như sau:
$ ls
README.md main.py templates
app.yaml requirements.txt
3. (Triển khai lại) Ứng dụng cơ sở
Các bước chuẩn bị còn lại mà bạn cần thực hiện ngay:
- Làm quen lại với công cụ dòng lệnh
gcloud - Triển khai lại ứng dụng mẫu bằng
gcloud app deploy - Xác nhận rằng ứng dụng chạy trên App Engine mà không gặp vấn đề
Sau khi thực hiện thành công các bước đó, bạn đã sẵn sàng để đóng gói ứng dụng.
4. Đóng gói ứng dụng vào vùng chứa
Docker là nền tảng tiêu chuẩn để tạo vùng chứa trong ngành hiện nay. Như đã đề cập trước đó, một thách thức khi sử dụng công cụ này là bạn cần nỗ lực để tuyển chọn một Dockerfile hiệu quả, tức là tệp cấu hình xác định cách tạo hình ảnh vùng chứa. Mặt khác, Buildpack không đòi hỏi nhiều công sức vì sử dụng tính năng tự kiểm tra để xác định các phần phụ thuộc của ứng dụng, giúp vùng chứa Buildpack hoạt động hiệu quả nhất có thể cho ứng dụng của bạn.
Bạn đã đến đúng nơi nếu muốn bỏ qua việc tìm hiểu về Docker và muốn tạo vùng chứa cho ứng dụng App Engine để chạy trên Cloud Run hoặc bất kỳ nền tảng lưu trữ vùng chứa nào khác. Nếu muốn tìm hiểu cách sử dụng Docker để tạo vùng chứa ứng dụng, bạn có thể làm lớp học lập trình Mô-đun 4 sau khi hoàn thành lớp học lập trình này. Nó giống hệt với hướng dẫn này, nhưng sử dụng Docker để giúp bạn hiểu rõ hơn về cách quản lý hình ảnh vùng chứa.
Các bước di chuyển bao gồm thay thế tệp cấu hình App Engine và chỉ định cách ứng dụng của bạn sẽ khởi động. Dưới đây là bảng tóm tắt các tệp cấu hình dự kiến cho từng loại nền tảng. So sánh cột App Engine với cột Buildpacks (và Docker nếu có):
Nội dung mô tả | App Engine | Docker | Buildpack |
Cấu hình chung |
|
| ( |
Thư viện của bên thứ ba |
|
|
|
Cấu hình của bên thứ ba |
| (không áp dụng) | (không áp dụng) |
Khởi động | (không áp dụng) hoặc |
|
|
Bỏ qua tệp |
|
|
|
Sau khi được đóng gói vào vùng chứa, ứng dụng của bạn có thể được triển khai đến Cloud Run. Các lựa chọn khác về nền tảng vùng chứa của Google Cloud bao gồm Compute Engine, GKE và Anthos.
Cấu hình chung
App Engine tự động khởi động ứng dụng của bạn, nhưng Cloud Run thì không. Procfile đóng vai trò tương tự như chỉ thị app.yaml entrypoint. Đối với ứng dụng mẫu của chúng tôi, Procfile sẽ thực thi python main.py để khởi động máy chủ phát triển Flask. Bạn cũng có thể sử dụng một máy chủ web sản xuất như gunicorn nếu muốn. Nếu sử dụng, hãy nhớ thêm máy chủ đó vào requirements.txt. Tìm hiểu thêm về cách triển khai từ mã nguồn bằng cách sử dụng Buildpack trên trang tài liệu này của Cloud Run.
Bạn chỉ cần di chuyển chỉ thị app.yaml entrypoint vào Procfile. Nếu bạn chưa có, hãy sử dụng máy chủ phát triển Flask ngay bây giờ vì đây chỉ là một ứng dụng kiểm thử mẫu để giúp người dùng làm quen với quá trình di chuyển này. Ứng dụng của bạn sẽ là một lệnh khởi động cụ thể mà bạn biết rõ nhất. Về cơ bản, dịch vụ Cloud Run sẽ tạo một service.yaml có vẻ ngoài/hành động giống như một app.yaml. Bạn có thể xem service.yaml được tạo tự động bằng cách truy cập vào một đường liên kết như thế này nhưng dành cho dịch vụ SVC_NAME và REGION của bạn: https://console.cloud.google.com/run/detail/REGION/SVC_NAME/yaml/view.
Thư viện của bên thứ ba
Bạn không cần thay đổi tệp requirements.txt; Flask sẽ có mặt cùng với thư viện ứng dụng Datastore (Cloud Datastore hoặc Cloud NDB). Nếu bạn muốn sử dụng một máy chủ HTTP tuân thủ WSGI khác như Gunicorn (phiên bản hiện tại tại thời điểm viết bài này là 20.0.4), hãy thêm gunicorn==20.0.4 vào requirements.txt.
Cấu hình của bên thứ ba
Buildpacks không hỗ trợ Python 2, vì vậy chúng ta sẽ không thảo luận về vấn đề đó ở đây. Các ứng dụng Python 3 chạy trong vùng chứa trên Cloud Run tương tự như các ứng dụng Python 3 App Engine ở chỗ bạn phải chỉ định các thư viện của bên thứ ba trong requirements.txt.
Khởi động
Người dùng Python 3 có thể chuyển đổi các tệp app.yaml để có entrypoint thay vì chỉ thị script: auto trong phần handlers. Nếu bạn sử dụng entrypoint trong app.yaml Python 3, thì mã này sẽ có dạng như sau:
runtime: python38
entrypoint: python main.py
Chỉ thị entrypoint cho App Engine biết cách khởi động máy chủ của bạn. Bạn có thể di chuyển tệp đó gần như trực tiếp vào Procfile. Tóm tắt vị trí của chỉ thị điểm truy cập giữa cả hai nền tảng: Điều này chuyển đổi trực tiếp sang nội dung bên dưới; đồng thời cho thấy tương đương của Docker như một thông tin tham khảo:
- Buildpack: dòng trong
Procfile:web: python main.py - Docker: dòng trong
Dockerfile:ENTRYPOINT ["python", "main.py"]
Để kiểm thử và dàn dựng, bạn chỉ cần chạy máy chủ phát triển của Flask từ Python như chúng ta đã làm ở trên. Tuy nhiên, nhà phát triển có thể chọn một giải pháp mạnh mẽ hơn cho quá trình sản xuất, chẳng hạn như mẫu Cloud Run Quickstart sử dụng gunicorn.
Tệp ứng dụng
Tất cả các ứng dụng trong Mô-đun 2 hoặc Mô-đun 3 đều hoàn toàn tương thích với Python 2-3, tức là không có thay đổi nào đối với các thành phần cốt lõi của main.py; chúng ta sẽ chỉ thêm một vài dòng mã khởi động. Thêm một cặp dòng ở cuối main.py để khởi động máy chủ phát triển vì Cloud Run yêu cầu mở cổng 8080 để có thể gọi ứng dụng của bạn:
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
5. Xây dựng và triển khai
Sau khi thay thế cấu hình App Engine bằng Buildpack và hoàn tất việc cập nhật tệp nguồn, bạn đã sẵn sàng chạy cấu hình đó trên Cloud Run. Trước đó, hãy cùng thảo luận nhanh về các dịch vụ.
Dịch vụ so với ứng dụng
Mặc dù App Engine được tạo ra chủ yếu để lưu trữ các ứng dụng, nhưng đây cũng là một nền tảng để lưu trữ các dịch vụ hoặc ứng dụng web được tạo thành từ một tập hợp các vi dịch vụ. Trong Cloud Run, mọi thứ đều là một dịch vụ, cho dù đó là một dịch vụ thực tế hay một ứng dụng có giao diện web. Vì vậy, hãy cân nhắc việc sử dụng Cloud Run như một hoạt động triển khai dịch vụ thay vì một ứng dụng.
Trừ phi ứng dụng App Engine của bạn được tạo thành từ nhiều dịch vụ, nếu không bạn thực sự không cần phải đặt tên khi triển khai ứng dụng. Điều này thay đổi với Cloud Run, nơi bạn cần đưa ra một tên dịch vụ. Trong khi đó, miền appspot.com của App Engine có mã dự án, ví dụ: https://PROJECT_ID.appspot.com và có thể là chữ viết tắt mã khu vực, ví dụ: http://PROJECT_ID.REGION_ID.r.appspot.com.
Tuy nhiên, miền cho một dịch vụ Cloud Run có tên dịch vụ, chữ viết tắt mã khu vực và một hàm băm, nhưng không có mã dự án, ví dụ: https://SVC_NAME-HASH-REG_ABBR.a.run.app. Tóm lại, hãy bắt đầu nghĩ đến tên dịch vụ!
Triển khai dịch vụ
Thực thi lệnh bên dưới để tạo hình ảnh vùng chứa và triển khai đến Cloud Run. Khi được nhắc, hãy chọn khu vực của bạn và cho phép các kết nối chưa xác thực để dễ dàng kiểm thử hơn, đồng thời chọn khu vực của bạn cho phù hợp, trong đó SVC_NAME là tên của dịch vụ mà bạn đang triển khai.
$ gcloud run deploy SVC_NAME --source . Please choose a target platform: [1] Cloud Run (fully managed) [2] Cloud Run for Anthos deployed on Google Cloud [3] Cloud Run for Anthos deployed on VMware [4] cancel Please enter your numeric choice: 1 To specify the platform yourself, pass `--platform managed`. Or, to make this the default target platform, run `gcloud config set run/platform managed`. Please specify a region: [1] asia-east1 [2] asia-east2 [3] asia-northeast1 [4] asia-northeast2 [5] asia-northeast3 [6] asia-south1 [7] asia-southeast1 [8] asia-southeast2 [9] australia-southeast1 [10] europe-north1 [11] europe-west1 [12] europe-west2 [13] europe-west3 [14] europe-west4 [15] europe-west6 [16] northamerica-northeast1 [17] southamerica-east1 [18] us-central1 [19] us-east1 [20] us-east4 [21] us-west1 [22] us-west2 [23] us-west3 [24] us-west4 [25] cancel Please enter your numeric choice: <select your numeric region choice> To make this the default region, run `gcloud config set run/region REGION`. Allow unauthenticated invocations to [SVC_NAME] (y/N)? y Building using Buildpacks and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... ✓ Routing traffic... Done. Service [SVC_NAME] revision [SVC_NAME-00014-soc] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
Truy cập vào URL được chỉ định bằng trình duyệt để xác nhận rằng quá trình triển khai đã thành công!
Như lệnh gcloud cho biết, người dùng có thể đặt nhiều chế độ cài đặt mặc định để giảm đầu ra và khả năng tương tác như minh hoạ ở trên. Ví dụ: để tránh mọi hoạt động tương tác, bạn có thể sử dụng lệnh triển khai một dòng sau đây:
$ gcloud beta run deploy SVC_NAME --source . --platform managed --region REGION --allow-unauthenticated
Nếu bạn sử dụng dịch vụ này, hãy nhớ chọn cùng tên dịch vụ SVC_NAME và REGION tên mong muốn, chứ không phải lựa chọn trong trình đơn được lập chỉ mục như chúng ta đã thực hiện một cách tương tác ở trên.
6. Tóm tắt/Dọn dẹp
Xác nhận rằng ứng dụng hoạt động trên Cloud Run giống như trên App Engine. Nếu bạn bắt đầu tham gia loạt bài này mà chưa thực hiện bất kỳ lớp học lập trình nào trước đó, thì bản thân ứng dụng sẽ không thay đổi; ứng dụng này sẽ đăng ký tất cả lượt truy cập vào trang web chính (/) và trông như thế này sau khi bạn truy cập vào trang web đủ số lần:

Mã của bạn bây giờ sẽ khớp với mã trong thư mục kho lưu trữ Mô-đun 5. Chúc mừng bạn đã hoàn thành lớp học lập trình Mô-đun 5 này.
Không bắt buộc: Dọn dẹp
Bạn có thể dọn dẹp để tránh bị tính phí cho đến khi sẵn sàng chuyển sang lớp học lập trình di chuyển tiếp theo. Vì hiện tại bạn đang sử dụng một sản phẩm khác, hãy nhớ xem hướng dẫn định giá Cloud Run.
Không bắt buộc: Tắt dịch vụ
Nếu bạn chưa sẵn sàng chuyển sang hướng dẫn tiếp theo, hãy tắt dịch vụ để tránh bị tính thêm phí. Khi đã sẵn sàng chuyển sang lớp học lập trình tiếp theo, bạn có thể bật lại tính năng này. Khi ứng dụng của bạn bị vô hiệu hoá, ứng dụng sẽ không nhận được lưu lượng truy cập nào để phát sinh phí. Tuy nhiên, một khoản phí khác mà bạn có thể phải trả là mức sử dụng Datastore nếu mức này vượt quá hạn mức miễn phí. Vì vậy, hãy xoá đủ để giảm xuống dưới hạn mức đó.
Mặt khác, nếu không muốn tiếp tục di chuyển và muốn xoá hoàn toàn mọi thứ, bạn có thể xoá dịch vụ hoặc tắt hoàn toàn dự án.
Các bước tiếp theo
Xin chúc mừng, bạn đã tạo vùng chứa cho ứng dụng của mình. Đến đây là kết thúc hướng dẫn này! Từ đây, bước tiếp theo là tìm hiểu cách thực hiện việc tương tự bằng Docker trong lớp học lập trình Mô-đun 4 (đường liên kết bên dưới) hoặc thực hiện một quy trình di chuyển App Engine khác:
- Mô-đun 4: Di chuyển sang Cloud Run bằng Docker
- Đóng gói ứng dụng của bạn vào vùng chứa để chạy trên Cloud Run bằng Docker
- Cho phép bạn tiếp tục sử dụng Python 2
- Module 7: App Engine Push Task Queues (bắt buộc nếu bạn sử dụng Task Queues [push])
- Thêm các tác vụ đẩy
taskqueuecủa App Engine vào ứng dụng Mô-đun 1 - Chuẩn bị cho người dùng di chuyển sang Cloud Tasks trong Mô-đun 8
- Thêm các tác vụ đẩy
- Phụ lục 3:
- Hiện đại hoá quyền truy cập vào Datastore từ Cloud NDB sang Cloud Datastore
- Đây là thư viện dùng cho các ứng dụng Python 3 App Engine và các ứng dụng không phải App Engine
- Module 6: Di chuyển sang Cloud Firestore
- Di chuyển sang Cloud Firestore để sử dụng các tính năng của Firebase
- Mặc dù Cloud Firestore hỗ trợ Python 2, nhưng lớp học lập trình này chỉ có trong Python 3.
7. Tài nguyên khác
Vấn đề/ý kiến phản hồi về lớp học lập trình mô-đun di chuyển App Engine
Nếu bạn gặp vấn đề với lớp học lập trình này, vui lòng tìm kiếm vấn đề của bạn trước khi báo cáo. Đường liên kết để tìm kiếm và tạo vấn đề mới:
- Trình theo dõi vấn đề cho các lớp học lập trình về việc di chuyển App Engine
Tài nguyên di chuyển
Bạn có thể tìm thấy đường liên kết đến các thư mục kho lưu trữ cho Mô-đun 2 và 3 (BẮT ĐẦU) và Mô-đun 5 (KẾT THÚC) trong bảng bên dưới. Bạn cũng có thể truy cập vào các tệp này từ kho lưu trữ cho tất cả các hoạt động di chuyển codelab App Engine. Bạn có thể sao chép hoặc tải tệp ZIP xuống.
Lớp học lập trình | Python 2 | Python 3 |
(mã) | ||
(mã) | ||
Module 5 | (không áp dụng) |
Tài nguyên App Engine và Cloud Run
Dưới đây là các tài nguyên khác liên quan đến quá trình di chuyển cụ thể này:
- Vùng chứa
- Chung