區域 ID
REGION_ID
是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r
。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。
進一步瞭解區域 ID。
本頁面說明使用者發出的 HTTP 要求如何送達適當的服務版本。要求可以透過下列方式轉送:
如果您使用本機開發伺服器來測試應用程式,則可用的轉送和分派功能會略有不同。如要透過程式輔助的方式來建立正式作業環境和開發伺服器都能使用的網址,請使用 ModulesService.getVersionHostname
方法。
詳情請參閱在開發伺服器中轉送。
使用網址轉送
應用程式在 App Engine 中執行後,您可以使用下列網址將 HTTP 要求傳送至應用程式:
https://PROJECT_ID.REGION_ID.r.appspot.com
其中 PROJECT_ID
是包含應用程式的 Google Cloud 專案 ID。
這個網址會將要求傳送至您設定用來接收流量的應用程式版本。
服務和版本的網址
如果您在應用程式中建立多項服務,每項服務都有自己的網址。每個服務版本都有自己的網址,因此您可以先部署及測試新版本,再將該版本設定為接收流量。
特定服務和版本的網址格式如下:
VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
如果您不需要指定特定版本,可以省略 VERSION-dot-
。
如要擷取應用程式服務和版本的 ID,您可以使用下列任一工具:
控制台
在 Google Cloud 控制台中,您可以查看對應的「Instances」(執行個體)、「Services」(服務) 和「Versions」(版本) 頁面。
gcloud
執行 gcloud app instances list
指令,即可列出特定 Google Cloud 專案中的資源 ID。
API
如要透過程式擷取資源 ID,請參閱 Admin API 中的 list
方法。
網址範例
以下是一些 App Engine 網址範例,其中顯示 App Engine 指派給應用程式的 appspot.com
網域,以及您可以為應用程式設定的自訂網域。
- 將要求傳送至
default
服務的可用執行個體: https://PROJECT_ID.REGION_ID.r.appspot.com
https://CUSTOM_DOMAIN
要求會由
default
服務中設定用來處理流量的版本接收。- 將要求傳送至
- 將要求傳送至特定服務的可用執行個體:
https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
https://SERVICE_ID.CUSTOM_DOMAIN
要求會由指定服務中設定要用來處理流量的版本接收。如果您指定的服務不存在,則系統會以軟轉送的方式處理這些要求。
- 將要求傳送至
default
中特定版本的可用執行個體:https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com
https://VERSION_ID.CUSTOM_DOMAIN
如果沒有指定服務,要求會傳送至
default
服務。
軟轉送
如果要求與主機名稱的 PROJECT_ID.REGION_ID.r.appspot.com
部分相符,但含有不存在的服務、版本或執行個體名稱,則要求會轉送至 default
服務。軟轉送不適用於自訂網域;如果主機名稱無效,則傳送至這些網域的要求將傳回 HTTP 404
狀態碼。
指定的轉送
如果目標確實存在,採用下列網址模式可保證將要求送達要求目標。您在分派檔案中定義的模式絕不會攔截和重新轉送這些要求:
- 將要求傳送到特定服務和版本的可用執行個體:
https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
https://VERSION_ID.SERVICE_ID.PROJECT_ID.CUSTOM_DOMAIN
如果您使用手動調整資源配置的服務,則可以加入執行個體 ID 來指定執行個體並傳送要求。執行個體 ID 為
0
到運作中執行個體總數之間的整數,可以按照下列方式指定:將要求傳送至特定執行個體中的特定服務和版本:
https://INSTANCE_ID-dot-VERSION_ID-dot-SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com https://INSTANCE_ID.VERSION_ID.SERVICE_ID.CUSTOM_DOMAIN
使用分派檔案設定轉送
您可以建立分派檔案來覆寫 App Engine 的網址轉送規則,並定義自己的自訂轉送規則。分派檔案可以讓您根據要求網址中的路徑或主機名稱,將傳入要求傳送至特定服務。
建立分派檔案
如何建立分派檔案:
在與其他設定檔 (例如 app.yaml) 相同的目錄中,建立一個名稱為
dispatch.yaml
的檔案。請在檔案中定義轉送規則,如需詳細資訊,請參閱
dispatch.yaml
參考資料。
請注意下列轉送規則:
- 您最多可以定義 20 個轉送規則。每個規則都必須包含
url
和service
元素。 - 規則必須使用 HTTP 網址模式;這類模式包含分隔子網域的「
.
」標記法。系統不支援使用 HTTPS「-dot-
」標記法定義的網址。 - 規則也適用於您在 Cron 檔案中定義的網址。
舉例來說,您可以建立分派檔案,藉此將行動要求 (例如 https://simple-sample.uc.r.appspot.com/mobile/
) 轉送至行動裝置前端,並將工作站要求 (例如 https://simple-sample.uc.r.appspot.com/work/
) 轉送至靜態後端:
dispatch:
# Send all mobile traffic to the mobile frontend.
- url: "*/mobile/*"
service: mobile-frontend
# Send all work to the one static backend.
- url: "*/work/*"
service: static-backend
部署分派檔案
如要在不更動目前提供版本的情況下部署分派設定檔,請根據您的環境,在包含分派檔案的目錄中使用下列其中一個指令:gcloud
gcloud app deploy dispatch.yaml
Maven
mvn appengine:deployDispatch dispatch.yaml
Gradle
gradle appengineDeployDispatch dispatch.yaml
IDE
使用 Cloud Load Balancing 進行路由
Cloud Load Balancing 是獨立產品,可為在 Google Cloud上執行的所有應用程式啟用進階網路設定。
為無伺服器應用程式啟用 HTTP(S) 負載平衡後,您可以:
設定無伺服器應用程式,以不與其他服務共用的專屬 IPv4 和/或 IPv6 IP 位址提供服務。
重複使用您在 Compute Engine、Google Kubernetes Engine 和 Cloud Storage 中使用的 SSL 憑證和私密金鑰。這樣一來,您就無需管理無伺服器應用程式的個別憑證。
負載平衡器不會干擾或與 dispatch.yaml
檔案中的路由規則互動。只有在無伺服器 NEG 將流量導向 App Engine 時,系統才會評估 dispatch.yaml
規則。
注意事項:
- 建議您使用入口控管機制,讓應用程式只接收來自負載平衡器 (以及您使用的 VPC,如果有) 的要求。否則,使用者可以使用應用程式的 App Engine 網址,略過負載平衡器、Google Cloud Armor 安全政策、SSL 憑證和透過負載平衡器傳遞的私密金鑰。
在開發伺服器中轉送
探索執行個體位址
本機開發伺服器會在啟動時建立所有的執行個體。請注意,本機開發伺服器目前不支援基本資源調度執行個體。系統會指派專用的通訊埠給每個建立的執行個體。通訊埠指派會顯示在伺服器的記錄檔訊息串中。網路用戶端可透過指定通訊埠的方式,與特定執行個體通訊。自動調整資源配置的服務只會建立一個執行個體 (和通訊埠),在伺服器記錄中顯示如下 (請注意,服務舊稱模組):
INFO: Module instance service-auto is running at http://localhost:37251/
指派不重複的通訊埠給手動調整資源配置服務的每個執行個體:
INFO: Module instance service-manual instance 0 is running at http://localhost:43190/
INFO: Module instance service-manual instance 1 is running at http://localhost:52642/
此外,系統還會指派一個額外的通訊埠給每個手動調整資源配置的服務,這樣用戶端就能存取該服務而不用指定特定的執行個體。傳送至這個通訊埠的要求會自動轉送至其中一個設定的執行個體:
INFO: Module instance service-manual is running at http://localhost:12361/
下表顯示如何在開發伺服器和 App Engine 環境中呼叫這些服務:
服務 | 執行個體 | 開發伺服器位址 | App Engine 位址 |
---|---|---|---|
service-auto | (未使用) | http://localhost:37251/ |
https://v1-dot-service-auto-dot-PROJECT_ID.REGION_ID.r.appspot.com/ |
service-manual | 0 | http://localhost:43190/ |
https://0-dot-v1-dot-service-manual-dot-PROJECT_ID.REGION_ID.r.appspot.com/ |
由本機開發伺服器使用。詳情請參閱 Apache Maven 或 Gradle。
分派檔案
執行本機開發伺服器時會忽略所有分派檔案。指定執行個體的唯一方式就是使用執行個體的通訊埠。限制服務的存取權
所有服務均預設為公開。如要限制服務的存取權,請在其安全限制中加入 <role-name>admin</role-name>
元素。
關於 App Engine 網址的其他詳細資料
瞭解網址中的區域 ID
REGION_ID
是 Google 根據您在建立應用程式時選取的地區所指派的簡寫代碼。雖然某些區域 ID 可能看起來與常用的國家/地區代碼相似,但此代碼並非對應國家/地區或省份。如果是 2020 年 2 月後建立的應用程式,App Engine 網址會包含 REGION_ID.r
。如果是在此日期之前建立的現有應用程式,網址中則可選擇加入地區 ID。
您可以使用下列工具查看應用程式的區域 ID:
控制台
在 Google Cloud 控制台中,您可以查看應用程式的「Instances」(執行個體)、「Services」(服務) 和「Versions」(版本) 的網址。
所有這些網址都包含區域 ID。
gcloud
部署應用程式或服務時,部署成功後 gcloud app deploy
指令會顯示網址。這個網址包含區域 ID。
如要查看已部署服務的網址,請按照下列步驟操作:
輸入
gcloud app versions list
指令,即可列出特定服務的版本。例如,如要列出預設服務的版本,請輸入gcloud app versions list --service=default
。輸入
gcloud app versions describe
指令。該指令的輸出內容包含版本網址,以及應用程式的區域 ID。舉例來說,如要說明預設服務的 20191023t101741 版本,請輸入gcloud app versions describe 20191023t101741 --service=default
要求資料中包含網域名稱
用於要求的網域名稱會包含在傳送至應用程式的要求資料中。因此,您可以使用要求資料來控制應用程式如何根據要求中的網域名稱做出回應。舉例來說,如果您想要重新導向到官方網域,可以撰寫應用程式的程式碼來檢查 Host
要求標頭,然後根據網域名稱提供適當的回應。