DevOps-Automation with Python 4
開始嘗試撰寫Boto的Library邏輯程式
初步先印出default region的既有VPC的相關資訊:
首先找到Boto3的doc
透過Boto3可以讓Python做得甚至比Terraform的事情更多
但是就必須要參考到doc內容(因為我們不可能全背下來)
這邊主要就是練習如何配合doc來執行相關工作
這邊講師直接在頁面上ctrl+F搜尋vpc可以看到是在EC2區塊底下
但是我現在看到的是:
這邊回到上述頁面拉到最上面的EC2:
仔細看到有基本用法以及下方有許多個Func可供呼叫:
先寫成這樣:
目標要列出VPC,所以找到
這個Func.又臭又長...真的比Terraform還難找
點進去剛剛的describe_vpcs裡面,會看到範例:
所以接著寫到:
然後可以研究要傳入甚麼參數給這個Func.
上面看過後可知道所有參數都是optional的,所以可以不傳沒關係
其中就需要了解一下回傳了那些內容可能是我們需要的:
也就是透過上述文件,我們得到使用這個Func的:
- Function名稱
- 可以傳入甚麼參數或可以不用傳
- 回傳值是什麼
進一步寫成:
執行後看到:
然後我們並沒有需要全部的回傳資訊
參考文件後決定要印出以下紅框的資訊:
改寫如下:
得到:
然後注意上面得到的是多筆的VPC資訊,所以可以用for迴圈來處理:
再注意這層也是多筆結構:
進階寫成:
以上就完成前面的目標
Connect to non-default region
如果今天需求改成要確認其他region的資訊可以怎麼做?
然後並不想要更改home目錄下的config裡面設定的default region
則開頭的boto3.client(‘ec2’)可以改為:
這邊講師沒有明顯告知為何可以這樣寫,其實Boto3的網路doc也沒有寫到
但是我透過以下流程有找到:
但是如果看Boto3的網路doc:
回到剛剛查到的:
然後照著寫完執行後看到我在eu的region內的VPC資訊只有一筆:
接著還要注意的就是這個參數給法:
上述第二個(parameter with name):
也就是直接給一個key=value當作參數的
又可稱為"keyword arguments"或"name parameter"
這種的參數傳入次序就沒有關係
但至於到底是用哪一個
直接給值(only value)或是要用(keyword arguments)參數形式
講師提一個Library例子解說:
會看到參數的一些示範:
如上有一大堆數十個可以傳入的參數Show出來
大部分都是option的參數
但是以ssh連線來說基本上只要兩個參數足矣
必須讓Python知道你到底想要傳哪個參數的值,所以就必須講清楚
然後仔細看到順序上是這樣(hostname,port,username….):
對應提供一樣順序的參數:
這時候我們就可以不使用"name parameter"的方式給予,可以改寫成:
把游標放在不同個參數上按ctrl+P:
如上,也就是Python對應順序知道我那個22是指port這個參數
所以到這邊就可以理解以下這段參數可以這樣寫,可以查到不同region:
Create VPC and Subnet:
首先在EC2相關的boto3 doc頁面查找"create_vpc":
這段我查到跟講師課程畫面內容就不一樣
但是我目前看到新版的文件,這個create_vpc()往上看會看到:
所以這邊底下我參考講師內容後,但是依據現在doc版本嘗試寫看看:
也就是看這邊寫:
如上這個new_vpc物件理當還可以來建立subnet
回到doc查看看:
參考這邊寫法:
這邊還要先看到create_vpc()的回傳格式來提供VpcId:
準備好程式後先到AWS介面看到eu-central-1的VPC服務內容
目前只會看到一個default的VPC:
嘗試執行我的程式:
首先我又注意到跟講師code很大不同在於
create_vpc()回傳的不像講師的是vpc物件
而是一個dict物件,裡面只是描述vpc的內容
最後研究一下後,我完成的寫法如下:
研究寫法後,最後終於正常執行得到:
然後AWS上面看到:
以下大概細說一下我寫法:
後面就一樣是前一節印出該region所有VPC內容:
結束後記得移除新建的多餘VPC: