1. Tổng quan
Loạt lớp học lập trình về Trạm di chuyển không máy chủ (hướng dẫn thực hành theo tiến độ riêng) và video có liên quan nhằm giúp các nhà phát triển Google Cloud không máy chủ không 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 quá trình di chuyển, chủ yếu là ngừng sử dụng các dịch vụ cũ. Việc này giúp ứng dụng của bạn dễ di chuyển hơn, đồng thời mang đến cho bạn nhiều lựa chọn và độ 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 của Cloud hơn, đồng thời dễ dàng nâng cấp lên 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ó.
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 (đối với Redis). Ngoài ra còn có quá trình di chuyển ngầm từ App Engine ndb
sang Cloud NDB, nhưng chủ yếu được đề cập trong lớp học lập trình Mô-đun 2; hãy xem trang đó để 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 thực thể Cloud Memorystore (trong Cloud Console hoặc công cụ
gcloud
) - Thiết lập trình kết nối cho phép truy cập VPC Cloudless (trong Cloud Console hoặc công cụ
gcloud
) - Di chuyển từ App Engine Memcache sang Cloud Memorystore
- Triển khai chức năng lưu vào bộ nhớ đệm bằng Cloud Memorystore trong ứng dụng mẫu
- Di chuyển từ App Engine
ndb
sang 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à lớp học lập trình miễn phí)
- Kỹ năng Python cơ bản
- Kiến thức thực hành về các lệnh Linux phổ biến
- Kiến thức cơ bản về việc phát triển và triển khai ứng dụng App Engine
- Một ứng dụng App Engine Mô-đun 12 đang hoạt động (hoàn tất Lớp học lập trình Mô-đun 12 [nên có] 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 sử dụng Python?
Bạn đánh giá thế nào về trải nghiệm 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 trình bày cách di chuyển một ứng dụng mẫu từ App Engine Memcache (và NDB) sang Cloud Memorystore (và Cloud NDB). Quy 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 linh hoạt 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ỳ giải pháp thay thế nào được mô tả trước đó.
Quá trình di chuyển này đòi hỏi nhiều nỗ lực hơn so với các phần khác trong loạt video này. Lựa chọn thay thế đề xuất cho App Engine Memcache là Cloud Memorystore, một dịch vụ lưu vào bộ nhớ đệm trên đám mây được quản lý hoàn toà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à Memcache. 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 bài viết 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 ứng dụng đó. Khi hoàn thành bài tập này, bạn sẽ cập nhật ứng dụng để ứng dụng vẫn 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ế cho 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 bổ sung, không bắt buộc và nhỏ cho Python 3. Nếu đã quen với việc truy cập vào các dịch vụ đi kèm App Engine từ Python 3 thông qua SDK App Engine Python 3, thì 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. Nếu bạn làm như vậy, bạn sẽ không được sử dụng SDK vì Memorystore không phải là dịch vụ đi kèm của App Engine. Việc tìm hiểu cách sử dụng SDK App Engine Python 3 nằm ngoài phạm vi của hướng dẫn này.
Hướng dẫn này có các bước chính sau đây:
- Thiết lập/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/chuẩn bị
Chuẩn bị dự án trên đám mây
Bạn nên sử dụng lại chính dự án mà bạn đã sử 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 video này đều có một mục "BẮT ĐẦU" (mã cơ sở để bắt đầu) và " cờ "KẾT THÚC" (ứng dụng được di chuyển). Mã Complete được cung cấp để bạn có thể so sánh các 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 nếu xảy ra sự cố. Các điểm kiểm tra này được thiết kế để đảm bảo bạn thành công trong việc tìm hiểu cách thực hiện quá trình di chuyển.
Bất kể bạn sử dụng dự án nào trên Cloud, hãy đảm bảo rằng dự án đó có tài khoản thanh toán đang hoạt động. Ngoài ra, hãy đảm bảo rằng App Engine được bật. Xem lại và đảm bảo rằng bạn hiểu rõ các ảnh hưởng chung về chi phí khi làm những hướng dẫn này. Tuy nhiên, không giống như những loạt nội dung khác trong loạt bài này, lớp học lập trình này sử dụng tài nguyên trên đám mây không có bậc miễn phí. Vì vậy, một số chi phí sẽ phát sinh để hoàn thành bài tập. Thông tin chi phí cụ thể hơn sẽ được cung cấp cùng với các đề xuất để 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ở
Dựa trên đoạn mã cơ sở của Mô-đun 12 mà chúng ta bắt đầu, lớp học lập trình này sẽ hướng dẫn bạn từng bước di chuyển. Sau khi hoàn tất, bạn sẽ được chuyển đến một ứng dụng Mô-đun 13 đang hoạt động, gần giống với đoạn mã ở một trong các thư mục Complete. Sau đây là những tài nguyên đó:
- START: Ứng dụng Mô-đun 12 Python 2 (
mod12
) hoặc Python 3 (mod12b
) - HOÀN TẤT: Ứng dụng Mô-đun 13 Python 2 (
mod13a
) hoặc 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, 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 tất 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 bằng công cụ dòng lệnh
gcloud
(nếu cần) - (Triển khai lại mã của Mô-đun 12 cho 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
Bây giờ, mọi người (người dùng Python 2 và 3) đều phải 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à hoạt độ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, lưu vào bộ nhớ đệm đối với cùng một người dùng trong 1 giờ:
Do các lượt truy cập gần đây nhất được lưu vào bộ nhớ đệm, nên những 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à không máy chủ. Cần có một thực thể; trong trường hợp này là chạy Redis. Không giống như Memcache, Memorystore là một sản phẩm Cloud độc lập và không có cấp miễn phí. Vì vậy, hãy nhớ kiểm tra Memorystore để biết thông tin về giá của Redis trước khi tiếp tục. Để giảm thiểu chi phí cho bài tập này, bạn nên sử dụng lượng tài nguyên ít nhất để vận hành: cấp dịch vụ Cơ bản và dung lượng là 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ủa bạn (các phiên bản). Đó là lý do bạn phải tạo Trình kết nối cho phép truy cập VPC không máy chủ để App Engine có thể truy cập vào các tài nguyên của Memorystore. Để giảm thiểu chi phí VPC, hãy chọn loại thực thể (f1-micro
) và số lượng thực thể ít nhất để yêu cầu (bạn nên tối thiểu là 2, tối đa là 3). Ngoài ra, hãy tham khảo trang thông tin về giá của VPC.
Chúng tôi lặp lại những đề xuất này để giảm chi phí trong quá trình hướng dẫn bạn tạo từng tài nguyên cần thiết. Ngoài ra, khi tạo tài nguyên Memorystore và VPC trong Cloud Console, bạn sẽ thấy công cụ tính giá cho từng sản phẩm ở góc trên bên phải, cung cấp cho bạn số liệu ước tính về chi phí hằng tháng (xem hình minh hoạ bên dưới). Các giá trị này sẽ tự động điều chỉnh nếu bạn thay đổi lựa chọn của mình. Đây là gần đúng những gì bạn sẽ thấy:
Cả hai tài nguyên này đều bắt buộc, và không quan trọng 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 của bạn sẽ không truy cập được 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, rồi đến trình kết nối VPC.
Sau khi cả hai tài nguyên kết nối mạng, 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 về lưu dữ liệu vào bộ nhớ đệm trên trang di chuyển Cloud NDB ( Python 2 hoặc Python 3).
Tạo một thực thể Cloud Memorystore
Vì Cloud Memorystore không có bậc miễn phí, 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ữ chi phí ở mức tối thiểu bằng cách sử dụng các cài đặt sau:
- Chọn cấp dịch vụ thấp nhất: Cơ bản (mặc định của bảng điều khiển: "Chuẩn", mặc định
gcloud
: "Cơ bản"). - Chọn dung lượng bộ nhớ tối thiểu: 1 GB (mặc định của bảng điều khiển: 16 GB, mặc định của
gcloud
: 1 GB). - Thông thường, các phiên bản mới nhất của bất kỳ phần mềm nào đều yêu cầu nhiều tài nguyên nhất nhưng có lẽ bạn cũng không nên chọn phiên bản cũ nhất. Phiên bản mới nhất thứ hai hiện tại là Phiên bản Redis 5.0 (giá trị mặc định của 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 một phiên bản bằng Cloud Console. Nếu bạn muốn thực hiện từ dòng lệnh, hãy bỏ qua và tiếp tục.
Trên Cloud Console
Truy cập vào 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 tính năng này (và có thể cùng với thông tin thanh toán), bạn sẽ được chuyển đến trang tổng quan của Memorystore. Đây là nơi bạn có thể xem tất cả các thực thể đã tạo trong dự án của mình. Dự án hiển thị bên dưới không có bất kỳ hàng nào, đó là lý do tại sao 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 hiển thị một biểu mẫu để hoàn tất các chế độ cài đặt mà bạn 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 này, hãy làm theo các đề xuất được đề cập trước đó. Sau khi chọn xong, hãy nhấp vào Tạo. Quá trình tạo có thể mất vài phút. Khi hoàn tất, hãy sao chép địa chỉ IP của thực thể và số cổng để thêm vào app.yaml
.
Từ dòng lệnh
Mặc dù thông tin trực quan để tạo các thực thể Memorystore từ Cloud Console, nhưng một số người lại thích dùng dòng lệnh hơn. Hãy nhớ cài đặt và khởi động gcloud
trước khi tiếp tục.
Giống như Cloud Console, bạn phải bật Cloud Memorystore for Redis. Phát hành lệnh gcloud services enable redis.googleapis.com
và chờ 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 (một lần nữa) sẽ không có tác dụng phụ (tiêu cực). Khi dịch vụ được bật, hãy tạo một thực thể 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 thực thể Memorystore của bạn; phòng thí nghiệm này sử dụng "demo-ms
" dưới dạng 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 khu vực gần bạn hơn nếu lo ngại về độ trễ. Bạn phải chọn cùng một khu vực với ứng dụng App Engine của bạn. 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 tôi đang sử dụng phiên bản 5 theo khuyến nghị trước đó. Với các 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ư chế độ mặc định của Cloud Console, gcloud
mặc định ở mức tài nguyên tối thiểu. Kết quả là cả cấp dịch vụ và dung lượng bộ nhớ đều không được yêu cầu trong lệnh đó. Quá trình tạo một thực thể Memorystore mất vài phút. Sau khi hoàn tất, hãy lưu ý địa chỉ IP và số cổng của thực thể vì chúng sẽ sớm được thêm vào app.yaml
.
Xác nhận phiên bản đã tạo
Từ Cloud Console hoặc dòng lệnh
Cho dù bạn tạo phiên bản từ Cloud Console hay từ dòng lệnh, bạn đều có thể xác nhận phiên bản đó là có sẵn và sẵn sàng để sử dụng bằng lệnh sau: gcloud redis instances list --region REGION
Dưới đây là lệnh để kiểm tra các thực thể ở khu vực us-central1
cùng với kết quả dự kiến cho thấy thực thể 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ề thực thể 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áy ảo (VM) Compute Engine, bạn cũng có thể gửi lệnh trực tiếp cho thực thể Memorystore qua một máy ảo để xác nhận rằng máy ảo đang hoạt động. Xin lưu ý rằng việc sử dụng máy ảo có thể phát sinh các chi phí liên quan độc lập với các tài nguyên bạn đang dùng.
Tạo trình kết nối cho phép truy cập 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 Cloud Console hoặc trên dòng lệnh. Tương tự, đám mây riêng ảo không có bậc miễn phí, vì vậy, bạn nên phân bổ lượng tài nguyên ít nhất để hoàn thành lớp học lập trình nhằm giữ chi phí ở mức tối thiểu. Bạn có thể đạt được điều đó bằng các chế độ cài đặt sau:
- Chọn số lượng thực thể tối đa thấp nhất: 3 (bảng điều khiển và
gcloud
mặ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ó giá trị mặc định làgcloud
)
Phần tiếp theo sẽ hướng dẫn bạn tạo trình kết nối từ Cloud Console bằng các chế độ cài đặt Cloud VPC ở trên. Nếu bạn muốn thực hiện từ dòng lệnh, hãy chuyển sang phần tiếp theo.
Trong Cloud Console
Truy cập vào bài viết Cloud Networking "Serverless VPC access" (Quyền truy cập vào VPC không máy chủ) 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 API này, bạn sẽ được nhắc bật:
Sau khi bật API (và có thể cùng với mục thanh toán), bạn sẽ được chuyển đến trang tổng quan để hiển thị tất cả các trình kết nối VPC đã tạo. Dự án dùng trong ảnh chụp màn hình bên dưới không có bất kỳ hàng nào. Đó là lý do có nội dung "No rows to display" (Không có hàng nào để hiển thị). Trong bảng điều khiển của bạn, nhấp vào Tạo trình kết nối ở trên cùng:
Hoàn tất biểu mẫu với các cài đặt mong muốn:
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ủa hướng dẫn với nhu cầu tối thiểu, việc giảm thiểu chi phí là hợp lý. Vì vậy, hãy làm theo các đề xuất được đề cập trước đó. Sau khi chọn xong, hãy nhấp vào Tạo. Quá trình yêu cầu 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 API Truy cập VPC không máy chủ. Bạn sẽ thấy kết quả tương tự sau khi đưa ra lệnh sau:
$ gcloud services enable vpcaccess.googleapis.com Operation "operations/acf.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.
Khi bạn bật API, trình kết nối VPC sẽ được tạo bằng một lệnh 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 khối CIDR /28
không 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ố thực thể tối thiểu: 2 (mặc định) và số thực thể 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 Cloud Console)
Mong đợi kết quả tương tự như những gì bạn thấy bên dưới nếu bạn thực thi lệnh sau với các giả định trên:
$ 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ư các thực thể tối thiểu là 2 và một mạng có tên là default
. Có thể mất vài phút để hoàn tất việc tạo trình kết nối VPC.
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 phát lệnh gcloud
sau đây, giả sử đây là khu vực us-central1
, để xác nhận rằng sản phẩm đã được 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ự, giờ đây trang tổng quan sẽ hiển thị trình kết nối bạn vừa tạo:
Hãy ghi lại Mã dự án trên đám mây, tên trình kết nối VPC và khu vực.
Sau khi tạo xong các tài nguyên bổ sung cần thiết trên Cloud, bất kể là qua dòng lệnh hay trong bảng điều khiển, đã đến lúc cập nhật cấu hình của ứng dụng để hỗ trợ việc sử dụng những tài nguyên đó.
5. Cập nhật tệp cấu hình
Bước đầu tiên là thực hiện tất cả các cập nhật 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 được theo dõi thông tin về cách chuyển sang dùng Python 3 trong từng phần dưới đây.
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 for Redis, bạn nê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 riêng. Nối cả redis
và google-cloud-ndb
vào requirements.txt
, kết hợp flask
từ Mô-đun 12:
flask
redis
google-cloud-ndb
Tệp requirements.txt
này không có số phiên bản nào, nghĩa là các phiên bản mới nhất đã được chọn. Nếu phát sinh bất kỳ sự không tương thích nào, hãy chỉ định số phiên bản để khoá trong các phiên bản đang hoạt động.
app.yaml
Các mục mới cần thêm
Môi trường thời gian chạy Python 2 App Engine đòi hỏi 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 sẵn như thế này cùng với phiên bản có sẵn trong app.yaml
. Nếu bạn chưa có phần libraries
, hãy tạo một phần rồi 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ó phần libraries
. Nếu có, đồng thời 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 sử dụng môi trườ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 gì cần cập nhật. 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à phần "trước và sau" minh hoạ những nội dung cập nhật bạn nên áp dụng cho app.yaml
:
*Những điểm khác biệt của Python 3
Phần này là không bắt buộc và chỉ khi bạn chuyển sang Python 3. Để làm được việc đó, bạn cần thực hiện một số thay đổi đối với cấu hình Python 2. Hãy bỏ qua phần này nếu bạn không nâng cấp tại thời điểm này.
Cả threadsafe
và api_version
đều không được sử dụng cho thời gian chạy Python 3, vì vậy hãy xoá cả hai chế độ cài đặt này. Môi trường thời gian chạy App Engine mới nhất không hỗ trợ thư viện bên thứ ba tích hợp sẵn cũng như không hỗ trợ sao chép thư viện không tích hợp. Yêu cầu duy nhất đối với các gói bên thứ ba là liệt kê các gói đó trong requirements.txt
. Do đó, hệ thống có thể xoá toàn bộ phần libraries
của app.yaml
.
Tiếp theo, môi trường thời gian chạy Python 3 yêu cầu sử dụng các khung web có chức năng định tuyến riêng. Đó là lý do chúng tôi hướng dẫn các 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ì không phân phát tệp tĩnh nào nên ứng dụng này "vô nghĩa" có liệt kê trình xử lý (vì tất cả đều là auto
), vì vậy, toàn bộ phần handlers
cũng có thể bị xoá. Do đó, app.yaml
mới (được viết tắt) được điều chỉnh cho Python 3 sẽ được rút ngắn thành 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
threadsafe
vàapi_version
- Xoá phần
libraries
- Xoá phần
handlers
(hoặc chỉ xoá các trình xử lýscript
nế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 các phần mới của Memorystore và trình kết nối VPC chỉ là phần giữ chỗ. Hãy 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ị được lưu từ thời điểm bạn tạo các tài nguyên đó trước đó. Đối với thực thể Memorystore của bạn, hãy nhớ sử dụng HOST
(không phải RESERVED_IP
) và PORT
. Dưới đây là cách dòng lệnh nhanh để lấy HOST
và PORT
giả sử tên thực thể của 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 thực thể Redis mẫu là 10.10.10.10
sử dụng cổng 6379
trong dự án my-project
ở 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 thư viện tích hợp sẵn của bên thứ ba
Giống như những gì chúng ta đã làm với app.yaml
trước đó, hãy thêm việc sử dụng 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 với điều này, thì đó là do việc này cũng được yêu cầu trở lại trong Mô-đun 2 khi di chuyển từ App Engine ndb
sang Cloud NDB. Bạn cần thực hiện thay đổi chính xác là thêm thư mục lib
vào nhóm hoạt động setuptools.pkg_resources
:
*Những điểm khác biệt của Python 3
Phần này là không bắt buộc và chỉ khi bạn chuyển sang Python 3. Một trong những thay đổi đáng chào mừng thế hệ thứ hai của App Engine là việc sao chép (đôi khi được gọi là "cung cấp") các gói bên thứ ba (không tích hợp) và tham chiếu các gói bên thứ ba tích hợp trong app.yaml
không còn cần thiết nữa, nghĩa 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 là main.py
, vì vậy, tất cả thay đổi trong phần này chỉ ảnh hưởng đến tệp đó. Chúng tôi có cung cấp hình ảnh minh hoạ 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. Tài liệu này chỉ nhằm mục đích minh hoạ và không nhằm mục đích phân tích kỹ lưỡng. Tất cả công việ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ừ trên cùng.
Cập nhật 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à dữ liệu nhập của chúng:
TRƯỚC KHI:
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 phải đọc các biến môi trường, tức là chúng ta cần có mô-đun os
Python cũng như redis
, ứng dụng 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 tất cả danh sách lượt truy cập gần đây nhất bằ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ó tính chất "DIY" hơn một chút. 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, dữ liệu nhập giờ đây sẽ có dạng như sau:
SAU KHI:
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 chạy
Khởi chạy mô-đun 12 bao gồm việc tạo thực thể cho đối tượng ứng dụng Flask app
và đặt hằng số cho thao tác lưu vào bộ nhớ đệm trong một giờ:
TRƯỚC KHI:
app = Flask(__name__)
HOUR = 3600
Để sử dụng Cloud API, bạn phải có máy khách, vì vậy, hãy tạo thực thể cho ứng dụng Cloud NDB ngay sau Flask. Tiếp theo, hãy lấy địa chỉ IP và số cổng cho thực thể Memorystore qua các biến môi trường mà bạn đặt trong app.yaml
. Được trang bị thông tin đó, tạo thực thể cho ứng dụng Redis. Mã của bạn trông như sau sau các lần cập nhật đó:
SAU KHI:
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à nếu bạn bắt đầu từ phiên bản Python 3 của ứng dụng Mô-đun 12. Nếu có, sẽ có một số thay đổi bắt buộc liên quan đến việc nhập và khởi chạy.
Thứ nhất, vì Memcache là một dịch vụ đi kèm App Engine, nên việc sử dụng dịch vụ này trong ứng dụng Python 3 đòi hỏi phải có SDK App Engine, cụ thể là gói ứng dụng WSGI (cũng như cấu hình cần thiết khác):
TRƯỚC KHI:
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 dịch vụ đi kèm App Engine như Memcache), nên bạn phải loại bỏ 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
. Đồng thời xoá đường truyền gọi wrap_wsgi_app()
. Những bản cập nhật này để lại phần này của ứng dụng (trên thực tế, toàn bộ ứng dụng) giống với phiên bản Python 2.
SAU KHI:
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, nghĩa là định nghĩa về các đối tượng Visit
sẽ được giữ nguyên. Bắt chước quá trình di chuyển Mô-đun 2 sang Cloud NDB, tất cả lệnh gọi Datastore trong store_visit()
và fetch_visits()
đều được tăng cường và nhúng trong khối with
mới (vì bắt buộc 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 KHI:
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à đưa các lệnh gọi Datastore vào bên trong (và được thụt lề). Trong trường hợp này, không cần thay đổi gì cho chính lệnh gọi:
SAU KHI:
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 xét những 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 KHI:
@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ó từ "get" và "set" các cuộc gọi, giống như Memcache. Tất cả những gì chúng ta 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 danh sách Python vào bộ nhớ đệm bằng Redis (vì danh sách này cần được chuyển đổi tuần tự trước tiên, thứ mà Memcache sẽ tự động xử lý), vì vậy, trong lệnh gọi set()
, "pickle" các lượt truy cập vào một chuỗi có pickle.dumps()
. Tương tự như vậy, khi truy xuất lượt truy cập từ bộ nhớ đệm, bạn cần huỷ chọn dữ liệu bằng pickle.loads()
ngay sau get()
. Dưới đây là trình xử lý chính sau khi triển khai các thay đổi đó:
SAU KHI:
@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)
Như vậy, bạn cũng đã hoàn tất những thay đổi cần thiết trong main.py
, chuyển đổi việc ứng dụng mẫu sử dụng Memcache sang Cloud Memorystore. Còn mẫu HTML và chuyển sang Python 3 thì sao?
Cập nhật tệp mẫu HTML và cổng thành Python 3?
Ngạc nhiên chưa! Không cần phải 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ó bất kỳ thay đổi mã hay thư viện tương thích nào. Bạn sẽ tìm thấy main.py
. giống hệt nhau trong mod13a
(2.x) và mod13b
(3.x) "Complete" . Tương tự như vậy đối với requirements.txt
, ngoại trừ mọi điểm khác biệt về số phiên bản (nếu được sử dụng). Vì giao diện người dùng vẫn không thay đổi nên templates/index.html
cũng không có gì thay đổi.
Mọi thứ cần thiết để chạy ứng dụng này trên Python 3 App Engine đã được hoàn tất trước đó về cấu hình: các lệnh không cần thiết đã bị xoá khỏi app.yaml
, đồng thời cả appengine_config.py
và thư mục lib
đều bị xoá vì không được dùng đến trong Python 3.
7. Tóm tắt/Dọn dẹp
Phần này tóm tắt lớp học lập trình này 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 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 luôn là 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 dưới đây. (Nếu đã cài đặt cả Python 2 và 3 trên hệ thống, bạn có thể cần 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ả hai 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 dây lại mọi thứ cho một dịch vụ lưu vào bộ nhớ đệm hoàn toàn khác, bản thân ứng dụng sẽ hoạt động giống hệt với ứng dụng Mô-đun 12 của bạn:
Bước này hoàn tất lớp học lập trình. Chúng tôi mời bạn so sánh ứng dụng mẫu đã cập nhật với một trong các thư mục Mô-đun 13, mod13a
(Python 2) hoặc mod13b
(Python 3).
Dọn dẹp
Giải pháp chung
Nếu bạn đã hoàn tất, chúng tôi khuyên bạn nên tắt ứng dụng App Engine để tránh phát sinh thanh toán. Tuy nhiên, nếu bạn muốn kiểm tra hoặc thử nghiệm thêm, nền tảng App Engine có hạn mức miễn phí, và bạn sẽ không bị tính phí, miễn là bạn không vượt quá cấp sử dụng đó. Đó là cho dịch vụ điện toán nhưng bạn cũng có thể bị tính phí cho các dịch vụ có liên quan của App Engine, vì vậy hãy xem trang 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ụ khác trên Google Cloud, thì những 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 "Dành riêng cho lớp học lập trình này" phần dưới đây.
Để công bố đầy đủ thông tin, việc triển khai cho một nền tảng điện toán không máy chủ của Google Cloud như App Engine sẽ làm phát sinh chi phí bản dựng và bộ nhớ thấp. Cloud Build cũng 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ẽ sử dụng hết một phần hạn mức đó. Tuy nhiên, bạn có thể sống ở một khu vực không có bậc miễn phí như vậy, vì vậy hãy chú ý đến mức sử dụng bộ nhớ của bạn để giảm thiểu chi phí tiềm ẩn. "Thư mục" cụ thể trên Cloud Storage bạn nên xem xét, bao gồm:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
- Các đường liên kết lưu trữ ở trên phụ thuộc vào
PROJECT_ID
và hoạt động *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 định tiếp tục sử dụng ứng dụng này hoặc các lớp học lập trình di chuyển khác có liên quan và muốn xoá hoàn toàn mọi thứ, hãy ngừng dự án của bạn.
Dành riêng cho lớp học lập trình này
Các dịch vụ được liệt kê dưới đây là những dịch vụ dành riêng cho 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ó bậc miễn phí; để tìm hiểu thêm về chi phí sử dụng, hãy xem trang giá của dịch vụ này.
- 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 cần có 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 về chi phí này trên trang giá của Cloud VPC.
- Cloud Datastore (Cloud Firestore ở chế độ Datastore) có một bậc miễn phí; hãy xem trang giá của YouTube để biết thêm thông tin.
Hướng dẫn này đề cập đến việc sử dụng 4 sản phẩm 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 để phát hành những 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ó bậc miễn phí nên bạn đang phải thanh toán hiện tại. Nếu không tắt dự án Cloud của mình (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 thanh toán. Tương tự như khi tạo các tài nguyên này, bạn cũng có thể giải phóng chúng từ Cloud Console hoặc qua dòng lệnh.
Trong 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ã phiên bản:
Sau khi ở trên trang chi tiết về trường hợp đó, hãy nhấp vào "Xoá" và 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 này rồ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á" và xác nhận:
Từ dòng lệnh
Cặp lệnh gcloud
sau đây lần lượt xoá cả phiên bản Memorystore và trình kết nối VPC:
gcloud redis instances delete INSTANCE --region REGION
gcloud 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 thực thể Memorystore của bạn được gọi 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 cặp lệnh sau rồi 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 cần 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 Cloud như mô tả trước đó. Tuy nhiên, bạn vẫn phải trả phí cho đến khi quá 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 cũng cần cân nhắc những mô-đun di chuyển khác tập trung vào việc ngừng sử dụng các dịch vụ cũ theo gói:
- Mô-đun 2: di chuyển từ App Engine
ndb
sang Cloud NDB - Mô-đun 7-9: di chuyển từ Hàng đợi tác vụ của App Engine để đẩy các tác vụ sang Cloud Tasks
- Mô-đun 12-13: di chuyển từ App Engine Memcache sang Cloud Memorystore
- Mô-đun 15-16: di chuyển từ App Engine Blobstore sang Cloud Storage
- Mô-đun 18-19: di chuyển từ Hàng đợi tác vụ của App Engine (Tác vụ kéo) sang Cloud Pub/Sub
App Engine không còn là nền tảng không máy chủ duy nhất 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 dịch vụ vi mô độ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ể sử dụng lại, thì đây là những lý do chính đáng để bạn cân nhắc chuyển sang Cloud Functions. Nếu việc tích hợp vùng chứa đã trở thành một phần trong quy trình phát triển ứng dụng, đặc biệt là khi quy trình đó bao gồm một quy trình CI/CD (tích hợp liên tục/phân phối hoặc triển khai liên tục), hãy cân nhắc chuyển sang Cloud Run. Những 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 Học phần 11
- Di chuyển từ App Engine sang Cloud Run: xem Mô-đun 4 để vùng chứa ứng dụng của bạn bằng Docker, hoặc Mô-đun 5 để triển khai mà không cần vùng chứa, kiến thức về Docker hoặc
Dockerfile
Việc chuyển sang một nền tảng không máy chủ khác là không bắt buộc. Bạn nên cân nhắc các 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 điều chỉnh bất cứ điều gì.
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 Trạm di chuyển không máy chủ (lớp học lập trình, video, mã nguồn [nếu có]) tại kho lưu trữ nguồn mở của chúng. README
của kho lưu trữ này cũng cung cấp hướng dẫn về những quá trình di chuyển cần xem xét và mọi "đơn đặt hàng" có liên quan 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à phát triển đang tìm hiểu thêm về Phụ lục di chuyển này hoặ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ó cả những nơi để đưa ra ý kiến phản hồi về nội dung này, các đường liên kết đến mã nguồn và nhiều thông tin hữu ích khác của tài liệu.
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 vấn đề của bạn trước khi gửi. Đường liên kết để tìm kiếm và báo cáo vấn đề mới:
Tài nguyên di chuyển
Bạn có thể tìm thấy các đường liên kết đến các thư mục repo cho Mô-đun 12 (START) và Mô-đun 13 (Complete) trong bảng bên dưới. Bạn cũng có thể truy cập vào các tệp này qua kho lưu trữ dành cho mọi quá trình di chuyển trong lớp học lập trình App Engine. Tại đây, bạn có thể sao chép hoặc tải tệp ZIP xuống.
Codelab | Python 2 | Python 3 |
Mô-đun 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ể phù hợp với hướng dẫn này:
App Engine
- Tài liệu về App Engine
- Thời gian chạy của Python 2 App Engine (môi trường tiêu chuẩn)
- Sử dụng thư viện tích hợp sẵn App Engine trên Python 2 App Engine
- Thời gian chạy của Python 3 App Engine (môi trường tiêu chuẩn)
- Điểm khác biệt giữa Python 2 và 3 môi trường thời gian chạy của App Engine (môi trường tiêu chuẩn)
- Hướng dẫn di chuyển từ Python 2 sang 3 App Engine (môi trường chuẩn)
- Thông tin về giá và hạn mức của App Engine
App Engine NDB và Cloud NDB
- Tổng quan về NDB của App Engine
- Mức sử dụng Kho dữ liệu 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
memcache
về Python 2 cho App Engine - Tài liệu tham khảo
memcache
về Python 3 cho App Engine - Hướng dẫn di chuyển App Engine
memcache
sang Cloud Memorystore - Tài liệu về Cloud Memorystore
- Tài liệu về Cloud Memorystore dành cho Redis
- Thông tin về giá Cloud Memorystore for Redis
- Các phiên bản Redis của Cloud Memorystore hỗ trợ
- Trang chủ Cloud Memorystore
- Tạo thực thể Memorystore mới trong Cloud Console
- Trang chủ ứng dụng Python Redis
- Tài liệu về thư viện ứng dụng Python Redis
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 Cloud VPC
- 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ề đám mây
- Python trên Google Cloud Platform
- Thư viện ứng dụng Google Cloud Python
- Google Cloud "Luôn miễn phí" cấp
- Google Cloud SDK (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 chung Ghi nhận tác giả Creative Commons 2.0.