DevOps-Automation with Python 10
接著要來嘗試建立EC2機台Volume的Snapshot
這邊所謂的Volume即是AWS的Storage的元件
也就是用來儲存EC2機台資料的元件
每一台EC2機台都有各自的Volume
概念相當於EC2的硬碟
當我們移除EC2機台,這些Volume也跟著移除
而講到Volume建立的Snapshot就相當於Volume的複製品
通常用來備份(Backup)與還原(Recovery)
而進行Snapshot的工作理所當然地會希望是自動化的方式
在當EC2掛了,或其Volume喪失的情況下,會有一份Snapshot可供還原
若是有例如15台EC2機台要進行備份
其中可能掛了三台等各種狀況,就會需要能夠還原的Snapshot存在
所以日常的備份就會變得非常重要
並且不用手動做這件事也同等重要
Create 2 EC2 Instances
先建立兩台來示範其Volume的備份使用
簡單開個最小的就好了
然後分別給這兩台上tag
一台給dev,另一台給prod
也可以直接在EC2瀏覽頁面上面新增:
這時候可以來檢視Volume:
看到:
上面畫面往右拉會看到對應掛上去的EC2機台:
就相當於硬碟掛給EC2機台使用
而另一個Snapshot看到:
接著就要透過Python來撰寫程式自動化地週期性備份成Snapshot
Backup Implementation
建立新的py檔案叫volume-backups.py
首先要list出既有的volumes
到boto3 library的文件的EC2中查找:
裡面可以拿到的回傳值就會有volume的id,後面備份會用到:
可以先不給參數並印出所有資訊:
執行後看到:
關鍵是後面要建立snapshot,查找文件:
看到要建立snapshot其中VolumeId是必要傳入參數
所以可以繼續寫成:
也就是印出新增的Snapshot物件
執行後看到:
在AWS頁面看到Snapshot正在建立中(需要一點時間):
大概十來秒就完成一個
然後我研究了一下Snapshot會有對應Volume ID外:
點到該Volume ID會進一步看到:
而要自動化地進行備份可以參考前面的schedule的Library
可以將剛剛的備份程式片段Function化,並整體修改為:
上面的5秒只是示範,實際可能是用day
執行後看到:
AWS上面多了額外兩個snapshot:
然後程式就掛了:
因為5秒太短,其中一台可能還在備份,就又被驅動執行備份,導致失敗
正常使用應該改成:
而接下來我們希望指定某幾台EC2才做備份
所以要挑選條件
繼續看到describe_volumes的文件:
再往下實際可以Filters的可能參數非常多:
簡單會使用到的就會是:
所以這邊會先幫prod那台的volume手動加上tag:
再點:
這時候一個volume有tag,另一個volume沒有:
實際寫法就變成:
這邊只用一台:
這邊暫時改成20秒的週期:
執行後看到:
然後等一陣子就會建立下一個
點到上面新建的snapshot就會一路連結到prod那台EC2去
當前的volume-backups.py內容如下: