/ Amazon AWS

[AWS] 雲端之出來跑的總是要還

人品不好有個缺點,除了 AWS 申請不過、Snapshot 不小心死掉、EBS 掛不起來之外,這次 Amazon EC2 放大絕了!就在幾天前的某個月黑風高(?)的夜晚,正在 co-work 的同事突然傳訊息來,說測試機的 SSH 打不進去了。

就此,展開了一連串奇妙的旅程(!?)

好雲端,不用嗎?

相信我在 AWS 上面撞牆的時間,應該也不算少了(默,但是,這次遇到的事情實在有點誇張。大家都在吵雲端,好像什麼東西不丟到雲端就不夠潮一樣。我可以說,雲端好潮啊,當雲上面的東西都飄走之後,真的是潮到我眼眶快都出水了。

這次事件其實蠻弔詭的,首先是 SSH 無法認證,然後同一組 pem key 在其他的機器上面運作正常。接著是部份的網站出現 Fatal Error,這點我就覺得有鬼了,沒有人會去動 code 的地方,會莫名奇妙出現錯誤!?

然後,人品沒有點滿的我,赫然發現 EBS 似乎怪怪的,然後就先把有問題的機器給 Stop 下來,然後,

就開不了機了就開不了機了就開不了機了就開不了機了

我一定是人品大爆炸才會這樣的(欸

這件事情讓我想起之前 AWS 出狀況,讓 twitter 等服務受到影響的那個事件。後來陸續有一些檢討文,不過大部分不是檢討 AWS 怎麼搞的,而是檢討服務的備援機制之類的事情。果真,有些事情還真得是遇到了,才知道到底是怎麼一回事。

實際情況

我遇到的事情太多,所以列出這次的就好,

  1. SSH 登入失效,pem key 確認無錯誤
  2. Instance System Log 貌似有重開機的紀錄
  3. 機器停機(Stop)之後,再起不能
  4. EBS Volume 狀況看似良好
  5. 同樣的情況,在其他機器並無異常情況
  6. 同區的機器似乎有經過 AWS 機器維護的動作

通常,AWS 機器要維護的時候,他會發信給你,通知你說機器有維護。不過,這次似乎是很突然的出狀況,而且,我也沒有收到信說我的那一區(美東)的機器有要維護的訊息。就這樣死的不明不白啊(倒

解決辦法

這是有個大前提,你的 EBS Volume 還在,不管他狀況是不是良好,只要他是 available 的情況下都有機會救回來。你不要手賤把壞掉的機器特米內特(Terminate)掉之後,才來哭說怎麼 EBS Volume 不見了,我是不會理你的(推走

Make your old instance EBS available

Attach Old EBS

NO NOT TERMINATE YOUR INSTANCE EVEN IF THEY ARE FAILED, JUST STOP

  1. 先把舊有的機器所使用的 EBS Volume 釋放(Detach)掉

  2. 開一個同區(region)的新機器(重要!不同區無法跨區掛載 EBS Volume

  3. 將你原本那台的 EBS Volume 掛載到新機器上

    Attach Old EBS

    Attach Old EBS

  4. 從新的機器把磁區 mount 起來

  5. 開始救資料

然後默默經過了三個小時,正直與善良網站與資料庫都回來啦!資料庫?由於是測試機,所以我當然不可能放在 RDS 上面浪費錢,你說是不是!

實際上,這種作法可能不是最好,但是起碼能把資料都拉回來。不過,也因為他是測試機器,所以都不太關心異地備援的事情,現在就是想到去做一下 Snapshot,確保東西可以完整。不過,我比較擔心的是人品問題,每次 Snapshot 我都無法順利建立回來,實在是頗傷腦筋(欸

所以我順手做了一個 AMI 放在 S3 保心安就是了。

小結

遇到這種要開新機器來解決的情況其實不多,除了無法開機跟 SSH 無法登入外,幾乎不會這樣幹。欸,不要懷疑,當你的 SSH 壞掉,你是必須要用新機器去把壞機器的 authorized_keys 得改好才行。

當然,如果只有 SSH key 壞掉那倒是還好,這次我保險起見,還是重新建立一個 EBS Volume,畢竟我也不知道他到底哪裡壞掉,看得到的只有 SSH 有問題,看不到的還不知道有多少呢(抖

出來跑的,總有一天要還啊(茶