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 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 Docker, một nền tảng nổi tiếng trong ngành để phát triển, vận chuyển và chạy các ứng dụng trong vùng chứa. Đối với nhà phát triển Python 2, hướng dẫn này BẮT ĐẦU bằng Ứng dụng mẫu Cloud NDB App Engine trong Mô-đun 2, trong khi nhà phát triển Python 3 BẮT ĐẦU bằng Mẫu Cloud Datastore trong Mô-đun 3.
Bạn sẽ tìm hiểu cách
- Đóng gói ứng dụng bằng Docker
- 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
- Nên làm: hoàn tất lớp học lập trình Mô-đun 2 hoặc lớp học lập trình Mô-đun 3
- Một ứng dụng App Engine đang hoạt động và sẵn sàng được đóng gói vào vùng chứa
- Python 2: Mẫu NDB trên đám mây của Mô-đun 2
- Python 3: Mẫu Cloud Datastore của mô-đun 3
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, thay thế tệp cấu hình App Engine bằng cấu hình vùng chứa, xác định nội dung sẽ đưa vào vùng chứa, sau đó chỉ định cách khởi động ứng dụng. App Engine sẽ tự động xử lý nhiều việc trong số này.
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 Phụ lục 2 hoặc Phụ lục 3. Nếu không có, hãy hoàn thành một trong hai hướng dẫn (đườ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 lớp học này, bạn chỉ cần bắt đầu bằng cách lấy mã của Mô-đun 2 hoặc 3 bên dưới.
Cho dù bạn dùng mã của mình hay mã của chúng tôi, mã của Mô-đun 2 là nơi chúng ta sẽ BẮT ĐẦU cho phiên bản Python 2 của hướng dẫn này, và tương tự, mã của Mô-đun 3 cho Python 3. Lớp học lập trình Mô-đun 4 này sẽ hướng dẫn bạn từng bước và tuỳ thuộc vào lựa chọn của bạn, bạn sẽ có được mã tương tự như một trong các thư mục kho lưu trữ Mô-đun 4 (FINISH) khi hoàn tất.
- Python 2 (ứng dụng Cloud NDB)
- BẮT ĐẦU: Mã mô-đun 2
- HOÀN TẤT: Mã mô-đun 4
- Python 3 (ứng dụng Cloud Datastore)
- BẮT ĐẦU: Mã mô-đun 3
- HOÀN TẤT: Mã mô-đun 4
- 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 BẮT ĐẦU Python 2 Module 2 (của bạn hoặc của chúng tôi) sẽ có dạng như sau:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
Nếu đang sử dụng mã Mô-đun 2 (2.x) của riêng mình, bạn cũng sẽ có một thư mục lib. Cả lib và appengine_config.py đều không được dùng cho Python 3, trong đó mã BẮT ĐẦU của Mô-đun 3 (3.x) 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 đã biết về các vùng chứa, Docker và muốn tìm hiểu thêm về cách tạo vùng chứa cho ứng dụng App Engine để chạy trên Cloud Run. Bạn cũng có thể làm Lớp học lập trình về Mô-đun 5 (giống với lớp học lập trình này nhưng có Cloud Buildpacks) sau đó. Ứng dụng mẫu cơ bản của chúng tôi có dung lượng đủ nhỏ để tránh một số vấn đề Dockerfile nêu trên.
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 Docker (và Buildpack 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
Việc di chuyển từ App Engine có nghĩa là thay thế app.yaml bằng Dockerfile để vạch ra cách tạo và chạy vùng chứa. App Engine tự động khởi động ứng dụng của bạn, nhưng Cloud Run thì không. Đây là mục đích của các lệnh Dockerfile, ENTRYPOINT và CMD. Tìm hiểu thêm về Dockerfile trên trang tài liệu này của Cloud Run cũng như xem ví dụ về Dockerfile tạo ra gunicorn.
Một giải pháp thay thế cho việc sử dụng ENTRYPOINT hoặc CMD trong Dockerfile là sử dụng Procfile. Cuối cùng, .dockerignore giúp lọc ra các tệp không phải ứng dụng để giảm kích thước vùng chứa. Chúng tôi sẽ sớm cung cấp thêm thông tin về những tính năng này!
Xoá app.yaml và tạo Dockerfile
app.yaml không được dùng trong các vùng chứa, vì vậy hãy xoá phần tử này ngay. Tệp cấu hình vùng chứa là Dockerfile và ứng dụng mẫu của chúng tôi chỉ yêu cầu một tệp tối thiểu. Tạo Dockerfile bằng nội dung này, thay thế NNN bằng 2 hoặc 3, tuỳ thuộc vào phiên bản Python mà bạn đang sử dụng:
FROM python:NNN-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Hầu hết Dockerfile đều chỉ định cách tạo vùng chứa ngoại trừ ENTRYPOINT chỉ định cách khởi động vùng chứa, trong trường hợp này là gọi python main.py để thực thi máy chủ phát triển Flask. Nếu bạn mới làm quen với Docker, chỉ thị FROM cho biết hình ảnh cơ sở để bắt đầu và "slim" đề cập đến bản phân phối Python tối thiểu. Tìm hiểu thêm trên trang hình ảnh Docker Python.
Nhóm lệnh ở giữa sẽ tạo thư mục đang hoạt động (/app), sao chép các tệp ứng dụng, sau đó chạy pip install để đưa các thư viện của bên thứ ba vào vùng chứa. WORKDIR kết hợp các lệnh mkdir và cd của Linux; hãy đọc thêm về lệnh này trong tài liệu về WORKDIR . Các chỉ thị COPY và RUN rất dễ hiểu.
Thư viện của bên thứ ba
Tệp requirements.txt có thể giữ nguyên; Flask phải có 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
Nhà phát triển App Engine Python 2 biết rằng các thư viện của bên thứ ba được sao chép vào thư mục lib, được tham chiếu trong requirements.txt, được liệt kê trong app.yaml và được appengine_config.py hỗ trợ. Các vùng chứa, chẳng hạn như ứng dụng Python 3 App Engine, chỉ sử dụng requirements.txt, vì vậy, bạn có thể bỏ tất cả những thứ khác. Tức là nếu có ứng dụng App Engine 2.x, bạn có thể xoá appengine_config.py và mọi thư mục lib ngay bây giờ.
Khởi động
Người dùng Python 2 không khởi động máy chủ web của App Engine, nhưng khi chuyển sang một vùng chứa, bạn phải làm việc này. Việc này được thực hiện bằng cách thêm chỉ thị CMD hoặc ENTRYPOINT vào Dockerfile để chỉ định cách khởi động ứng dụng. Việc này được mô tả dưới đây theo cách tương tự như đối với người dùng Python 3.
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 nó gần như trực tiếp vào Dockerfile (hoặc Procfile nếu sử dụng Buildpack [xem Mô-đun 5] để chứa ứng dụng của bạn). Tóm tắt vị trí của chỉ thị điểm truy cập giữa cả hai nền tảng:
- Docker: dòng trong
Dockerfile:ENTRYPOINT ["python", "main.py"] - Buildpack: dòng trong
Procfile:web: python main.py
Bạn có thể sử dụng máy chủ phát triển Flask để kiểm thử, nhưng nếu sử dụng một máy chủ sản xuất như gunicorn cho ứng dụng của mình, hãy nhớ trỏ chỉ thị ENTRYPOINT hoặc CMD vào máy chủ đó như trong mẫu Cloud Run Quickstart.
Bỏ qua tệp
Bạn nên tạo một tệp .dockerignore để cắt giảm kích thước vùng chứa và không làm lộn xộn hình ảnh vùng chứa bằng các tệp thừa như sau:
*.md
*.pyc
*.pyo
.git/
.gitignore
__pycache__
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 hoàn tất việc cập nhật cấu hình Docker và tệp nguồn, bạn đã sẵn sàng chạy tệp đó 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 beta 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 Dockerfile and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying new service... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... Deploying Revision. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [SVC_NAME] revision [SVC_NAME-00001-vos] 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:

Giờ đây, mã của bạn sẽ khớp với nội dung trong thư mục kho lưu trữ Mô-đun 4, cho dù đó là 2.x hay 3.x. Chúc mừng bạn đã hoàn thành lớp học lập trình về Mô-đun 4 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 Cloud Buildpacks trong lớp học lập trình Mô-đun 5 (đườ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:
- Di chuyển sang Python 3 nếu bạn chưa thực hiện. Ứng dụng mẫu đã tương thích với phiên bản 2.x và 3.x, vì vậy, thay đổi duy nhất là người dùng Docker phải cập nhật
Dockerfileđể sử dụng hình ảnh Python 3. - Module 5: Di chuyển sang Cloud Run bằng Cloud Buildpacks
- Tạo vùng chứa cho ứng dụng để chạy trên Cloud Run bằng Cloud Buildpacks
- Bạn không cần biết gì về Docker, vùng chứa hoặc
Dockerfile - Bạn phải di chuyển ứng dụng sang Python 3
- 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 4 (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 4 |
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