上一篇寫到的 Oracle Cloud 裝 VPN,似乎很多人有興趣。。

但是都被卡在「註冊帳號」跟「開機器」這兩個問題,不得其門而入~

註冊帳號的問題其實很玄,甲骨文去年剛開始推出終身免費的時候馬上就被一堆人刷爆

現在他們為了防止濫用,所以在剛開始註冊帳號的門檻就嚴格把關

而且有越來越嚴的跡象,然而註冊帳號失敗可以找客服處理,但過程異常複雜,詳細就不說了,不在本篇討論範圍

👆 這錯誤信息應該是大家都見過的?

蒐集必要資料

先說明我這裡使用的是 Firefox 瀏覽器,你如果用其他瀏覽器可能會稍有不同,但大同小異

首先打開 Oracle Cloud 管理後台網站,然後去建立一個運算虛擬機頁面

先把你要的系統還有配置與 ssh key 通通選好加上,此時不要急著按左下角「建立」按鈕

👆 選好填好各種資料,先不要按「建立」

按下鍵盤上快速鍵「Option + Command + E」,叫出開發者工具的「網路」視窗

會看到如下圖開發者工具,並在「網路」視窗

👆 接著我們就可以按下左下角的「建立」按鈕了

按下去之後,沒意外應該又會跳出「已經額滿」的錯誤提示,不過沒關係

你這時應該會看見開發者工具的網路欄位出現很多內容,如下圖

依照上圖找到「instances」跟著箭頭數字 1 ~ 2 點選,就會看到數字 3 ~ 8 的資料

這些都是等下 CLI 開機器時會需要用到的參數,請把 3 ~8 全部內容複製記錄下來

接下來點網頁右上角的「設定檔」頭像 icon,點一下自己 email 的那個選項

如上圖,會看見 OCID(user)的帳號字串,點一下複製,同樣記錄下來

繼續在網頁右上角的設定檔,這次點「租用戶」那個選項

如上圖,這裡是 OCID(tenancy)的帳號字串,同樣也是複製起來,稍等 CLI 設定過程都會用到

此時蒐集到的資料應該有以下幾個:

  • availabilityDomain
  • compartmentId
  • subnetId
  • ssh_authorized_keys
  • shape
  • imageId
  • ocid1.user
  • ocid1.tenancy

安裝設定 OCI 工具

現在要安裝 Oracle Cloud 專屬的 OCI 指令工具,官方有放在 GitHub 網站上面

有興趣可以去看看原始碼: https://github.com/oracle/oci-cli

他可以安裝在 macOS / Linux 系統上,也有 Windows 版本,以下我使用的是 Debian 系統安裝

就算系統不同,但主要過程應該是大同小異的

# 開始安裝
$ bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"

安裝過程很簡單,看不懂就全部按下 Enter 保持預設即可

稍等片刻以後,應該就會看到安裝成功,然後可以下個指令檢查看看安裝的版本

$ oci -v

如上圖,正確顯示版本號碼的話,就表示已經可以開始使用 oci 指令了

接著開始做一些帳號設定,把你 oci 工作環境跟 Oracle Cloud 上面帳號連起來

$ oci setup config

如上圖,設定過程很簡單,主要是兩個 OCID 複製貼上,然後輸入你帳號所在區域

東京就是 ap-tokyo-1、首爾就是 ap-seoul-1

其他不懂的話就按 Enter 保持預設即可,最後會產生你帳號的公開密鑰跟私人密鑰

接下來我們要把你的公開密鑰貼到 Oracle Cloud 管理網站上面

# 以下路徑每個人有可能都會不同,請根據自己情況修改
$ cat /home/pi/.oci/oci_api_key_public.pem

👆 公開密鑰會長的跟上圖類似,全部複製起來

👆 回到 Oracle Cloud 管理網頁的設定檔

👆 新增公開密鑰

👆 貼上剛剛出爐的公開密鑰,並按下「新增」按鈕即可

完成以後,我們再回到終端機中,輸入以下指令,驗證一下有沒有問題

$ oci iam availability-domain list

如上圖,沒問題的話,即會回傳上圖那樣的東西,現在可以終於開始建立機器了~

# 以下內容請根據自己情況修改,絕對不要照抄
$ oci compute instance launch --availability-domain VpDT:AP-TOKYO-1-AD-1 --image-id ocid1.image.oc1.xxxx --subnet-id ocid1.subnet.oc1.xxxx  --shape VM.Standard.E2.1.Micro --assign-public-ip true --metadata '{"ssh_authorized_keys": "ssh-rsa xxxxx"}' --compartment-id ocid1.tenancy.xxxxx

2021/06/14 Update
甲骨文新增 ARM 機器,如果是要開 ARM 的話,請多加以下兩個參數
--shape-config '{ "ocpus": 4, "memoryInGBs": 24 }'

上面指令輸入完畢後,就會回傳類似下面資料

ServiceError:
{
	"code": "InternalError",
	"message": "Out of host capacity.",
	"opc-request-id": "0EBE13DB9B58469C929xxx"
	"status": 500
}

看到這個回傳代碼 500 就是「額滿」的意思,表示你的指令輸入沒錯

接下來我們把上面指令放到一個 .sh 檔案裡面再去建立 crontab 讓系統自動定時執行 .sh

$ nano ociauto.sh

貼入以下內容並保存:

#!/bin/sh

/home/pi/bin/oci compute instance launch --availability-domain VpDT:AP-TOKYO-1-AD-1 --image-id ocid1.image.oc1.xxxx --subnet-id ocid1.subnet.oc1.xxxx  --shape VM.Standard.E2.1.Micro --assign-public-ip true --metadata '{"ssh_authorized_keys": "ssh-rsa xxxxx"}' --compartment-id ocid1.tenancy.xxxxx

接著執行下面指令新增系統定時執行任務:

# 先賦予 ociauto.sh 執行權限
$ chmod +x ociauto.sh
$ crontab -e

進入後,在最底下加入下面一行

* * * * * /bin/bash /home/pi/ociauto.sh > /home/pi/ociauto.log 2>&1

保存退出後,系統就會每一分鐘執行一次建立虛擬機的指令

並且會把每次執行結果記錄到 ociauto.log 裡面去,想要即時看到每次執行結果可以透過以下指令

$ tail -F ociauto.log

如果新增虛擬機成功的話就會出現類似以下資料

{
	"data": {
	"agent-config": {
		"is-management-disabled": false,
		"is-monitoring-disabled": false
		},
		"availability-domain": "VpDT:AP-TOKYO-1-AD-1",
		"compartment-id": "ocid1.tenancy.oc1..xxxxx",
		"dedicated-vm-host-id": null,
		"defined-tags": {
			"Oracle-Tags": {
			"CreatedBy": "[email protected]",
			"CreatedOn": "2020-02-21T11:16:35.125Z"
			}
......

一個免費帳號最多只能開兩台虛擬機,所以在成功建立兩台虛擬機以後,錯誤資料會變成:

ServiceError:
{
	"code": "LimitExceeded",
	"message": "The following service limits were exceeded: vm-standard-e2-1-micro-count. Request a service limit increase from the service limits page in the console. ",
	"opc-request-id": "E652F9E62E484Cxxxxxx"
	"status": 400
}

此時記得再回去 crontab 裡面,把新增的那個定時執行指令,整行刪除保存退出即可

目前已知每隔幾天甲骨文都會放出一些名額,基本上也是天天都有聽到有人新開到機器

北美跟歐洲機器很好開,讓大家都卡關的是韓國首爾以及日本東京

而且甲骨文似乎把驗證帳號變的更嚴格了,最近許多人都收到信用卡二次驗證扣款的通知

如果沒能通過的話,可能帳號會直接被關閉,所以填寫註冊資料時候真的不能亂寫阿

不然哪天被砍帳號或者砍機器也真的只能怪自己了。。。

就先這樣~希望大家都能順利開出機器~😉

本文參考內容:

撸免费的oracle cloud服务器并使用脚本自动化部署云服务