App Engine 常見問題

如何登入 App Engine 帳戶?

如果您使用的是一般的 Google 帳戶 (包含 Gmail 使用者),請前往 Google Cloud Platform 主控台登入您的 App Engine 帳戶。

如何針對 App Engine 建立 Cloud 專案?

使用 Google Cloud Platform 主控台建立 Cloud 專案

Google App Engine 支援哪些程式語言?

App Engine 標準環境目前支援 JavaPythonPHPGoNode.js。另外,您也可以在網站範本中加入 JavaScript 和 HTML,以便編寫採用 AJAX 技術的網頁應用程式並享有其他優勢。

App Engine 已獲得哪些類型的認證?

App Engine 已順利通過 SAS70 Type IISSAE 16 Type IIISO 27001ISAE 3402 Type II 標準的稽核程序。

我對自己建立的專案擁有哪些權利?

在 Google 和 App Engine 客戶之間,客戶擁有自身已儲存資料、應用程式和專案程式碼的所有智慧財產權;Google 則擁有 App Engine 和 Google Cloud Platform 服務與軟體的所有智慧財產權。

如要進一步瞭解相關資訊 (包含這些字詞的定義),請參閱 Google Cloud 服務條款

如果我沒有帳戶,還是可以開發 App Engine 應用程式嗎?

當然可以!即便您尚未建立 App Engine 帳戶,也可以隨時下載我們的 SDK 著手開發應用程式。

我可以使用 App Engine 建構多少個應用程式?

您可以建立的 App Engine 專案數量取決於多項因素,包括您使用的資源和 Google Cloud Platform 歷來用量記錄。客戶可能會因上述及其他因素而擁有不同的配額。

如果您嘗試超過專案上限,GCP 主控台會提示您填寫申請表單。當您嘗試建立專案,卻已經達到配額上限時,就會發生這種情況。您必須在表單中指定所需的額外專案數量,以及專案對應的電子郵件帳戶、帳單帳戶和預定用途等。

如要進一步瞭解如何申請增加配額,請參閱專案配額申請頁面。

Google App Engine 允許哪些類型的內容?

如對 App Engine 允許的內容類型有任何疑問,請參閱我們的《服務條款》。

我為什麼會收到 /favicon.ico 的 URI 錯誤訊息?

尚未包含 favicon.ico 檔案的應用程式可能會在錯誤 URI 清單中加入 URI /favicon.ico。使用者的網頁瀏覽器會在嘗試載入頁面時要求 favicon.ico 檔案,這個檔案是網站的圖示,通常會顯示在使用者瀏覽器網址列中的網站網址旁。

對您的應用程式而言,favicon.ico 應為靜態圖片。您可以隨應用程式一併上傳 favicon.ico 檔案,並且在 app.yaml 檔案中進行設定,讓應用程式在收到 /favicon.ico 網址的要求時提供圖片。下方內容為 appengine-web.xml (Java) 和 app.yaml (Python/PHP/Go) 中的項目範例。在 Python/PHP/Go 範例中,favicon.ico 位於 static/images。為求簡單起見,相同檔案在 Java 範例中會位於根 (war) 目錄。

Python/PHP/Go

app.yaml
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

Java

appengine-web.xml
<static-files>
  <include path="/favicon.ico" />
</static-files>

什麼是 GQL?

GQL 是搭配 Datastore 使用的查詢語言,Python 應用程式可使用此語言查詢實體。這個語言使用與 SQL 相似的語法從應用程式的 Datastore 擷取整個實體,此外還可篩選屬性、指定結果的排列順序,以及限制傳回的實體數量。您可以參閱這個頁面,進一步瞭解完整的 GQL 語言參考資料。

GQL 是否適用於 Java?

Java SDK 中並未包含 GQL,不過您可以透過 Cloud Datastore API 使用這個程式語言。我們會建議 Java 開發人員使用 JDOJPA,而不要使用 GQL,因為前述兩者具備類型安全特性。使用 JDO/JPA 可讓開發人員在 IDE 中就能發現錯誤,而非等到執行階段才發現,並且能夠降低 SQL 資料隱碼攻擊的風險。

為什麼我的查詢需要索引?我該如何加入索引?

如果您要執行篩選多個實體屬性或依據多個屬性排序結果的查詢,則需要該查詢的索引。針對搭配應用程式執行的查詢種類,您必須具有該種類每項查詢的索引。查詢的 Datastore 索引必須維護及更新以查詢指定方式排序的索引鍵清單,以便快速存取 Datastore 中的資料。如需 Datastore 索引的詳盡說明,請參閱說明文件 (Java | Python | Go)。

使用 Cloud SDK 開發應用程式時,您執行的每項查詢作業都會在必要時自動建立索引。如果您已在將應用程式上傳至網站前進行全面測試,那麼應用程式所需的任何索引都會包含在應用程式的 index.yaml 檔案中。如果您發現任何未涵蓋在開發測試中的查詢作業,可以手動新增索引。如要進一步瞭解如何編寫應用程式的索引,請參閱索引說明文件。

為什麼系統將我的索引標示為「錯誤」(Error)

這些索引可能是爆炸式索引 (Python | Java | Go),或是在您的資料儲存庫中寫入特定實體時發生了其他類似問題。您可以按照查詢 (Python | Java | Go) 和索引 (Python | Java | Go) 中的操作說明,將索引清空並嘗試重新建立索引。

為什麼我的索引長期處於「正在建立」(Building) 或「正在刪除」(Deleting) 的狀態?

即使對應種類的實體數量不多,建立或刪除索引所花費的時間仍可能差異甚大,具體情況取決於 Datastore 的總資料量、目前針對其他應用程式正在建立的索引,以及因使用者要求而產生的 Datastore 負載等其他諸多因素。在某些情況下,索引工作可能需要數小時或甚至數天才能完成。

即便如此,有些時候我們仍可協助處理似乎停滯的索引。如果您認為您的索引出現這類情況,請前往 google-appengine 群組張貼問題。

如何驗證應用程式的使用者?

Users 服務 (Java | Python | Go) 可讓您驗證具備 Google 帳戶 (使用自有 G Suite 網域的帳戶) 的使用者。您可以為應用程式選擇其中一種形式的驗證方法。

如果應用程式使用 Google 帳戶,則當應用程式要求使用者登入時,系統會將使用者導向 Google 登入頁面,以便使用者輸入使用者名稱和密碼,或是建立新帳戶。使用者會在成功登入後返回您的網站,您的應用程式則能透過使用者屬性取得使用者資訊。

App Engine 不支援哪些第三方資料庫?

Python

App Engine 不支援少數的原生 C Python 模組和原生 C Python 模組子集。停用的模組分為以下幾個類別:

  • App Engine 中的 Python 未啟用可維護磁碟資料庫的資料庫
  • 您無法在系統中叫用子程序,因此部分模組 OS 方法遭到停用
  • 無法使用執行緒
  • 基於安全性考量,大部分的 C 語言模組遭到停用
  • 其他受到限制的功能:
    • marshal 遭到停用
    • cPickle 別名化為 pickle
    • 系統呼叫遭到停用

請注意,使用上述任一功能的第三方套件 (例如 PostgreSQL) 無法在 App Engine 中正常運作。

Go

大多數純 Go 套件都能在 App Engine 中正常運作,套件無法運作的可能原因如下:

  • 套件匯入 syscallunsafe
  • 套件使用 cgo 或組件。
  • 套件需要遭鎖定之套件中的寫入磁碟或直接網路存取等功能。

為什麼我的應用程式遭到停用?

如果應用程式不符合我們的條款及細則,可能會遭到停用。另外,如果我們發現應用程式因發生錯誤或其他問題而導致資源使用效率不佳,進而使用過多系統資源,我們可能會停用該應用程式,方便開發人員透過我們的開發 SDK 修正開發問題,並於問題修正完畢後在 App Engine 中重新啟用應用程式。

為什麼我的應用程式超出配額?

App Engine 針對應用程式一天可使用的每個系統資源數量設有配額限制。所有應用程式均有預設的配額設定,也就是「免費配額」,可讓高效率應用程式每個月約有 5 百萬筆網頁瀏覽量。如需進一步瞭解系統配額,請參閱配額說明文件

隨著應用程式擴增,需要的資源配置可能會超過預設配額設定提供的數量。您可以啟用應用程式的計費功能,即可購買其他運算資源。計費功能可讓開發人員提高所有系統資源的限制,並支付費用以得到更高的 CPU、頻寬、儲存空間和電子郵件使用量。

如何檢舉違反條款及細則的應用程式?

如要檢舉違反 App Engine 條款及細則的應用程式,請與我們聯絡。我們會判斷該應用程式是否違規,並視需求與應用程式的開發人員聯絡,以便瞭解違規情況。

我應該使用 SDK 為外部要求提供服務嗎?

根據預設,dev_appserver 是針對本機測試所設計,並且不允許外部連線。您可以在執行時使用 --host <hostname> 標記覆寫這項設定,但我們不建議採取這樣的做法,因為 SDK 尚未加強安全性且可能包含安全漏洞。

如何提供壓縮內容?

App Engine 會儘可能向支援 gzip 的瀏覽器提供以 gzip 格式壓縮的內容。系統會自動採用這項設定,因此您不必修改應用程式。

我們會使用要求標頭 (Accept-Encoding、User-Agent) 和回應標頭的組合 (Content-Type) 來判斷使用者是否能夠利用 gzip 格式的壓縮內容。這種方法可避免熱門瀏覽器中一些常在 gzip 格式的壓縮內容上發生的問題。如要強制提供 gzip 格式的壓縮內容,用戶端可使用「gzip」做為 Accept-Encoding 和 User-Agent 要求標頭的值。如果不存在 Accept-Encoding 標頭,則系統一律不會使用 gzip 格式壓縮內容。

詳情請參閱執行階段環境的說明文件 (Python | Java | PHP | Go)。

App Engine 是否支援安全資料傳輸層 (SSL) (HTTPS)?

有了 App Engine,您就能透過 appspot.com 網域提供安全資料傳輸層 (SSL) (HTTPS) 流量。只要將「secure」參數新增至網址的 app.yaml 處理常式,即可透過這些網址支援安全流量。如想完整瞭解如何設定應用程式來提供安全的流量,請參閱應用程式設定的說明文件 (Java | Python | PHP | Go)。

您也可以使用自訂網域提供安全資料傳輸層 (HTTPS) 流量。如果您採用的自訂網域具有安全資料傳輸層 (SSL) 功能,則也能使用裸名網域。

我可以在專案中使用 Strict-Transport-Security 標頭嗎?

您可以在 App Engine 中使用 Strict-Transport-Security。如要將 HTTP Strict-Transport-Security (HSTS) 標頭新增至應用程式,您必須在應用程式的程式碼中導入標頭,而不是在應用程式的設定檔 (app.yamlappengine-web.xml) 中進行。

我可以透過自訂網域在 App Engine 上使用安全資料傳輸層 (HTTPS) 嗎?

您可以透過自訂網域提供安全資料傳輸層 (SSL)

remote_api 等工具會使用安全資料傳輸層 (SSL) (HTTPS) 嗎?

在傳送電子郵件地址和密碼時,所有採用登入機制 (remote_api、appengine_rpc) 的 SDK 工具都會使用安全資料傳輸層 (SSL)。

Python 和 Go SDK 都能透過遠端連線驗證安全資料傳輸層 (SSL) 憑證,但是您必須先在系統上安裝 ssl Python 模組,才能完成這項操作。如果您使用的是 Python 2.5,可以從 http://pypi.python.org/pypi/ssl/ 安裝模組。如果系統在驗證安全資料傳輸層 (SSL) 憑證時發生錯誤,這些工具就會提供 InvalidCertificateException 來說明問題所在。

根據預設,Java SDK 也會啟用安全資料傳輸層 (SSL)。如果系統在驗證安全資料傳輸層 (SSL) 憑證時發生錯誤,則會傳回 javax.net.ssl.SSLHandshakeException

我想將應用程式對應至裸名網域,例如 http://example.com。

「裸名網域」可讓使用者直接透過網域名稱 (http://example.com) 存取您的應用程式,而不需要使用子網域 (例如 http://www.example.com 或 http://myapp.example.com)。您可以在 Google Cloud Platform 專案主控台中使用裸名網域設定 App Engine 應用程式。詳情請參閱使用自訂網域

如果您使用具備安全資料傳輸層 (SSL) 功能的自訂網域,則會一併支援裸名網域。

靜態 IP 位址和 App Engine 應用程式

App Engine 目前無法將靜態 IP 位址對應到應用程式。為了在使用者和 App Engine 應用程式之間建立最佳的網路路徑,網際網路服務供應商 (ISP) 或地理位置不同的使用者可能會使用不同 IP 位址存取相同 App Engine 應用程式。DNS 可能會傳回不同的 IP 位址,以便在各個期間或從不同網路位置存取 App Engine。

網址擷取、Sockets 和 Mail API 等傳出服務會運用大型的 IP 位址集區。這個集區中的 IP 位址範圍可能會進行例行性的變動。事實上,連續兩個來自相同應用程式的 API 呼叫看起來可能像是從不同 IP 位址發出。

App Engine 目前的外送 IP 位址範圍已在 _cloud-netblocks.googleusercontent.com 的寄件者政策架構 (SPF) 記錄中經過編碼。您可能必須以遞迴方式執行 DNS SPF 查詢,才能解析完整的 IP 範圍清單。一開始先解析 _cloud-netblocks.googleusercontent.com,如下所示:

nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

這項查詢的回應中會包含 App Engine「目前」所有的 _cloud-netblocks (提醒您,這些並非靜態結果:Google 可能會隨時加入新的 _cloud-netblocks 項目)。舉例來說,這項查詢可能會傳回下列內容:

Non-authoritative answer:
_cloud-netblocks.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com ?all

透過這個查詢回應,您接著可以查詢列在回應內容中的每個傳回 _cloud-netblocksN。上述回應範例具有三個 _cloud-netblocksN 項目,因此您可以執行下列三項查詢作業來找到所有 IP 範圍:

nslookup -q=TXT _cloud-netblocks1.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks2.googleusercontent.com 8.8.8.8
nslookup -q=TXT _cloud-netblocks3.googleusercontent.com 8.8.8.8

上述每個項目的查詢作業傳回的 SPF 記錄,即是您可以用於 App Engine 外送流量的 IP 範圍。例如,上述的 _cloud-netblocks1 查詢作業可能會傳回下列內容:

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:108.59.80.0/20 ip4:108.170.192.0/20 ip4:108.170.208.0/21 ip4:108.170.216.0/22 ip4:108.170.220.0/23 ip4:108.170.222.0/24 ?all"

在本範例中,8.34.208.0/208.35.192.0/21 IP 範圍均可用於 App Engine 流量。

請注意,使用靜態 IP 位址篩選並非安全且有效的保護措施。舉例來說,攻擊者可以設定惡意的 App Engine 應用程式,使其和您的應用程式共用相同的 IP 位址範圍。因此,我們會建議您透過 OAuthCerts 採取縱深防禦措施。

我可以透過私人 IP 位址存取 App Engine 執行個體嗎?

App Engine 會在 Google 負載平衡器的動態公開 IP 位址中託管您的服務,因此您無法透過私人 (RFC 1918) IP 位址存取服務。

如何定義應用程式的 Cron 工作?

請參閱不同程式語言專用的說明文件,瞭解如何定義應用程式的 Cron 工作 (Java | Python | Go | PHP)。

什麼是工作佇列?

工作佇列提供一種機制,可讓您動態新增之後才要完成的新要求。如果應用程式需要執行某些背景任務,即可使用 Task Queue API 將任務整理成稱為「工作」的不連續小型單位,並由系統將工作插入一或多個「佇列」中。App Engine 會自動偵測新的「工作」,並在系統資源許可的情況下執行這些工作。詳情請參閱 Task Queue API 的說明文件 (Java | Python | Go | PHP)。

我可以使用 Google 網上論壇的群組授予 App Engine 專案的存取權嗎?

如果您將 Google 網上論壇的群組新增至 App Engine 專案,則該群組的成員可以存取該專案的資源,例如 Datastore、工作佇列、Memcache 等。

如何防止使用者/子網路存取我的應用程式?

App Engine 提供 DoS 保護服務,可讓您將 IP 位址或子網路加入黑名單。詳情請參閱 DoS 保護服務的說明文件 (Java | Python | Go | PHP)。

如何取得應用程式服務中斷和存取能力問題的相關資訊?

如想查看任何 Google Cloud Platform 服務的狀態資訊,請前往 Google Cloud 狀態資訊主頁

以中國來說,App Engine 的存取性較不穩定。請參閱 Google 資訊公開報告,瞭解其他 Google 產品在中國境內的存取性問題。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
App Engine 說明文件