在概念上,大家的程式幾乎都一樣的,那我就不用為每一種類型建一個 AMI 作為爬蟲的樣版。若將 ec2 instance 想成物件,大概是這種感覺:
Crawler c = new Crawler('type')c.run()
我們只需在『建構子』指定不同的參數,當 ec2 instance 建立起來後,讓它『找尋生命的意義』(找到自己的參數)然後開始工作。有幾個方式能做到 cloud-init,這是蠻流行的方式,我曾試著使用它加速 instance 的初始安裝。在 ec2 instance 上能塞資料的地方很多,而我們的參數也不佔什麼空間,今天靈機一動,決定將它放到 tag 內,若將它表現成 java code 是這種感覺:
Crawler c = new Crawler(EC2Instance.current().tag('type'))
c.run()
所以,我們需要做的事有:
- 撰寫啟動 script 並讓它接受參數指定我們要啟動的程式
- 實作取得特定 tag 的方法
本來以為 ec2 instance metadata 就會有 tag 資訊,查了一些資料發現在幾年前有人提議要將 tag 資訊加入,但目前仍沒看到。好在 aws api 蠻容易使用的,我們可以配合 ec2-metadata query tool 先取得 instance id,再查出此 instance id 擁有的 tag:
..
..
所以,實際上我們實作時,決定用 tag 內 handleClass 的值當作 Crawler 啟動參數:
Crawler c = new Crawler(EC2Instance.current().tag('handleClass'))
c.run()
將它設置好,建成 AMI。而建立 ec2 instance 時,記得指定需要的 handleClass 就能依需要動態建出不同功用的 instance。
沒有留言:
張貼留言