文章段落
繼上次分享《第一次開 GCP VM 就上手!Compute Engine 開機教學》後,相信大家都可以輕易開出一台VM,但其實有很多細節,或是說有一些”雷”是需要避開的。在此跟各位詳細說明:
我們就直接進入開VM的細部設定畫面吧:
主要設定

這個Label可以用來做主機的群組化管理,例如有些VM取為AP,有些取名成DB,有些操作可以藉此套用policy到一群機器,另外由於GCP出帳,會把所有機器的費用合併成一條加總,無法區分哪一台機器花了多少錢,所以也可以透過此功能來區別不同的機器費用,可以參考《【GCP教學】如何掌握各台主機VM的成本?使用標籤Label功能》。
接下來就是GCP機器類型 Machine Type,Region和Zone可以看上次的介紹。

可以看到有許多不同機型,一般用途包含N1, N2, N2D和E2:
N1: 最基本的機器類型,它的CPU和Memory比例是1:3.75,例如n1-standard1就是一個vCPU和3.75GB的Memory,最大包含96個vCPU和624GB的Memory,CPU平台包含Intel Sandy Bridge, Ivy Bridge, Haswell, Broadwell, and Skylake。
N2: 第二代的機器類型,效能比N1好,它的CPU和Memory比例是2:8,最大包含96個vCPU和624GB的Memory,CPU平台包含Intel Cascade Lake。但它不是每一個Region都有,需要查一下這張表格。
N2D:跑的是第二代AMD EPYC Rome處理器,它的CPU和Memory比例是2:8,最大包含96個vCPU和896GB的Memory。
E2:成本最佳化的機器類型(就是最便宜啦~),它的CPU和Memory比例是2:8,最大包含16個vCPU和128GB的Memory,Intel Skylake, Broadwell, Haswell, and AMD EPYC Rome CPU平台。
以上的機器類型都是預先配好的vCPU和Memory,其實都還可以自訂vCPU和Memory喔,它會給你2個Bar,你想配多少就配多少,它有基本單價可以查詢。

除此之外,另外還有記憶體最佳化和運算最佳化的機器類型喔!以下先看記憶體最佳化:

哇,看起來真的好大一台機器!它主要是用來做in-memory資料庫和in-memory 分析用途的,例如SAP HANA、Business Data wareouse、基因序列分析和SQL分析服務等。一台機器一個月大約是12000美元,千萬不要手滑按下去喔!
再來是運算最佳化的機器類型:

C2的運算效能非常高,通常是拿來做密集運算的用途。
除了一般的CPU之外,還可以增加GPU到你的機器上喔!相關的GPU類型可以查詢這裡。

目前GPU只有N1的機器類型有支援,要注意一下喔!
接下來有一個小小的選項,你可以直接部署Container到你的VM上,只要提供container image的路徑並設定相關參數:

如果不是的話,要選擇開機的作業系統image,預設是Debian,但裡面其實有非常多種作業系統可以選擇:

按下Change之後:

你可以看到除了免費Linux,還有授權的Red hat, SUSE, Windows則有Windows Server和SQL Server,以及針對SAP的Redhat for SAP和SUSE for SAP等等。
這裡只是作業系統,還有各種版本可以選擇,例如SQL Server的版本:

從SQL Server 2012~2019都有,非常完整啊!但是要注意,Windows要注意授權License的計算方式,有時候它比主機本身的費用還高,請看這裡。
另外可以選擇開機磁碟的種類和大小,包含Persistent Disk和SSD,Linux的開機磁碟最小10GB,Windows最小是50GB,最大可以到64TB:

除了Google預先準備好的image之外,你也可以提供自己做的image, snapshot或disk:

Custom image表示你可能已經有一台主機,預先裝好相關的應用程式和資料,你不想要每次開新機器都要重新安裝或設定,你就可以把現有的主機Disk做出一個image,之後每次開相同機器都用這個image來開就就好,很方便。
Snapshot是備份的快照,是針對你現有主機所做的備份,有時候萬一主機有任何狀況不能運作時,可以從快照來還原成主機。
Existing Disk就是你手上的磁碟了,直接用這顆磁碟來開機。但要注意,用image和snapshot都是用新的Disk,所以能夠調整大小,但用現有磁碟開就不能,你要先去擴充。
接下來到了比較特殊的地方,GCP Identity and API access:

首先是Service Account服務帳號,就是指「不是真實用戶」的帳號,專門用來給應用程式做的身份識別,主要是安全性的關係,不要讓你把使用者帳號密碼寫在程式碼或主機裡面,才不會容易被駭客竊取,而是用Service Account和對應的key。

我們預設用的是Compute Engine default service account,也可以每次開機器,都用不同的Service Account,可以確保它的權限不會太大,就算被駭客竊取,也無法做到大範圍的破壞。
再來是Access Scope:

指的就是Service Account在這台機器上可到達的權限範圍,default access基本上只有唯讀Cloud Storage、寫log到Stackdriver Logging和Monitoring (這樣你才能查看Log和監控效能)。
Full access則是GCP上所有API都有權限去呼叫,但權限太大了最好不要選這種。
最保險的是Set access for each API,就是一個一個API由人工去設定,才不會開放太大的權限。
再來是基本防火牆:

如果是web應用,就可以勾HTTP or HTTPS,它除了會自動設定防火牆規則,也會自動配發一個外部IP給這台主機。
再往下到了進階設定,這裡太細我就先挑重點講了:

點擊展開之後分成GCP Management, Security, Disks, Networking, SoleTenancy:
主機管理Management

首先是Management有一個 “Enable deletion protection”防止VM被誤刪,設定之後,除非有特殊權限的人去更改它,否則這台VM就不給刪除。

Reservations:因為GCP對我們來講是無限資源的雲端,但實際上仍然是有限的,並不是隨時要開個50或100台就可以直接開,所以我們可以預先開好Reservations但不用開機器,等到萬一需要大量機器時,就可以用Reservations來開,但注意這也是需要費用的喔!

Startup scipts就是開機時,預先執行的指令,您可以設定它先裝好一些應用程式,這樣就不用自己再手動去做。

Preemptible VM指的是你可以用原價20%的費用去使用閒置的主機,去做一些可隨時中斷的工作,因為這些VM最多只能連續用24小時,時間到機器會自動收回去。

這兩個是維護期間的設定,因為Google也要定期維護一下基礎建設,On host maintenance指的是維護時要把你的機器快速移到其他硬體上,或是直接關機。(當然是前者比較好)
Automatic restart指的是如果硬體有一些狀況,例如維護事件、軟硬體錯誤等,要不要自動重開機。這個選項要取捨,如果是Web的話自動重開是沒什麼衝擊,但如果是大量交易處理的資料庫,自動重開可能會導致讀寫的問題。
此時可能要選”Off”,但你反而要主動定期維護主機,或是重開機,讓系統flush一下,否則萬一碰到嚴重的硬體錯誤,它掛了開不起來,就真的糗大了!
主機安全性設定

Shielded VM指的是開機的安全檢查機制,我們下次用專文來解釋。
SSH key,就是登入VM時,必須要有對應的key才能登入,如果沒設定的話,只要在這個GCP專案有權限的人都可以登入。
Block project-wide SSH keys指的則是,GCP有整個專案層級的key,所以在這專案有權限的人,登入時會自動帶key去驗證,如果為了限制特定人才能登入,最好勾選它。
Disks磁碟刪除與加密設定

Deletion rule是問你,刪除VM時,要不要順便刪除Boot disk。
Encryption是加密選項,在GCP上預設所有的資料在儲存時都用Google的key來加密,你也可以用KMS管理加密的key (CMEK),或甚至都在地端管理key (CESK),我們後續再專文討論。
再來是除了開機磁碟以外,你也可以外加Disk,通常也建議這麼做,讓Boot Disk和Data Disk分開,萬一機器有問題掛掉,還可以開一台新的機器,再把Data Disk掛上去:


Network網路相關設定
Network tags是針對防火牆的用途,GCP的防火牆可以讓你不用一台一台機器設定規則,你可以把相同用途的機器設定一樣的Tag,例如網站的都設為Web,資料庫都設為DB,當防火牆規則設定套用到”Web”的機器時,所有Tag裡有Web的主機都會套用相同的防火牆規則。
Hostname是主機的完整名稱,通常不用再特別去調整。

簡單說就是內部網卡IP,你也可以多個IP,但是不能在同一個network,必須要有另一個network才能再多一個IP。我們點擊鉛筆來看:

因為一個GCP專案可以有多個Network,預設是default,如果你要把主機開在其他Network,記得要調整。
重要的是External IP,目前是Epermeral (揮發性),可以說是動態IP,如果機器重開IP可能就變了,如果要固定下來,可以直接在選單上建立一個靜態IP:

對了,如果VM刪除,靜態IP不會跟著一起刪除,要記得去刪。因為IP沒在用,也是會收錢的喔!
Sole Tenency一單用戶群節點

通常開VM都是隨機在Google的實體機上開,你手上的5台VM會散落在不同的機器上。而有些用戶因為法規需求,必須把VM開在Google Data Center同一台實體機上,他們會參考這個頁面操作開好實體機,並且設Label,例如AP。然後在開機器時,這裡也指定Label為AP,所開的機器就會直接在這台實體機上建立起來。
最後,在Create最下方還有GCP REST and command line:

因為GCP上所有的資源都可以透過API去呼叫,所以點擊REST就是直接提供Request寫法給你:

點擊Command Line就是直接給你可立即執行的指令:

這段指令就可以存起來,以後要開機器可以去Cloud Shell直接貼上這一段,就不用滑鼠在那邊點來點去了,超方便啊!!
哇!完整介紹完了開VM的過程,各位有沒有覺得眉角很多啊!?希望各位可以深刻了解當中的細節,避免踩到一些雷喔!!
▋延伸閱讀:
・第一次開 Google VM 就上手 – Compute Engine 操作簡介
・【GCP教學】如何輕鬆備份 GCP 上 VM 的資料?快照 Snapshot 自動備份設定教學
・使用 Google VM 的5大常見錯誤 – 有一種叫忘記關機!
・GCP 常見問題與教學―掛載硬碟錯誤導致 VM 開機失敗
