DevOps-Automation with Python 6

Health Check: EC2 Status Checks

ZONGRU Li
Jun 20, 2023

在管理EC2 Instances的時候,我們會常常需要注意其狀態:

這邊將用PythonBoto Library來撰寫一個可以確認狀態的程式

這邊首先我們將透過相對方便的Terraform腳本來協助建立三個Instances

Preparation: Create EC2 Instances with TF

首先引用前面課程的TF程式碼來建立三台EC2

main.tf:

可以看到上面建立了三台EC2並有執行一個腳本做一些安裝

terraform.tfvars:

entry-script.sh:

以上建置假若沒有問題,就可以先來撰寫準備確認狀態的Python程式碼

由於我使用的Boto3 Library版本跟講師有落差,所以只能嘗試自己撰寫

這邊先看到要取得EC2狀態的方法是 → describe_instances()

LINK

看到裡面的Response的物件內容:

其中注意有很多State資料,我們要找的ResponseState資料是:

撰寫出以下的Python搭配Boto3 Library的程式碼:

可以注意到我上面region_name有換到東京

然後小心describe_instances()Response物件的階層關係取得資料

我先嘗試手動建立一個EC2可以正常印出以下:

然後移除這個手動建立的EC2

改用Terraform建立三台:

執行Python程式看到:

就在這個狀況下嘗試移除其中一個Terraformaws_instance

然後再次執行Terraform:

回頭立刻執行Python程式看到:

接著要來研究的是狀態檢查也就是英文介面的"Status check"資料怎麼取

但是其實找遍describe_instances()Response內容可能都不會看到

因為這項資訊是在另一個Fun.裡面,Fun.describe_instance_status()

LINK

看起來有兩處有一樣的內容,挑其中一個就好

然後我們這邊只是想知道EC2能不能用了,所以預計取這個值:

這邊要特別注意的是這個回傳值是多筆

所以先寫到另一個for迴圈

印出看到:

Get everything in 1 AWS API call

其實可以注意到的是

describe_instances()回傳的內容龐大

但是其實describe_instance_status()也已經包含我們要的Instance State資料了:

所以可以只透過describe_instance_status()取得就好

最後改寫為如下:

印出來結果:

看到EC2instancerunning,instance狀態ok,系統狀態也都ok

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet