教學目標

學習 Google Cloud Platform 的心得分享,主要將個人部落格從 Amazon Web Services 的 Amazon EC2 雲端服務搬移至 Google Cloud Platform 的 Google App Engine 雲端服務。

重點概念

首先最近花了將近二個月的時間陸續完成 Google Cloud 所提供的專業課程,分別為「Data Engineering with GCP」、「Cloud Engineering with GCP」和「Cloud Architecture with GCP」,在專業課程,主要學習有關資料工程、雲端工程和雲端架構的基本知識,以及實驗環境的練習操作,並且在此期間也藉由面試測驗獲得全新的工作機會主要提供客戶有關 Google Cloud Platform 的技術支援和最佳實務的專業服務,同時這也是個人職涯規劃中在 2020 年最想要快速累積的為客戶服務的工作經驗和雲端平台的專業技能,以及在三個月內考取上述的 Google Cloud 專業證照。

接著與雲端環境相關的工作通常是個非常具有挑戰的工作,除了需要快速學習全新技術之外,還要整合實作的專業能力,此時我想到的能夠在一天內完成的整合實作任務就是將「Leo Yeh’s Blog」個人部落格從 Amazon Web Services 的 Amazon EC2 雲端服務搬移至 Google Cloud Platform 的 Google App Engine 雲端服務,而所謂雲端服務基本上可以分為四大類型,分別為運算資源、儲存、網路和專項服務,至於此次搬移的任務主要是以運算資源為主,所謂 App Engine 雲端服務主要是在全代管的無伺服器平台上建構具備高擴充性的應用程式,剛好我的部落格是以 Node.js 的 Hexo 網誌框架所進行開發,所謂 Hexo 主要是一個快速、簡單且強大的網誌框架,並且使用 Markdown 格式引擎解析文章,所以能夠在幾秒鐘內,透過漂亮的主題產生靜態檔案。因此我們能夠透過 Google Cloud Shell 安裝 Node.js 的 Hexo 網誌框架,再將所有 Markdown 格式的文章檔案以打包為 tar.gz 壓縮檔的方式搬移至 Google Cloud Shell 的環境中,當完成之後我們就能夠透過 Hexo 網誌框架中的 Markdown 格式引擎解析文章,在幾秒鐘內透過漂亮的主題產生靜態檔案讓網際網路的使用者能夠直接閱讀文章,所謂 Google Cloud Shell 主要是用來管理 Google Cloud Platform 上託管資源的終端機環境,至於要如何整合實作,可以透過搜尋「GAE Hexo」關鍵字找到幾篇步驟教學的文章。

再來當我們透過 Google Cloud Shell 測試「Leo Yeh’s Blog」個人部落格能夠正常顯示之後,就需要建立「app.yaml」設定檔,所謂「app.yaml」設定檔主要是在 App Engine 中的 Node.js 應用程式的使用設定,這個檔案包含了 CPU、記憶體、網路和磁碟資源、資源調度以及環境變數在內的其他一般設定,同時指定 Node.js 應用程式所有的執行階段設定,包含版本和網址。這是非常重要的設定檔,因為我們會將產生至「public」資料夾中的靜態檔案透過設定讓網際網路的使用者能夠直接閱讀文章。當我們完成「app.yaml」設定檔之後,此時 App Engine 就會提供公開存取應用程式的網址,像是「 https://leoyeh-blog.appspot.com/ 」,其中「leoyeh-blog」為 App Engine 所對應的專案名稱,請注意必須先建立專案才能夠建立 App Engine 應用程式,以及一個專案僅會有一個 App Engine 應用程式,但是我們能夠針對應用程式進行版本控管和分流測試。

app.yaml 設定檔範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
runtime: nodejs10
service: default

# for instance
instance_class: F1
automatic_scaling:
min_instances: 0
max_instances: 1

handlers:
- url: /
secure: always
redirect_http_response_code: 301
static_files: public/index.html
upload: public/index.html

- url: /(.*)/$
secure: always
redirect_http_response_code: 301
static_files: public/\1/index.html
upload: public/(.*)/index.html

- url: /(.*)
secure: always
redirect_http_response_code: 301
static_files: public/\1
upload: public/(.*)

最後 Google App Engine 應用程式預設設定更支援自訂網域和 SSL 憑證,而「Leo Yeh’s Blog」個人部落格的「leoyeh.me」自訂網域我主要是在「GoDaddy」網站所購買,若是要移轉至 Google Domains 中,則需要付費,所以就還是透過「GoDaddy」網站進行「A Record」、「AAAA Record」和「CNAME Record」的相關對應記錄設定,當然在此之前我們必須先設定「TXT Record」以利讓 App Engine 應用程式驗證自訂網域,請注意新增記錄設定需要時間同步,所以在設定的過程中有機會遇到因為無法從 DNS 記錄中找到所對應的別名,導致 Google 無法正常自動產生 SSL 憑證,更進一步導致自訂網域無法正常存取,此時別多個耐心等待一段同步的時間,等待過程中請逐一確認設定是否皆正確,若是設定皆正確,但還是無法正常自動產生 SSL 憑證,此時再刪除 App Engine 應用程式相關設定重新建立一次理應就能夠解決問題了。

總結將「Leo Yeh’s Blog」個人部落格從 Amazon Web Services 的 Amazon EC2 雲端服務搬移至 Google Cloud Platform 的 Google App Engine 雲端服務的整合實作任務主要花費我將近 8 個小時的時間,相當於一天的工時,其中有 50% 以上的時間主要用於故障排除 (Troubleshooting),而故障排除這也是我在 2020 年主要會為客戶所提供的專業服務,全新的雲端職涯旅程也請各位多多指教。

相關資源