DevOps-Automation with Python 4

Getting familiar with Boto(Create VPC and Subnet)

ZONGRU Li
Jun 7, 2023

開始嘗試撰寫BotoLibrary邏輯程式

初步先印出default region的既有VPC的相關資訊:

首先找到Boto3doc

LINK
LINK

透過Boto3可以讓Python做得甚至比Terraform的事情更多

但是就必須要參考到doc內容(因為我們不可能全背下來)

這邊主要就是練習如何配合doc來執行相關工作

這邊講師直接在頁面上ctrl+F搜尋vpc可以看到是在EC2區塊底下

Nana畫面(比較舊的doc)

但是我現在看到的是:

LINK

這邊回到上述頁面拉到最上面的EC2:

LINK

仔細看到有基本用法以及下方有許多個Func可供呼叫:

先寫成這樣:

目標要列出VPC,所以找到

這個Func.又臭又長...真的比Terraform還難找

點進去剛剛的describe_vpcs裡面,會看到範例:

LINK

所以接著寫到:

然後可以研究要傳入甚麼參數給這個Func.

上面看過後可知道所有參數都是optional的,所以可以不傳沒關係

其中就需要了解一下回傳了那些內容可能是我們需要的:

也就是透過上述文件,我們得到使用這個Func的:

  1. Function名稱
  2. 可以傳入甚麼參數或可以不用傳
  3. 回傳值是什麼

進一步寫成:

執行後看到:

然後我們並沒有需要全部的回傳資訊

參考文件後決定要印出以下紅框的資訊:

改寫如下:

得到:

然後注意上面得到的是多筆的VPC資訊,所以可以用for迴圈來處理:

再注意這層也是多筆結構:

進階寫成:

以上就完成前面的目標

Connect to non-default region

如果今天需求改成要確認其他region的資訊可以怎麼做?

然後並不想要更改home目錄下的config裡面設定的default region

則開頭的boto3.client(‘ec2’)可以改為:

這邊講師沒有明顯告知為何可以這樣寫,其實Boto3的網路doc也沒有寫到

但是我透過以下流程有找到:

但是如果看Boto3的網路doc:

回到剛剛查到的:

然後照著寫完執行後看到我在euregion內的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()往上看會看到:

LINK

所以這邊底下我參考講師內容後,但是依據現在doc版本嘗試寫看看:

也就是看這邊寫:

LINK

如上這個new_vpc物件理當還可以來建立subnet

回到doc查看看:

LINK
LINK

參考這邊寫法:

LINK

這邊還要先看到create_vpc()的回傳格式來提供VpcId:

準備好程式後先到AWS介面看到eu-central-1VPC服務內容

目前只會看到一個defaultVPC:

嘗試執行我的程式:

首先我又注意到跟講師code很大不同在於

create_vpc()回傳的不像講師的是vpc物件

而是一個dict物件,裡面只是描述vpc的內容

最後研究一下後,我完成的寫法如下:

研究寫法後,最後終於正常執行得到:

然後AWS上面看到:

以下大概細說一下我寫法:

後面就一樣是前一節印出該region所有VPC內容:

結束後記得移除新建的多餘VPC:

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

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

No responses yet