前幾年聽說甲骨文的 Oracle Cloud 上面有免費額度的機器可以用,最近想說把一些小程式移到上面多一個分流

  • 部分服務有 Always Free 的額度( CPU < 4 & RAM < 24,儲存空間 200GB),免費帳號最多能開兩台虛擬機,沒人知道何時會變更政策。
  • 亞洲在日本、首爾等地有機器,但沒有在台灣。Oracle Cloud regions,聽說台灣連到日本韓國這些速度都不錯。
  • 歐美地區很好搶,幾乎找不到有人寫什麼設定程式自動掛機搶免費VM的教學,反而簡體中文的教學非常多,難道中國人特別愛寫程式、人人都會架站嗎? 聽說都是拿來架 VPN 翻牆科學上網的。

但是因為額度有限,在網頁上選完配備跟 OS 之後按 Create,基本上都會出現容量不足的訊息。

Out of capacity for shape VM.Standard.A1.Flex in availability domain AD-1. Create the instance in a different availability domain or try again later. If you specified a fault domain, try creating the instance without specifying a fault domain. If that doesn’t work, please try again later. Learn more about host capacity.

之前在用 OpenShift 等各種免費服務時被都更怕了, Oracle Cloud 也不時聽到有人常常莫名免費機器被停用,想說都過這麼多年了,應該很少人在搶吧?
結果想搶一台東京區的 VM.Standard.A1.Flex 還是搶不到,能直接從網頁上就選成功? 看來還是不可能的任務,所以需要用程式來搶。試了一下發現網路上有些教學似乎需要補充,也給自己留個紀錄。

在瀏覽器 Console 裡面跑 JS

看到一篇兩年半前的教學,開瀏覽器的 devools,在 console 貼一段 js code,跑 for loop 定時去觸發那顆 Create instance 的按鈕,看起來最簡單。
但是把迴圈裡的 querySelector 拿出來試一下,那個按鈕現在似乎已經被換成其他功能了,執行之後是一個 support 的視窗跳出來。
而且這樣電腦要一直開著,網頁一段時間有時候會被登出,必須要找其他方法。

在 Windows 上面用工作排程器自動執行 Shell Script

參考【教學】Oracle Cloud 用 OCI 官方工具自動掛機搶免費VM – iZO手札 的步驟,安裝 Oracle Cloud Infrastructure (OCI) 的 CLI 套件、產生金鑰、把公鑰貼回去 Oracle Cloud 的 API Key、把主機建立條件的指令組合好,開啟 Windows 的「工作排程器」執行 sh 檔。

可能會遇到兩個問題:
1.原教學的馬賽克打太大,界面跟現在的長得有點不一樣,不知道 User OCID 跟 Tenancy OCID 是要去哪邊複製? 參考官方說明 Oracle Cloud Infrastructure Documentation – Required Keys and OCIDs,User OCID 是在 My Profile 裡面,不是用 Identity domain 裡面的 OCID。Tenancy OCID 就在 Tenancy 裡面。
2.執行 sh 時出現 “cannot be loaded because running scripts is disabled on this system”,參考網路上的說明,在 Powershell 裡面貼指令改權限 Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

但是跑了好幾個小時還是 Out of host capacity,不知道要跑多久,決定丟到線上主機去跑,這樣 24 小時都能搶,長期抗戰。

在 Ubuntu VPS 上面用 crontab 跑 Shell Script

在付費的 VPS 上跑程式,搶免費的主機,這是什麼神奇的思路? 月費是固定的,就當作練身體嘛!
參考甲骨文 Oracle Cloud 無人值守開機器 | jkgtw’s blog,然後再做調整,該文用的是 Debian,我是用 Ubuntu,可能因為如此導致一些操作不太一樣。

1.一樣安裝 OCI 套件 bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)",沒有特別改安裝設定,就這樣裝下去。
2.裝好之後檢查版本 oci -v
3.一樣進行 oci setup config的設定,把 User OCID 跟 Tenancy OCID 那些貼上去。
4.用 cat (concatenate)指令 cat /(XXXXXXXX)_api_key_public.pem,把剛剛建好的金鑰檔案內容顯示在 Console。
5.把 Console 顯示的金鑰貼回去 Oracle Cloud 網頁上的 API Key 設定區。
6.執行一下 oci iam availability-domain list 看看能不能正常跑出 data:{compartment-id:’xxx’, id:’xxx’, name: ‘xxx’}。
7.開編輯器建立一個檔名叫 ociauto.sh 的檔案 nano ociauto.sh,剛剛 Windows 步驟組好的 sh 檔案基本上可以搬過來用,可以直接執行指令看看能不能得到 Out of host capacity 的結果。
8.把權限開給 shell script chmod +x ociauto.sh
9.開啟排程程式編輯器 crontab -e
10.間隔 10 分鐘跑一次,把執行結果存在 log 檔 */10 * * * * /bin/bash ociauto.sh > /home/ociauto.log 2>&1,存檔退出編輯區。
11.查看 log 檔的結尾內容 tail -F /home/ociauto.log,應該會出現 Out of host capacity 或 LimitExceeded 或 “Too many requests for the user 的訊息。
12.瀏覽 Oracle Cloud 的 dashboard,看有沒有多出新的機器。

這邊會遇到幾個奇怪問題
1.步驟 5 的 Oracle Cloud 網頁應該是有改版,多了一行 Paste the contents of the text box into your ~/.oci/config file. 的提示,但是用 nano 指令把檔案叫出來看,key_file=在中間其中一行,已經自動設好了,反而只有在 Windows 要自己補上去。
2.步驟跟 OCID 應該都沒錯,但第6步驟都是 401 error,重做超多遍(順便學了 rm 指令怎麼用),最後想說照指示跑一遍 oci iam availability-domain list --debug 看詳細的錯誤訊息? 結果突然一切又都正常了。
3.排程設定失敗,步驟 11 的 tail 都找不到檔案。
4.步驟 6&7 可以正常執行,排程有執行,但是 tail 裡面只有 oci: command not found 的錯誤訊息
先用 which oci 得到一組 bin 裡面的路徑,然後把 ociauto.sh 檔案裡面開頭的 oci 指令換成剛剛那組路徑。
5.終止執行中的指令要按 Ctrl+C,查系統版本 cat /etc/os-release。

執行程式看起來是不太耗效能,已經跑了超過 24 小時,不知道多久才能搶到…


2022/8/28 UPDATE

想不到文章發佈之後過沒幾天,Heroku 發公告要停止部分服務的免費額度。
於是我又測了幾個可以跑 server side (後端)程式,而且有免費額度的服務,如果對於設備規格需求不是很高,RAM 512MB 以下也能跑的,可以前去觀看我的使用心得: 幾個替代 Heroku 免費測試執行 ASP.Net Core Docker 的文字辨識 OCR 程式

2022/10 UPDATE

過了整整一個多月,終於在 9/20 終於搶到第一台…

提供測速資訊

Japan East(Tokyo),VM.Standard.A1.Flex
因為是在海外,latency 難免多一咪咪,
上下行頻寬其實還可以,比一些國外主機號稱有台北機房,但是頻寬只有給到 100Mbps 的還強。
I/O Speed 比較低是因為 Volume Size and Performance 只有選最低的 10 而已,操作介面上最高可以選到 120。

剛好在 YT 看到有人把比較完整的流程也貼出來,覺得文字說明不夠詳細的人可以參考看看。

前幾分鐘大概是在講如何註冊跟開機器,台灣人的地區跟信用卡號基本上直接打應該都會過,沒有影片中這麼麻煩。

建立 SSH 連線後,影片大約 8 分鐘會開始安裝 LNMP 的服務器腳本,
但這個包好的 LNMP 安裝腳本在這陣子發生 LNMP 腳本被金华市矜贵网络科技有限公司投毒事件,安裝腳本內會安裝持續運作的不明程式,請小心使用。

影片大約 9 分鐘 10 秒左右開始講到開 80 port 跟 443 port
到 Virtual cloud network 的 Security Lists 裡面,加入兩條 Ingress Rules:
– Destination Port Range: 80,Source CIDR 0.0.0.0/0
– Destination Port Range: 443,Source CIDR 0.0.0.0/0

12 分左右開始是講如何架 VPN,台灣人可能比較不需要…


2023/1 更新
官方的 Oracle Cloud Always Free Resources 更新了關於機器閒置 Idle Compute Instances 的條款,以後佔著機器放著沒在用的會被收回。

Reclamation of Idle Compute Instances
Idle Always Free compute instances may be reclaimed by Oracle. Oracle will deem virtual machine and bare metal compute instances as idle if, during a 7-day period, the following are true:
CPU utilization for the 95th percentile is less than 10%
Network utilization is less than 10%
Memory utilization is less than 10% (applies to A1 shapes only)