DevOps-Automation with Python 10

Backup EC2 Volumes: Automate creating Snapshots

ZONGRU Li
Nov 11, 2023

接著要來嘗試建立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中查找:

LINK
LINK

裡面可以拿到的回傳值就會有volume的id,後面備份會用到:

可以先不給參數並印出所有資訊:

執行後看到:

關鍵是後面要建立snapshot,查找文件:

看到要建立snapshot其中VolumeId是必要傳入參數

所以可以繼續寫成:

也就是印出新增的Snapshot物件

執行後看到:

在AWS頁面看到Snapshot正在建立中(需要一點時間):

大概十來秒就完成一個

然後我研究了一下Snapshot會有對應Volume ID外:

點到該Volume ID會進一步看到:

而要自動化地進行備份可以參考前面的schedule的Library

可以將剛剛的備份程式片段Function化,並整體修改為:

上面的5秒只是示範,實際可能是用day

執行後看到:

AWS上面多了額外兩個snapshot:

然後程式就掛了:

因為5秒太短,其中一台可能還在備份,就又被驅動執行備份,導致失敗

正常使用應該改成:

而接下來我們希望指定某幾台EC2才做備份

所以要挑選條件

繼續看到describe_volumes的文件:

LINK

再往下實際可以Filters的可能參數非常多:

簡單會使用到的就會是:

所以這邊會先幫prod那台的volume手動加上tag:

再點:

這時候一個volume有tag,另一個volume沒有:

實際寫法就變成:

這邊只用一台:

這邊暫時改成20秒的週期:

執行後看到:

然後等一陣子就會建立下一個

點到上面新建的snapshot就會一路連結到prod那台EC2去

當前的volume-backups.py內容如下:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet