首先會使用一個AWS本身提供的AMI(下圖#1),我們將使用Amazon Linux 64-bit這個作業系統,並且使用EBS當作開機硬碟。
透過AMI(下圖#1),我們將可以去建立一個EC2 Instance(下圖#2),這個Instance將根據AMI,使用Amazon Linux 64-bit的作業系統,並使用EBS當作Root Volume。
我們會將EC2 Instance(下圖#2)去外接一個EBS Volume(下圖#3),我們會在其中安裝需要的套件與檔案。
而EBS Volume(下圖#3)完成之後,會轉換成一個EBS Snapshot(下圖#4)。如下圖:
有了上圖藍底的部分,也就是Amazon Linux 64-bit與EBS Snapshot之後,就可以去建立一個新的AMI(下圖#5),作業系統一樣是Amazon Linux 64-bit,而新的EBS Snapshot便會涵蓋A檔案以及安裝套件。
在未來,我們可以透過這個AMI(下圖#5)去創造許多新的EC2 Instance,這些新的EC2 Instance中(下圖#6),會同樣使用Amazon Linux 64-bit,並且每一個EBS Volume(下圖#7)裡面都會涵蓋之前所安裝的所有東西,這邊特別注意,這個EBS Volume(下圖#7)是從EBS Snapshot(下圖#4)下來的。如下圖:
建立EC2
首先到AWS Management Console搜尋VPC,如下圖:
到了VPC介面之後,點選Launch VPC Wizard,如下圖:
快速建立一個Public Subet,點Select,如下圖:
Step2,給他一個VPC名稱,我叫他vpc-ami-demo,好了之後按Create VPC,如下圖:
完成之後,點選左上角Services,搜尋EC2並在新分頁開啟,如下圖:
進去之後,要來建立新的EC2,點左側列表的Instances,並點Launch Instance,如下圖:
建立七步驟可以參考〖實作示範〗EC2儲存資源 — EBS Volume 建立與使用 part 1中的介紹,在這次的Demo之中,與〖實作示範〗EC2儲存資源 — EBS Volume 建立與使用 part 1不同的部分有:
Step2選擇Instance Type時,這邊選與本地機器最像的,如下圖:
Step3的Network選擇我們剛剛建立的VPC,Subnet給他Public Subnet,Auto-assign IP選擇Enable,如下圖:
Step6這邊要新增一個Rule,按Add Rule,給他80 Port進來的權限,Source選Anywhere,如下圖:
Step7,跳出視窗給他新的key Pair name,我叫他my-ec2-ami-demo,並Download Key Pair,好了之後Launch Instances,如下圖:
View Instances之後,點選左側列表Instances,就能看到新創的EC2啟起來了,呈現running,給他一個名稱,我叫他ec2-first,如下圖:
再來開啟Terminal,cd到剛剛下載Key Pair的目錄(我的在Download),如下圖:
回到EC2介面,按Connect,複製chmod,如下圖:
回到Terminal貼上,再回到剛剛的EC2介面複製SSH指令,再到Terminal貼上。
打上yes,看到Amazon Linux AMI就代表成功連進EC2 Instance裡面,如下圖:
客製化EC2環境
你可能會想要在EC2 Instance裡面放置一些客製化圖片或者檔案,在這邊我就用sudo fallocate -l 1G指令加上fake_file_in_ami來代表這些東西。好了之後打ls -l檢查一下,發現fake file確實在裡面。如下圖:
再來,安裝一些之後要用到的套件,打sudo yum install -y git來安裝git指令(yum是我使用的Linux版本的安裝指令,可以根據使用不同的安裝套件替換掉即可)。如下圖:
好了之後檢查一下,打上sudo git — version,可以看到已經成功安裝。再來我要安裝docker,打上sudo yum install -y docker,如下圖:
好了之後檢查一下,打上sudo docker — version,可以看到已成功安裝,如下圖:
接下來,要透過docker來啟起一台Web Server,打上sudo service docker start,好了之後打上sudo docker run — network host nginx(nginx是一個web server,這邊不做仔細介紹),如下圖:
好了之後看到ready for start up就代表成功啟起一台nginx server。而nginx server使用的是80 Port,剛剛在建立EC2 Instance時在Sercurity Group的設定就有特別開放80 Port,如下圖:
回到EC2介面,複製右下角的Public IP,開啟新分頁貼上IP並配上80 Port,就可以看到成功進入nginx首頁頁面,如下圖:
最後回到Terminal,Control C來結束這個nginx server。
到這邊已經把環境建立好了,如果我未來不想要每次建一台EC2時都要重複上述的動作,就必須要將他打包成一包AMI。
將EC2MI
左側列表點Instance,選擇ec2-first,按Actions,Image中Create Image,這邊的Create Image就是在Create AMI,如下圖:
可以給他一個Image name,我叫他ami-demo-001,No reboot的意思是當AWS在後面建立AMI時,預設會把EC2關掉,這邊建議按照預設就好(不用打勾),好了就按Create Image,如下圖:
點選左側列表AMIs,可以看到AMI呈現Available,成功建立,如下圖:
點選左側列表EBS Snapshots,就會看到一個新的Snapshot,他是隨著AMI一起建立起來的,如下圖:
確認AMI是否能建立EC2
現在先回到Instances,要把原本建立的ec2-first砍掉,點選ec2-first,Actions,Instance State中Terminate。跳出視窗後點Yes Terminate,如下圖:
完成之後,就能看到ec2-first變成terminated,被砍掉了,如下圖:
點左邊列表EBS Volumes,也會看到EBS Volume都跟著不見,如下圖:
到這邊,我們已經砍掉EC2 Instance與EBS Volume了。
再來,要運用AMI來創造一台新的EC2 Instance。
點左側AMIs,選已經創好的AMI,Actions與Launch,如下圖:
Instance Type選擇跟剛剛一樣的,如下圖:
Step3也與剛剛操作一樣,如下圖:
Step4 Add Storage就非常重要了,這邊有一個Snapshot ID,他其實就是剛剛建立AMI的過程中所建造的EBS Snapshot,裡面有我們安裝的套件以及檔案,如下圖:
Step6 Security Group與前面進行一樣的動作,如下圖:
Step7跳出視窗,要選擇建立的my-ecc2-ami-demo,如下圖:
完成剩餘步驟後,EC2就起來了,呈現running的狀態。
可以給他一個命名,我叫他ec2-second,如下圖:
這時可以到EBS Volume中確認,我們從AMI的EBS Snapshot中,建立了一個EBS Volume,如下圖:
回到Instances介面,選擇ec2-second,按Connect,複製SSH指令,不過可以看到SSH指令中有時候會把一部分改成root,這是我們不要的,等等會處理,如下圖:
打開Terminal,貼上SSH指令,將原本root的部分改寫為ec2-user,這是文件規範,如下圖:
打上yes,就連進一台新的,ec2-second這一台EC2 Instance,而且是從客製化AMI裡面創造出來的如下圖:
這邊直接打上sudo git — version,來看看有沒有這個套件已經在裡面,發現確實有。再打上sudo docker — version,發現docker也在裡面,如下圖:
也就是說一啟動這台EC2 Instance時,當我們打上sudo docker run network host nginx,就可以啟起一台nginx Server來使用,如下圖:
一樣回到Instance介面複製右下角Public IP,開啟新分頁貼上IP並配上80 Port,就能成功看到nginx介面,如下圖
回到Terminal,按Control C結束nginx server。按ls -lh看一下,能看到fake file依舊在裡面,如下圖:
reference: https://learncodebypic.medium.com/%E5%AF%A6%E4%BD%9C%E7%A4%BA%E7%AF%84-ec2%E6%A8%A1%E6%9D%BF-ebs-backed-ami-%E5%BB%BA%E7%AB%8B%E8%88%87%E4%BD%BF%E7%94%A8-6c985cc9c659
[aws]EC2模板 — EBS-backed AMI 建立與使用
分類:aws