1. Tổng quan
Loạt lớp học lập trình Serverless Migration Station (hướng dẫn thực hành theo tốc độ của riêng bạn) và các video liên quan nhằm giúp các nhà phát triển Google Cloud không máy chủ hiện đại hoá các ứng dụng của họ bằng cách hướng dẫn họ thực hiện một hoặc nhiều quy trình di chuyển, chủ yếu là chuyển từ các dịch vụ cũ. Làm như vậy sẽ giúp ứng dụng của bạn dễ dàng di chuyển hơn, đồng thời mang đến cho bạn nhiều lựa chọn và sự linh hoạt hơn, cho phép bạn tích hợp và truy cập vào nhiều sản phẩm trên đám mây hơn, cũng như dễ dàng nâng cấp lên các bản phát hành ngôn ngữ mới hơn. Mặc dù ban đầu tập trung vào những người dùng Cloud sớm nhất, chủ yếu là các nhà phát triển App Engine (môi trường tiêu chuẩn), nhưng loạt bài này đủ rộng để bao gồm các nền tảng không máy chủ khác như Cloud Functions và Cloud Run, hoặc ở những nơi khác nếu có thể.
Mục đích của lớp học lập trình này là hướng dẫn các nhà phát triển App Engine Python 2 cách di chuyển từ App Engine Memcache sang Cloud Memorystore (cho Redis). Ngoài ra, còn có một quy trình di chuyển ngầm từ App Engine ndb sang Cloud NDB, nhưng quy trình này chủ yếu được đề cập trong lớp học lập trình Mô-đun 2; hãy xem lớp học lập trình này để biết thêm thông tin từng bước.
Bạn sẽ tìm hiểu cách
- Thiết lập một phiên bản Cloud Memorystore (từ Cloud Console hoặc công cụ
gcloud) - Thiết lập một trình kết nối cho phép truy cập vào VPC không máy chủ trên đám mây (từ Cloud Console hoặc công cụ
gcloud) - Di chuyển từ Memcache của App Engine sang Cloud Memorystore
- Triển khai chức năng lưu vào bộ nhớ đệm bằng Cloud Memorystore trong một ứng dụng mẫu
- Di chuyển từ App Engine
ndbsang Cloud NDB
Bạn cần có
- Một dự án trên Google Cloud có tài khoản thanh toán đang hoạt động (đây không phải là một lớp học lập trình miễn phí)
- 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
- Một ứng dụng App Engine hoạt động trong Mô-đun 12 (hoàn thành lớp học lập trình Mô-đun 12 [nên dùng] hoặc sao chép ứng dụng Mô-đun 12 từ kho lưu trữ)
Khảo sát
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình với Python?
Bạn đánh giá thế nào về trải nghiệm khi sử dụng các dịch vụ của Google Cloud?
2. Thông tin khái quát
Lớp học lập trình này minh hoạ cách di chuyển một ứng dụng mẫu từ App Engine Memcache (và NDB) sang Cloud Memorystore (và Cloud NDB). Quá trình này bao gồm việc thay thế các phần phụ thuộc trên các dịch vụ đi kèm của App Engine, giúp ứng dụng của bạn dễ dàng di chuyển hơn. Bạn có thể chọn tiếp tục sử dụng App Engine hoặc cân nhắc chuyển sang bất kỳ lựa chọn thay thế nào được mô tả trước đó.
Quá trình di chuyển này đòi hỏi nhiều công sức hơn so với các quá trình di chuyển khác trong loạt bài này. Giải pháp thay thế được đề xuất cho Memcache của App Engine là Cloud Memorystore, một dịch vụ lưu vào bộ nhớ đệm trên đám mây được quản lý toàn diện. Memorystore hỗ trợ một cặp công cụ lưu vào bộ nhớ đệm nguồn mở phổ biến là Redis và Memcached. Mô-đun di chuyển này sử dụng Cloud Memorystore for Redis. Bạn có thể tìm hiểu thêm trong phần Tổng quan về Memorystore và Redis.
Vì Memorystore yêu cầu một máy chủ đang chạy, nên bạn cũng cần có Cloud VPC. Cụ thể, bạn phải tạo một trình kết nối cho phép truy cập VPC không máy chủ để ứng dụng App Engine có thể kết nối với phiên bản Memorystore thông qua địa chỉ IP riêng tư của phiên bản đó. Khi hoàn tất bài tập này, bạn sẽ cập nhật ứng dụng để ứng dụng hoạt động như trước đây, nhưng Cloud Memorystore sẽ là dịch vụ lưu vào bộ nhớ đệm, thay thế dịch vụ Memcache của App Engine.
Hướng dẫn này bắt đầu bằng ứng dụng mẫu Mô-đun 12 trong Python 2, sau đó là một bản nâng cấp nhỏ, không bắt buộc lên Python 3. Nếu đã quen với việc truy cập vào các dịch vụ đi kèm của App Engine từ Python 3 thông qua SDK App Engine Python 3, bạn có thể bắt đầu bằng phiên bản Python 3 của ứng dụng mẫu Mô-đun 12. Việc này sẽ kéo theo việc xoá việc sử dụng SDK vì Memorystore không phải là một dịch vụ đi kèm của App Engine. Hướng dẫn này không đề cập đến cách sử dụng SDK App Engine cho Python 3.
Hướng dẫn này có các bước chính sau:
- Thiết lập/công việc chuẩn bị
- Thiết lập dịch vụ lưu vào bộ nhớ đệm
- Cập nhật tệp cấu hình
- Cập nhật ứng dụng chính
3. Thiết lập/công việc chuẩn bị
Chuẩn bị dự án trên đám mây
Bạn nên sử dụng lại dự án mà bạn đã dùng để hoàn thành lớp học lập trình Mô-đun 12. 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ỗi lớp học lập trình trong loạt lớp học lập trình này đều có một "START" (mã cơ sở để bắt đầu) và một "FINISH" (ứng dụng đã di chuyển). Mã FINISH được cung cấp để bạn có thể so sánh giải pháp của mình với giải pháp của chúng tôi trong trường hợp bạn gặp vấn đề. Bạn luôn có thể khôi phục để BẮT ĐẦU lại nếu có sự cố. Những điểm kiểm tra này được thiết kế để đảm bảo bạn học được cách thực hiện quy trình di chuyển.
Dù bạn sử dụng dự án nào trên Cloud, hãy nhớ đảm bảo dự án đó có một tài khoản thanh toán đang hoạt động. Ngoài ra, hãy đảm bảo rằng bạn đã bật App Engine. Hãy xem xét và đảm bảo bạn hiểu rõ những tác động chung về chi phí khi thực hiện các hướng dẫn này. Tuy nhiên, không giống như những lớp học lập trình khác trong loạt lớp học này, lớp học lập trình này sử dụng các tài nguyên trên đám mây không có gói miễn phí, vì vậy, bạn sẽ phải trả một khoản phí để hoàn thành bài tập. Thông tin cụ thể hơn về chi phí sẽ được cung cấp cùng với các đề xuất về việc giảm mức sử dụng, bao gồm cả hướng dẫn ở cuối về cách giải phóng tài nguyên để giảm thiểu phí thanh toán.
Tải ứng dụng mẫu cơ sở
Từ mã Mô-đun 12 cơ sở mà chúng ta sẽ BẮT ĐẦU, lớp học lập trình này sẽ hướng dẫn bạn từng bước trong quá trình di chuyển. Khi hoàn tất, bạn sẽ có một ứng dụng Module 13 hoạt động và có mã gần giống với mã trong một trong các thư mục FINISH. Sau đây là những tài nguyên đó:
- BẮT ĐẦU: Mô-đun 12 Python 2 (
mod12) hoặc ứng dụng Python 3 (mod12b) - HOÀN TẤT: Module 13 Python 2 (
mod13a) hoặc ứng dụng Python 3 (mod13b) - Toàn bộ kho lưu trữ di chuyển (sao chép hoặc tải tệp ZIP xuống)
Thư mục START phải chứa các tệp sau:
$ ls README.md app.yaml main.py requirements.txt templates
Nếu bạn bắt đầu từ phiên bản Python 2, thì cũng sẽ có một tệp appengine_config.py và có thể là một thư mục lib nếu bạn đã hoàn thành lớp học lập trình Mô-đun 12.
(Triển khai lại) Ứng dụng Mô-đun 12
Các bước chuẩn bị còn lại:
- Làm quen lại với công cụ dòng lệnh
gcloud(nếu cần) - (Triển khai lại) mã Mô-đun 12 vào App Engine (nếu cần)
Người dùng Python 2 nên xoá và cài đặt lại thư mục lib bằng các lệnh sau:
rm -rf ./lib; pip install -t lib -r requirements.txt
Giờ đây, mọi người (người dùng Python 2 và 3) đều có thể tải mã lên App Engine bằng lệnh sau:
gcloud app deploy
Sau khi triển khai thành công, hãy xác nhận rằng ứng dụng có giao diện và chức năng giống như ứng dụng trong Mô-đun 12, một ứng dụng web theo dõi lượt truy cập và lưu vào bộ nhớ đệm cho cùng một người dùng trong một giờ:

Vì các lượt truy cập gần đây nhất được lưu vào bộ nhớ đệm, nên các lượt làm mới trang sẽ tải khá nhanh.
4. Thiết lập dịch vụ lưu vào bộ nhớ đệm
Cloud Memorystore không phải là dịch vụ không máy chủ. Bạn phải có một phiên bản; trong trường hợp này là một phiên bản Redis đang chạy. Không giống như Memcache, Memorystore là một sản phẩm độc lập trên Cloud và không có bậc miễn phí, vì vậy, hãy nhớ kiểm tra thông tin về giá của Memorystore cho Redis trước khi tiếp tục. Để giảm thiểu chi phí cho hoạt động này, bạn nên sử dụng ít tài nguyên nhất có thể: một cấp dịch vụ Cơ bản và dung lượng 1 GB.
Phiên bản Memorystore nằm trên một mạng khác với ứng dụng App Engine (các phiên bản) của bạn. Đó là lý do bạn phải tạo một trình kết nối Truy cập VPC không máy chủ để App Engine có thể truy cập vào các tài nguyên Memorystore của bạn. Để giảm thiểu chi phí VPC, hãy chọn loại phiên bản (f1-micro) và số lượng phiên bản yêu cầu ít nhất (chúng tôi đề xuất tối thiểu là 2, tối đa là 3). Bạn cũng có thể xem trang thông tin về giá của VPC.
Chúng tôi sẽ nhắc lại những đề xuất này để giảm chi phí khi hướng dẫn bạn tạo từng tài nguyên bắt buộc. Ngoài ra, khi tạo tài nguyên Memorystore và VPC trong Cloud Console, bạn sẽ thấy máy tính giá cho từng sản phẩm ở góc trên bên phải, giúp bạn ước tính chi phí hằng tháng (xem hình minh hoạ bên dưới). Những giá trị đó sẽ tự động điều chỉnh nếu bạn thay đổi các lựa chọn. Đây là nội dung bạn sẽ thấy:

Bạn phải tạo cả hai tài nguyên này và không quan trọng việc bạn tạo tài nguyên nào trước. Nếu bạn tạo phiên bản Memorystore trước, ứng dụng App Engine sẽ không thể truy cập vào phiên bản đó nếu không có trình kết nối VPC. Tương tự, nếu bạn tạo trình kết nối VPC trước, thì sẽ không có gì trên mạng VPC đó để ứng dụng App Engine của bạn giao tiếp. Trong hướng dẫn này, bạn sẽ tạo phiên bản Memorystore trước, sau đó là trình kết nối VPC.
Sau khi cả hai tài nguyên đều trực tuyến, bạn sẽ thêm thông tin liên quan vào app.yaml để ứng dụng có thể truy cập vào bộ nhớ đệm. Bạn cũng có thể tham khảo hướng dẫn về Python 2 hoặc Python 3 trong tài liệu chính thức. Bạn cũng nên tham khảo hướng dẫn lưu vào bộ nhớ đệm dữ liệu trên trang di chuyển Cloud NDB ( Python 2 hoặc Python 3).
Tạo một phiên bản Cloud Memorystore
Vì Cloud Memorystore không có bậc miễn phí, nên bạn nên phân bổ ít tài nguyên nhất để hoàn thành lớp học lập trình này. Bạn có thể giảm thiểu chi phí bằng cách sử dụng các chế độ cài đặt sau:
- Chọn cấp dịch vụ thấp nhất: Cơ bản (mặc định trên bảng điều khiển: "Tiêu chuẩn", mặc định trên
gcloud: "Cơ bản"). - Chọn dung lượng lưu trữ ít nhất: 1 GB (mặc định trên bảng điều khiển: 16 GB, mặc định trên
gcloud: 1 GB). - Thông thường, phiên bản mới nhất của bất kỳ phần mềm nào cũng đòi hỏi nhiều tài nguyên nhất, nhưng bạn cũng không nên chọn phiên bản cũ nhất. Phiên bản mới thứ hai hiện tại là Phiên bản Redis 5.0 (mặc định trên bảng điều khiển: 6.x)
Với những chế độ cài đặt đó, phần tiếp theo sẽ hướng dẫn bạn cách tạo phiên bản từ Cloud Console. Nếu bạn muốn thực hiện việc này từ dòng lệnh, hãy chuyển sang bước tiếp theo.
Trên Cloud Console
Chuyển đến trang Cloud Memorystore trong Cloud Console (bạn có thể được nhắc cung cấp thông tin thanh toán). Nếu chưa bật Memorystore, bạn sẽ được nhắc bật:

Sau khi bật (và có thể cùng với tính năng thanh toán), bạn sẽ truy cập vào trang tổng quan Memorystore. Đây là nơi bạn có thể xem tất cả các phiên bản được tạo trong dự án của mình. Dự án bên dưới không có hàng nào, đó là lý do bạn thấy thông báo "Không có hàng nào để hiển thị". Để tạo một phiên bản Memorystore, hãy nhấp vào Tạo phiên bản ở trên cùng:

Trang này có một biểu mẫu để bạn điền các chế độ cài đặt mong muốn nhằm tạo phiên bản Memorystore:

Để giảm chi phí cho hướng dẫn này và ứng dụng mẫu của hướng dẫn, hãy làm theo các đề xuất đã đề cập trước đó. Sau khi chọn xong, hãy nhấp vào Tạo. Quá trình tạo mất vài phút. Khi quá trình này hoàn tất, hãy sao chép địa chỉ IP và số cổng của phiên bản để thêm vào app.yaml.
Từ dòng lệnh
Mặc dù việc tạo các phiên bản Memorystore từ Cloud Console mang tính trực quan, nhưng một số người dùng lại thích dòng lệnh. Hãy nhớ gcloud cài đặt và khởi chạy trước khi tiếp tục.
Tương tự như Cloud Console, bạn phải bật Cloud Memorystore for Redis. Phát lệnh gcloud services enable redis.googleapis.com và đợi lệnh này hoàn tất, như ví dụ sau:
$ gcloud services enable redis.googleapis.com Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
Nếu dịch vụ đã được bật, việc chạy lệnh (lại) sẽ không gây ra tác dụng phụ (tiêu cực). Sau khi bật dịch vụ này, hãy tạo một phiên bản Memorystore. Lệnh đó có dạng như sau:
gcloud redis instances create NAME --redis-version VERSION \
--region REGION --project PROJECT_ID
Chọn tên cho phiên bản Memorystore của bạn; phòng thí nghiệm này sử dụng "demo-ms" làm tên cùng với mã dự án "my-project". Khu vực của ứng dụng mẫu này là us-central1 (giống như us-central), nhưng bạn có thể sử dụng một khu vực gần bạn hơn nếu lo ngại về độ trễ. Bạn phải chọn cùng khu vực với ứng dụng App Engine. Bạn có thể chọn bất kỳ phiên bản Redis nào mà bạn muốn, nhưng chúng ta sẽ sử dụng phiên bản 5 như đã đề xuất trước đó. Với những chế độ cài đặt đó, đây là lệnh bạn sẽ đưa ra (cùng với đầu ra liên quan):
$ gcloud redis instances create demo-ms --region us-central1 \
--redis-version redis_5_0 --project my-project
Create request issued for: [demo-ms]
Waiting for operation [projects/my-project/locations/us-central1/operations/operation-xxxx] to complete...done.
Created instance [demo-ms].
Không giống như các giá trị mặc định của Cloud Console, gcloud mặc định là tài nguyên tối thiểu. Kết quả là cả cấp dịch vụ lẫn dung lượng lưu trữ đều không bắt buộc trong lệnh đó. Quá trình tạo một phiên bản Memorystore mất vài phút. Khi hoàn tất, hãy ghi lại địa chỉ IP và số cổng của phiên bản vì chúng sẽ sớm được thêm vào app.yaml.
Xác nhận đã tạo phiên bản
Trên Cloud Console hoặc dòng lệnh
Cho dù tạo phiên bản từ Cloud Console hay dòng lệnh, bạn đều có thể xác nhận rằng phiên bản đó có sẵn và sẵn sàng sử dụng bằng lệnh sau: gcloud redis instances list --region REGION
Sau đây là lệnh kiểm tra các phiên bản trong khu vực us-central1 cùng với kết quả dự kiến cho thấy phiên bản mà chúng ta vừa tạo:
$ gcloud redis instances list --region us-central1 INSTANCE_NAME VERSION REGION TIER SIZE_GB HOST PORT NETWORK RESERVED_IP STATUS CREATE_TIME demo-ms REDIS_5_0 us-central1 BASIC 1 10.aa.bb.cc 6379 default 10.aa.bb.dd/29 READY 2022-01-28T09:24:45
Khi được yêu cầu cung cấp thông tin về phiên bản hoặc định cấu hình ứng dụng, hãy nhớ sử dụng HOST và PORT (không phải RESERVED_IP). Giờ đây, trang tổng quan Cloud Memorystore trong Cloud Console sẽ hiển thị phiên bản đó:

Từ máy ảo Compute Engine
Nếu có một máy ảo (VM) Compute Engine, bạn cũng có thể gửi các lệnh trực tiếp của phiên bản Memorystore từ một VM để xác nhận rằng phiên bản đó đang hoạt động. Xin lưu ý rằng việc sử dụng một máy ảo có thể phát sinh chi phí độc lập với các tài nguyên mà bạn đang sử dụng.
Tạo trình kết nối cho phép truy cập vào VPC không máy chủ
Tương tự như Cloud Memorystore, bạn có thể tạo trình kết nối Cloud VPC không máy chủ trong bảng điều khiển Cloud hoặc trên dòng lệnh. Tương tự, Cloud VPC không có bậc miễn phí, vì vậy, bạn nên phân bổ ít tài nguyên nhất có thể để hoàn thành lớp học lập trình nhằm giảm thiểu chi phí. Bạn có thể đạt được điều này bằng các chế độ cài đặt sau:
- Chọn số lượng phiên bản tối đa thấp nhất: 3 (bảng điều khiển và
gcloudmặc định: 10) - Chọn loại máy có chi phí thấp nhất:
f1-micro(mặc định của bảng điều khiển:e2-micro, không cógcloudmặc định)
Phần tiếp theo sẽ hướng dẫn bạn cách tạo trình kết nối từ Cloud Console bằng các chế độ cài đặt VPC trên đám mây ở trên. Nếu bạn muốn thực hiện việc này qua dòng lệnh, hãy chuyển sang phần tiếp theo.
Trên Cloud Console
Chuyển đến trang "Quyền truy cập VPC không máy chủ" của Cloud Networking trong bảng điều khiển Cloud (bạn có thể được nhắc cung cấp thông tin thanh toán). Nếu chưa bật API, bạn sẽ thấy lời nhắc bật API:

Sau khi bật API (và có thể cùng với thông tin thanh toán), bạn sẽ thấy trang tổng quan hiển thị tất cả trình kết nối VPC đã tạo. Dự án được dùng trong ảnh chụp màn hình bên dưới không có hàng nào, đó là lý do tại sao dự án này có thông báo "Không có hàng nào để hiển thị". Trong bảng điều khiển, hãy nhấp vào Create Connector (Tạo trình kết nối) ở trên cùng:

Điền chế độ cài đặt mong muốn vào biểu mẫu:

Chọn chế độ cài đặt phù hợp cho các ứng dụng của riêng bạn. Đối với hướng dẫn này và ứng dụng mẫu có nhu cầu tối thiểu, bạn nên giảm thiểu chi phí. Vì vậy, hãy làm theo các đề xuất đã đề cập trước đó. Sau khi chọn xong, hãy nhấp vào Tạo. Quá trình yêu cầu một trình kết nối VPC sẽ mất vài phút để hoàn tất.
Từ dòng lệnh
Trước khi tạo trình kết nối VPC, trước tiên, hãy bật Serverless VPC Access API. Bạn sẽ thấy kết quả tương tự sau khi phát hành lệnh sau:
$ gcloud services enable vpcaccess.googleapis.com Operation "operations/acf.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
Khi API được bật, một trình kết nối VPC sẽ được tạo bằng một lệnh có dạng như sau:
gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
--range 10.8.0.0/28 --region REGION --project PROJECT_ID
Chọn tên cho trình kết nối cũng như địa chỉ IP bắt đầu của khối CIDR /28 chưa sử dụng. Hướng dẫn này đưa ra các giả định sau:
- Mã dự án:
my-project - Tên trình kết nối VPC:
demo-vpc - Số phiên bản tối thiểu: 2 (mặc định) và số phiên bản tối đa: 3
- Loại phiên bản:
f1-micro - Khu vực:
us-central1 - Khối CIDR IPv4:
10.8.0.0/28(theo đề xuất trong bảng điều khiển đám mây)
Nếu bạn thực thi lệnh sau đây với những giả định trên, thì bạn sẽ thấy kết quả tương tự như kết quả dưới đây:
$ gcloud compute networks vpc-access connectors create demo-vpc \
--max-instances 3 --range 10.8.0.0/28 --machine-type f1-micro \
--region us-central1 --project my-project
Create request issued for: [demo-vpc]
Waiting for operation [projects/my-project/locations/us-central1/operations/xxx] to complete...done.
Created connector [demo-vpc].
Lệnh trên bỏ qua việc chỉ định các giá trị mặc định, chẳng hạn như số lượng phiên bản tối thiểu là 2 và một mạng có tên là default. Quá trình tạo một trình kết nối VPC mất vài phút để hoàn tất.
Xác nhận đã tạo trình kết nối
Sau khi quá trình này hoàn tất, hãy thực hiện lệnh gcloud sau (giả sử đó là khu vực us-central1) để xác nhận rằng bạn đã tạo và sẵn sàng sử dụng:
$ gcloud compute networks vpc-access connectors list --region us-central1 CONNECTOR_ID REGION NETWORK IP_CIDR_RANGE SUBNET SUBNET_PROJECT MIN_THROUGHPUT MAX_THROUGHPUT STATE demo-vpc us-central1 default 10.8.0.0/28 200 300 READY
Tương tự, trang tổng quan hiện sẽ hiển thị trình kết nối bạn vừa tạo:

Ghi lại mã dự án trên đám mây, tên trình kết nối VPC và khu vực.
Giờ đây, khi bạn đã tạo các tài nguyên Cloud cần thiết khác (bằng dòng lệnh hoặc trong bảng điều khiển), bạn cần cập nhật cấu hình ứng dụng để hỗ trợ việc sử dụng các tài nguyên đó.
5. Cập nhật tệp cấu hình
Bước đầu tiên là cập nhật mọi nội dung cần thiết cho các tệp cấu hình. Mục tiêu chính của lớp học lập trình này là giúp người dùng Python 2 di chuyển. Tuy nhiên, nội dung đó thường đi kèm với thông tin về quy trình chuyển đổi thêm sang Python 3 trong từng phần bên dưới.
requirements.txt
Trong phần này, chúng ta sẽ thêm các gói để hỗ trợ Cloud Memorystore cũng như Cloud NDB. Đối với Cloud Memorystore cho Redis, bạn chỉ cần sử dụng ứng dụng Redis tiêu chuẩn cho Python (redis) vì không có thư viện ứng dụng Cloud Memorystore. Thêm cả redis và google-cloud-ndb vào requirements.txt, kết hợp flask từ Phụ lục 12:
flask
redis
google-cloud-ndb
Tệp requirements.txt này không có số phiên bản, tức là các phiên bản mới nhất sẽ được chọn. Nếu có bất kỳ điểm không tương thích nào, hãy chỉ định số phiên bản để khoá các phiên bản đang hoạt động.
app.yaml
Các phần mới cần thêm
Thời gian chạy App Engine Python 2 yêu cầu các gói cụ thể của bên thứ ba khi sử dụng Cloud API như Cloud NDB, cụ thể là grpcio và setuptools. Người dùng Python 2 phải liệt kê các thư viện tích hợp như thế này cùng với một phiên bản hiện có trong app.yaml. Nếu bạn chưa có phần libraries, hãy tạo một phần và thêm cả hai thư viện như sau:
libraries:
- name: grpcio
version: latest
- name: setuptools
version: latest
Khi di chuyển ứng dụng của bạn, ứng dụng đó có thể đã có một phần libraries. Nếu có, nhưng thiếu grpcio và setuptools, bạn chỉ cần thêm chúng vào phần libraries hiện có.
Tiếp theo, ứng dụng mẫu của chúng ta cần thông tin về phiên bản Cloud Memorystore và trình kết nối VPC. Vì vậy, hãy thêm 2 phần mới sau đây vào app.yaml bất kể bạn đang dùng thời gian chạy Python nào:
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Đó là tất cả những nội dung cập nhật bắt buộc. app.yaml được cập nhật của bạn giờ đây sẽ có dạng như sau:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Dưới đây là ví dụ "trước và sau" minh hoạ những nội dung cập nhật mà bạn nên áp dụng cho app.yaml:

*Điểm khác biệt của Python 3
Đây là phần không bắt buộc và chỉ áp dụng nếu bạn đang chuyển sang Python 3. Để làm điều đó, bạn cần thực hiện một số thay đổi đối với cấu hình Python 2. Bỏ qua phần này nếu bạn không nâng cấp tại thời điểm này.
Không dùng threadsafe cũng như api_version cho thời gian chạy Python 3, vì vậy, hãy xoá cả hai chế độ cài đặt này. Thời gian chạy App Engine mới nhất không hỗ trợ các thư viện tích hợp sẵn của bên thứ ba cũng như việc sao chép các thư việnkhông tích hợp sẵn. Yêu cầu duy nhất đối với các gói của bên thứ ba là liệt kê chúng trong requirements.txt. Do đó, bạn có thể xoá toàn bộ phần libraries của app.yaml.
Tiếp theo, thời gian chạy Python 3 yêu cầu sử dụng các khung web tự định tuyến, do đó, chúng tôi đã hướng dẫn nhà phát triển cách di chuyển từ webp2 sang Flask trong Mô-đun 1. Do đó, bạn phải thay đổi tất cả trình xử lý tập lệnh thành auto. Vì ứng dụng này không phân phát bất kỳ tệp tĩnh nào, nên việc liệt kê các trình xử lý là "vô nghĩa" (vì tất cả đều là auto), nên bạn cũng có thể xoá toàn bộ phần handlers. Do đó, app.yaml mới, rút gọn được điều chỉnh cho Python 3 sẽ được rút ngắn để có dạng như sau:
runtime: python39
env_variables:
REDIS_HOST: 'YOUR_REDIS_HOST'
REDIS_PORT: 'YOUR_REDIS_PORT'
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR
Tóm tắt những điểm khác biệt trong app.yaml khi chuyển sang Python 3:
- Xoá chế độ cài đặt
threadsafevàapi_version - Xoá
librariesphần - Xoá phần
handlers(hoặc chỉ các trình xử lýscriptnếu ứng dụng của bạn phân phát tệp tĩnh)
Thay thế các giá trị
Các giá trị trong phần mới cho Memorystore và trình kết nối VPC chỉ là các giá trị giữ chỗ. Thay thế những giá trị viết hoa đó (YOUR_REDIS_HOST, YOUR_REDIS_PORT, PROJECT_ID, REGION, CONNECTOR_NAME) bằng các giá trị đã lưu khi bạn tạo những tài nguyên đó trước đó. Đối với phiên bản Memorystore, hãy nhớ sử dụng HOST (không phải RESERVED_IP) và PORT. Sau đây là cách nhanh chóng để lấy HOST và PORT bằng dòng lệnh, giả sử tên phiên bản là demo-ms và REGION là us-central1:
$ gcloud redis instances describe demo-ms --region us-central1 \
--format "value(host,port)"
10.251.161.51 6379
Nếu địa chỉ IP của phiên bản Redis mẫu là 10.10.10.10 sử dụng cổng 6379 trong dự án my-project nằm ở khu vực us-central1 với tên trình kết nối VPC là demo-vpc, thì các phần này trong app.yaml sẽ có dạng như sau:
env_variables:
REDIS_HOST: '10.10.10.10'
REDIS_PORT: '6379'
vpc_access_connector:
name: projects/my-project/locations/us-central1/connectors/demo-vpc
Tạo hoặc cập nhật appengine_config.py
Thêm tính năng hỗ trợ cho các thư viện tích hợp sẵn của bên thứ ba
Tương tự như những gì chúng ta đã làm với app.yaml trước đó, hãy thêm cách sử dụng các thư viện grpcio và setuptools. Sửa đổi appengine_config.py để hỗ trợ các thư viện tích hợp sẵn của bên thứ ba. Nếu bạn thấy quen thuộc, thì đó là vì bạn cũng phải làm việc này trong Mô-đun 2 khi di chuyển từ App Engine ndb sang Cloud NDB. Bạn cần thêm thư mục lib vào nhóm setuptools.pkg_resources đang hoạt động:

*Điểm khác biệt của Python 3
Đây là phần không bắt buộc và chỉ áp dụng nếu bạn đang chuyển sang Python 3. Một trong những thay đổi đáng chú ý của App Engine thế hệ thứ hai là bạn không cần sao chép (đôi khi được gọi là "vendoring") các gói của bên thứ ba (không phải gói tích hợp sẵn) và tham chiếu các gói của bên thứ ba tích hợp sẵn trong app.yaml nữa, tức là bạn có thể xoá toàn bộ tệp appengine_config.py.
6. Cập nhật tệp ứng dụng
Chỉ có một tệp ứng dụng, main.py, nên mọi thay đổi trong phần này chỉ ảnh hưởng đến tệp đó. Chúng tôi đã cung cấp hình ảnh minh hoạ về những thay đổi mà chúng tôi sẽ thực hiện để di chuyển ứng dụng này sang Cloud Memorystore. Hình ảnh này chỉ mang tính minh hoạ và không nhằm mục đích để bạn phân tích kỹ lưỡng. Mọi thao tác đều nằm trong những thay đổi mà chúng ta thực hiện đối với mã.

Hãy giải quyết từng phần một, bắt đầu từ phần trên cùng.
Cập nhật các lệnh nhập
Phần nhập trong main.py cho Mô-đun 12 sử dụng Cloud NDB và Cloud Tasks; sau đây là các mục nhập của chúng:
TRƯỚC:
from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb
Để chuyển sang Memorystore, bạn cần đọc các biến môi trường, tức là bạn cần mô-đun Python os cũng như redis, ứng dụng khách Python Redis. Vì Redis không thể lưu các đối tượng Python vào bộ nhớ đệm, hãy sắp xếp danh sách các lượt truy cập gần đây nhất bằng cách sử dụng pickle, vì vậy hãy nhập cả danh sách đó. Một lợi ích của Memcache là quá trình chuyển đổi tuần tự đối tượng diễn ra tự động, trong khi Memorystore có phần "tự làm" hơn. Cuối cùng, hãy nâng cấp từ App Engine ndb lên Cloud NDB bằng cách thay thế google.appengine.ext.ndb bằng google.cloud.ndb. Sau những thay đổi này, các nội dung nhập của bạn sẽ có dạng như sau:
SAU:
import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis
Cập nhật quá trình khởi tạo
Việc khởi tạo Mô-đun 12 bao gồm việc tạo bản sao cho đối tượng ứng dụng Flask app và thiết lập một hằng số cho giá trị bộ nhớ đệm trong một giờ:
TRƯỚC KHI:
app = Flask(__name__)
HOUR = 3600
Việc sử dụng Cloud API yêu cầu một ứng dụng, vì vậy, hãy tạo một phiên bản ứng dụng Cloud NDB ngay sau Flask. Tiếp theo, hãy lấy địa chỉ IP và số cổng cho phiên bản Memorystore từ các biến môi trường mà bạn đã thiết lập trong app.yaml. Với thông tin đó, hãy tạo thực thể ứng dụng Redis. Sau đây là giao diện mã của bạn sau khi cập nhật:
SAU:
app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
*Di chuyển Python 3
Phần này là không bắt buộc và chỉ dành cho những bạn bắt đầu từ phiên bản Python 3 của ứng dụng Mô-đun 12. Nếu vậy, bạn cần thực hiện một số thay đổi bắt buộc liên quan đến việc nhập và khởi tạo.
Trước tiên, vì Memcache là một dịch vụ đi kèm của App Engine, nên việc sử dụng dịch vụ này trong một ứng dụng Python 3 yêu cầu App Engine SDK, cụ thể là bao bọc ứng dụng WSGI (cũng như cấu hình cần thiết khác):
TRƯỚC:
from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb
app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600
Vì chúng tôi đang di chuyển sang Cloud Memorystore (không phải là dịch vụ đi kèm App Engine như Memcache), nên bạn phải xoá việc sử dụng SDK. Việc này rất đơn giản vì bạn chỉ cần xoá toàn bộ dòng nhập cả memcache và wrap_wsgi_app. Xoá cả dòng gọi wrap_wsgi_app(). Những nội dung cập nhật này khiến phần này của ứng dụng (thực ra là toàn bộ ứng dụng) giống hệt với phiên bản Python 2.
SAU:
import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis
app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)
Cuối cùng, hãy xoá việc sử dụng SDK khỏi app.yaml (xoá dòng: app_engine_apis: true) và requirements.txt (xoá dòng: appengine-python-standard).
Di chuyển sang Cloud Memorystore (và Cloud NDB)
Mô hình dữ liệu của Cloud NDB được thiết kế để tương thích với ndb của App Engine, tức là định nghĩa về các đối tượng Visit vẫn giữ nguyên. Mô phỏng quá trình di chuyển Mô-đun 2 sang Cloud NDB, tất cả lệnh gọi kho dữ liệu trong store_visit() và fetch_visits() đều được tăng cường và nhúng vào một khối with mới (vì bạn phải sử dụng trình quản lý bối cảnh Cloud NDB). Sau đây là những lệnh gọi trước khi có thay đổi đó:
TRƯỚC:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
Thêm một khối with ds_client.context() vào cả hai hàm và đặt các lệnh gọi Datastore vào bên trong (và thụt lề). Trong trường hợp này, bạn không cần thay đổi gì đối với chính các lệnh gọi:
SAU:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
with ds_client.context():
return Visit.query().order(-Visit.timestamp).fetch(limit)
Tiếp theo, hãy xem các thay đổi về việc lưu vào bộ nhớ đệm. Dưới đây là hàm main() trong Mô-đun 12:
TRƯỚC:
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
visits = memcache.get('visits')
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0].visitor != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
memcache.set('visits', visits, HOUR) # set() not add()
return render_template('index.html', visits=visits)
Redis có các lệnh gọi "get" và "set", giống như Memcache. Tất cả những gì chúng ta cần làm là hoán đổi các thư viện ứng dụng tương ứng, đúng không? Gần đúng rồi. Như đã đề cập trước đó, chúng ta không thể lưu vào bộ nhớ đệm danh sách Python bằng Redis (vì danh sách này cần được chuyển đổi tuần tự trước, điều mà Memcache tự động xử lý), vì vậy, trong lệnh gọi set(), hãy "pickle" các lượt truy cập thành một chuỗi bằng pickle.dumps(). Tương tự, khi truy xuất lượt truy cập từ bộ nhớ đệm, bạn cần phải huỷ chọn lượt truy cập bằng pickle.loads() ngay sau get(). Sau đây là trình xử lý chính sau khi triển khai những thay đổi đó:
SAU:
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
rsp = REDIS.get('visits')
visits = pickle.loads(rsp) if rsp else None
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0].visitor != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
REDIS.set('visits', pickle.dumps(visits), ex=HOUR)
return render_template('index.html', visits=visits)
Đến đây là kết thúc những thay đổi cần thiết trong main.py để chuyển đổi việc sử dụng Memcache của ứng dụng mẫu sang Cloud Memorystore. Còn mẫu HTML và việc chuyển sang Python 3 thì sao?
Cập nhật tệp mẫu HTML và chuyển sang Python 3?
Ngạc nhiên chưa! Bạn không cần làm gì ở đây vì ứng dụng được thiết kế để chạy trên cả Python 2 và 3 mà không cần thay đổi mã cũng như thư viện tương thích. Bạn sẽ thấy main.py. giống nhau trên các thư mục "FINISH" mod13a (2.x) và mod13b (3.x). Điều này cũng áp dụng cho requirements.txt , ngoài mọi khác biệt về số phiên bản (nếu có). Vì giao diện người dùng không thay đổi nên templates/index.html cũng không có bản cập nhật.
Mọi thứ cần thiết để chạy ứng dụng này trên App Engine Python 3 đã được hoàn tất trước đó trong quá trình định cấu hình: các chỉ thị không cần thiết đã bị xoá khỏi app.yaml và cả appengine_config.py cũng như thư mục lib đều bị xoá vì chúng không được dùng trong Python 3.
7. Tóm tắt/Dọn dẹp
Phần này kết thúc lớp học lập trình bằng cách triển khai ứng dụng, xác minh rằng ứng dụng hoạt động như dự kiến và trong mọi đầu ra được phản ánh. Sau khi xác thực ứng dụng, hãy dọn dẹp mọi thứ và cân nhắc các bước tiếp theo.
Triển khai và xác minh ứng dụng
Bước kiểm tra cuối cùng là luôn triển khai ứng dụng mẫu. Nhà phát triển Python 2: xoá và cài đặt lại lib bằng các lệnh bên dưới. (Nếu đã cài đặt cả Python 2 và 3 trên hệ thống, bạn có thể phải chạy pip2 một cách rõ ràng.)
rm -rf ./lib pip install -t lib -r requirements.txt
Giờ đây, cả nhà phát triển Python 2 và 3 đều nên triển khai ứng dụng của họ bằng:
gcloud app deploy
Vì bạn chỉ cần điều chỉnh lại các thành phần bên trong cho một dịch vụ lưu vào bộ nhớ đệm hoàn toàn khác, nên bản thân ứng dụng sẽ hoạt động giống hệt như ứng dụng trong Mô-đun 12:

Bước này hoàn tất lớp học lập trình. Bạn nên so sánh ứng dụng mẫu đã cập nhật của mình với một trong hai thư mục của Mô-đun 13, mod13a (Python 2) hoặc mod13b (Python 3).
Dọn dẹp
Giải pháp chung
Nếu đã hoàn tất, bạn nên tắt ứng dụng App Engine để tránh bị tính phí. Tuy nhiên, nếu muốn kiểm thử hoặc thử nghiệm thêm, nền tảng App Engine có một hạn mức miễn phí. Vì vậy, miễn là không vượt quá cấp sử dụng đó, bạn sẽ không bị tính phí. Đó là mức phí cho hoạt động tính toán, nhưng cũng có thể có các khoản phí cho các dịch vụ App Engine có liên quan. Vì vậy, hãy xem trang định giá của dịch vụ này để biết thêm thông tin. Nếu quá trình di chuyển này liên quan đến các dịch vụ đám mây khác, thì các dịch vụ đó sẽ được tính phí riêng. Trong cả hai trường hợp, nếu có, hãy xem phần "Cụ thể cho lớp học lập trình này" bên dưới.
Để công bố đầy đủ, việc triển khai trên một nền tảng điện toán không máy chủ của Google Cloud như App Engine sẽ phát sinh một khoản chi phí nhỏ cho việc tạo và lưu trữ. Cloud Build có hạn mức miễn phí riêng, tương tự như Cloud Storage. Việc lưu trữ hình ảnh đó sẽ chiếm một phần hạn mức. Tuy nhiên, có thể bạn sinh sống ở một khu vực không có gói miễn phí như vậy, vì vậy, hãy lưu ý đến mức sử dụng bộ nhớ để giảm thiểu chi phí phát sinh. Bạn nên xem xét các "thư mục" cụ thể trên Cloud Storage, bao gồm:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Các đường liên kết đến bộ nhớ ở trên phụ thuộc vào
PROJECT_IDvà *LOC*của bạn, ví dụ: "us" nếu ứng dụng của bạn được lưu trữ ở Hoa Kỳ.
Mặt khác, nếu bạn không tiếp tục với ứng dụng này hoặc các lớp học lập trình di chuyển có liên quan khác và muốn xoá hoàn toàn mọi thứ, hãy tắt dự án của bạn.
Cụ thể đối với lớp học lập trình này
Các dịch vụ trong danh sách dưới đây là riêng biệt đối với lớp học lập trình này. Hãy tham khảo tài liệu của từng sản phẩm để biết thêm thông tin:
- Cloud Memorystore yêu cầu các phiên bản và không có cấp miễn phí; để tìm hiểu thêm về chi phí sử dụng, hãy xem trang định giá của dịch vụ này.
- Trình kết nối cho phép truy cập VPC không máy chủ trên đám mây yêu cầu các phiên bản và không có bậc miễn phí; để tìm hiểu thêm về chi phí sử dụng, hãy xem phần này trên trang định giá Cloud VPC.
- Cloud Datastore (Cloud Firestore ở chế độ Datastore) có một cấp miễn phí; hãy xem trang định giá của dịch vụ này để biết thêm thông tin.
Hướng dẫn này liên quan đến việc sử dụng 4 sản phẩm của Cloud:
- App Engine
- Lưu trữ dữ liệu trên đám mây
- Cloud Memorystore
- VPC trên đám mây
Dưới đây là hướng dẫn để giải phóng các tài nguyên này và tránh/giảm thiểu các khoản phí thanh toán.
Tắt phiên bản Memorystore và trình kết nối VPC
Đây là những sản phẩm không có hạng dịch vụ miễn phí, vì vậy, bạn đang phải trả phí ngay bây giờ. Nếu không tắt dự án trên đám mây (xem phần tiếp theo), bạn phải xoá cả phiên bản Memorystore và trình kết nối VPC để ngừng tính phí. Tương tự như khi tạo các tài nguyên này, bạn cũng có thể phát hành chúng từ Cloud Console hoặc dòng lệnh.
Trên Cloud Console
Để xoá phiên bản Memorystore, hãy quay lại trang tổng quan Memorystore rồi nhấp vào mã nhận dạng phiên bản:

Sau khi truy cập vào trang thông tin chi tiết của phiên bản đó, hãy nhấp vào "Xoá" rồi xác nhận:
Để xoá trình kết nối VPC, hãy chuyển đến trang tổng quan của trình kết nối, chọn hộp đánh dấu bên cạnh trình kết nối mà bạn muốn xoá, sau đó nhấp vào "Xoá" rồi xác nhận:

Từ dòng lệnh
Cặp lệnh gcloud sau đây sẽ xoá cả phiên bản Memorystore và trình kết nối VPC:
gcloud redis instances delete INSTANCE --region REGIONgcloud compute networks vpc-access connectors delete CONNECTOR --region REGION
Nếu chưa đặt mã dự án bằng gcloud config set project, bạn có thể phải cung cấp --project PROJECT_ID. Nếu phiên bản Memorystore của bạn có tên là demo-ms và trình kết nối VPC có tên là demo-vpc, đồng thời cả hai đều ở khu vực us-central1, hãy phát hành cặp lệnh sau và xác nhận:
$ gcloud redis instances delete demo-ms --region us-central1 You are about to delete instance [demo-ms] in [us-central1]. Any associated data will be lost. Do you want to continue (Y/n)? Delete request issued for: [demo-ms] Waiting for operation [projects/PROJECT/locations/REGION/operations/operation-aaaaa-bbbbb-ccccc-ddddd] to complete...done. Deleted instance [demo-ms]. $ $ gcloud compute networks vpc-access connectors delete demo-vpc --region us-central1 You are about to delete connector [demo-vpc] in [us-central1]. Any associated data will be lost. Do you want to continue (Y/n)? Delete request issued for: [demo-vpc] Waiting for operation [projects/PROJECT/locations/REGION/operations/aaaaa-bbbb-cccc-dddd-eeeee] to complete...done. Deleted connector [demo-vpc].
Mỗi yêu cầu mất vài phút để chạy. Bạn không bắt buộc phải thực hiện các bước này nếu chọn tắt toàn bộ dự án trên đám mây như mô tả trước đó, tuy nhiên, bạn vẫn phải thanh toán cho đến khi quy trình tắt hoàn tất.
Các bước tiếp theo
Ngoài hướng dẫn này, bạn nên cân nhắc các mô-đun di chuyển khác tập trung vào việc chuyển từ các dịch vụ cũ đi kèm, bao gồm:
- Mô-đun 2: di chuyển từ
ndbApp Engine sang Cloud NDB - Các mô-đun 7-9: di chuyển từ các tác vụ đẩy của Hàng đợi tác vụ App Engine sang Cloud Tasks
- Các mô-đun 12 – 13: di chuyển từ App Engine Memcache sang Cloud Memorystore
- Các mô-đun 15-16: di chuyển từ Blobstore của App Engine sang Cloud Storage
- Các mô-đun 18-19: di chuyển từ Hàng đợi tác vụ App Engine (kéo tác vụ) sang Cloud Pub/Sub
App Engine không còn là nền tảng duy nhất không cần máy chủ trên Google Cloud nữa. Nếu bạn có một ứng dụng App Engine nhỏ hoặc một ứng dụng có chức năng hạn chế và muốn biến ứng dụng đó thành một vi dịch vụ độc lập, hoặc bạn muốn chia một ứng dụng nguyên khối thành nhiều thành phần có thể dùng lại, thì đây là những lý do chính đáng để cân nhắc việc chuyển sang Cloud Functions. Nếu việc tạo vùng chứa đã trở thành một phần trong quy trình phát triển ứng dụng của bạn, đặc biệt là nếu quy trình này bao gồm một quy trình CI/CD (tích hợp liên tục/phân phối liên tục hoặc triển khai liên tục), hãy cân nhắc việc di chuyển sang Cloud Run. Các trường hợp này được đề cập trong các mô-đun sau:
- Di chuyển từ App Engine sang Cloud Functions: xem Mô-đun 11
- Di chuyển từ App Engine sang Cloud Run: xem Mô-đun 4 để đóng gói ứng dụng của bạn bằng Docker hoặc Mô-đùn 5 để thực hiện việc này mà không cần vùng chứa, kiến thức về Docker hoặc
Dockerfile
Bạn không bắt buộc phải chuyển sang một nền tảng không máy chủ khác. Bạn nên cân nhắc những lựa chọn phù hợp nhất cho ứng dụng và trường hợp sử dụng của mình trước khi thực hiện bất kỳ thay đổi nào.
Bất kể bạn cân nhắc mô-đun di chuyển nào tiếp theo, bạn đều có thể truy cập vào tất cả nội dung của Serverless Migration Station (lớp học lập trình, video, mã nguồn [nếu có]) tại kho lưu trữ nguồn mở. README của kho lưu trữ này cũng cung cấp hướng dẫn về những hoạt động di chuyển cần cân nhắc và "thứ tự" liên quan của các Mô-đun di chuyển.
8. Tài nguyên khác
Dưới đây là các tài nguyên bổ sung dành cho những nhà phát triển muốn tìm hiểu thêm về Mô-đun di chuyển này hoặc các mô-đun di chuyển có liên quan, cũng như các sản phẩm có liên quan. Trong đó có những nơi để bạn gửi ý kiến phản hồi về nội dung này, đường liên kết đến mã và nhiều phần tài liệu mà bạn có thể thấy hữu ích.
Vấn đề/ý kiến phản hồi về Lớp học lập trình
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:
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 repo cho Mô-đun 12 (BẮT ĐẦU) và Mô-đun 13 (KẾT THÚC) trong bảng bên dưới. Bạn cũng có thể truy cập vào các hướng dẫn này trong 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 |
Học phần 13 (lớp học lập trình này) |
Tài liệu tham khảo trực tuyến
Dưới đây là các tài nguyên trực tuyến có thể liên quan đến hướng dẫn này:
App Engine
- Tài liệu về App Engine
- Thời gian chạy Python 2 App Engine (môi trường tiêu chuẩn)
- Sử dụng các thư viện tích hợp sẵn của App Engine trên App Engine Python 2
- Thời gian chạy Python 3 App Engine (môi trường tiêu chuẩn)
- Sự khác biệt giữa thời gian chạy Python 2 và 3 App Engine (môi trường tiêu chuẩn)
- Hướng dẫn di chuyển ứng dụng từ Python 2 sang Python 3 trên App Engine (môi trường tiêu chuẩn)
- Thông tin về giá và hạn mức của App Engine
NDB App Engine và NDB trên đám mây
- Tổng quan về NDB của App Engine
- Mức sử dụng Datastore NDB của App Engine
- Tài liệu về NDB của Google Cloud
- Kho lưu trữ NDB của Google Cloud
- Thông tin về giá của Cloud Datastore
App Engine Memcache và Cloud Memorystore
- Tổng quan về Memcache của App Engine
- Tài liệu tham khảo về
memcacheApp Engine Python 2 - Tài liệu tham khảo về
memcacheApp Engine Python 3 - Hướng dẫn di chuyển từ App Engine
memcachesang Cloud Memorystore - Tài liệu về Cloud Memorystore
- Tài liệu về Cloud Memorystore for Redis
- Thông tin về giá của Cloud Memorystore for Redis
- Các phiên bản Redis được Cloud Memorystore hỗ trợ
- Trang chủ Cloud Memorystore
- Tạo phiên bản Memorystore mới trong Cloud Console
- Trang chủ của ứng dụng Redis Python
- Tài liệu về thư viện ứng dụng Redis của Python
VPC trên đám mây
- Tài liệu về VPC của Google Cloud
- Trang chủ VPC của Google Cloud
- Thông tin về giá của VPC trên đám mây
- Tạo trình kết nối mới cho phép truy cập VPC không máy chủ trong Cloud Console
Thông tin khác về Cloud
- Python trên Google Cloud Platform
- Thư viện ứng dụng Google Cloud Python
- Cấp "Luôn miễn phí" của Google Cloud
- SDK Google Cloud (công cụ dòng lệnh
gcloud) - Tất cả tài liệu của Google Cloud
Giấy phép
Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.
