Amazon Elastic Compute Cloud (Amazon EC2) 是虛擬主機的服務, 主要是可以隨時加機器、硬碟等, 可以非常快速的擴充.
不過也有些缺點, 就是在上面的資料是不會被儲存的, 若是機器當掉、強制關機等等, 資料就會消失. IP 不固定等問題.
Amazon 針對這些問題也都有解法:
- 資料儲存: 用 Amazon Elastic Block Store 解決此問題(而且可以動態新增硬碟並掛載上去), 並可隨時為此硬碟做 Snapshot.
- IP 不固定: 用 Elastic IP Addresses 解決此問題, 可以先把 IP 先租起來放.
這幾天照文件都玩過一次, 寫寫筆紀做紀錄.
這篇先紀錄完整使用 Firefox Extension(Elasticfox) 的紀錄, 如果只是想要試試看, 可以考慮用 Amazon EC2 本身提供的 Console 介面做簡單的入門練習(這個下一篇再紀錄).
如果沒有 Amazon 帳號, 由此申請一個: Amazon Web Services
事前研究
下述會使用到的網頁:
- 官方網站: Amazon EC2
- Amazon EC2 Firefox Extesnion: Elasticfox Firefox Extension for Amazon EC2
強列建議要安裝此 Firefox Extension, 有不少功能靠此外掛會簡單很多.
這兩篇也是筆記, 往下讀前建議先把這兩篇看一看, 比較有個概念.
- Amazon EC2 研究文件、套件 - 工具連結、算算使用一個月花費大概多少等.
- Amazon EC2 名詞項目筆記 - EC2 需知道的名詞解釋
下述內容主要是依照 Elasticfox Getting Started Guide
此篇操作, 另外做紀錄.
安裝、開啟 Elasticfox
- 於此 Elasticfox Firefox Extension for Amazon EC2 安裝 Firefox extension.
- 開啟 Firefox
- Tools → 執行 Elasticfox
- 下面內容都是開啟 Elasticfox 後的操作紀錄.
設定 Elasticfox
-
Elasticfox 開啟後會出現 Manage EC2 Credentials, 要輸入 "Account Name", "AWS Access Key", "AWS Secret Access Key"
- 註: 上述資料由此取得 Amazon Web Services Access Identifiers (Access Key ID and Secret Access Key 區塊)
- 註: Your Secret Access Key: 的 "+show" 記得點選才會秀出來.
- 於 Elasticfox 最上方的 Crednetials 右邊選取剛剛設定的 Account Name, 即登入完成.
- 註: 若有要製作自己的 AMI Image(若不知道這是甚麼, 需要時再來申請即可), X.509 Certificate 也要產生儲存.(cert-key.pem, pk-key.pem)
建立新的 Key Pairs (於 EC2 虛擬機器 登入用)
- 切換到 "Key Pairs" 的 Tab
- 點選 綠色的鑰匙(Create a new keypair)
- Please provide a new keypair name (隨意輸入一個名字即可)
- 就會產生 id-keypair-name.pem, 並跳出下載視窗, 將此下載儲存. (ssh login 需要) (請儲存在 "~/ec2-keys/id_YOUR_NAME")
- chmod 600 ~/ec2-keys/id_YOUR_NAME # 要登入前, 它會做安全檢查, 所以需要設 600
Security Group (此階段不設定可跳過)
Amazon EC2 有提供 Secuirty Group 的功能, 作用是設定防火牆的機制, 相關文件可見下述:
每一個 User 都能設定每個獨立的 Security Group, 而 Security Group 最多可以設定 100 組.
設定方法:
- 開啟 Elasticfox
- 切換到 "Security Group" 的 Tab
- 先在 Your Group 選擇要設定的帳號 (或者可以新增帳號、名稱)
- 再於 Group Permissions => 點選 Grant Permission (綠色打勾的按紐)
- 就可以設定要 開放/關閉 哪些 TCP/UDP port 或 網段 等.
ex: 開放 HTTP 80- 於 Protocol Details → 選 HTTP
- Protocol: → TCP/IP
- Port: → 80
- Host: → 0.0.0.0/0
- 按 Add 即可.
- 預設記得 22 一定要開 (不然沒辦法 ssh 進去)
選擇 AMI(Amazon Machine Images) 檔
由網頁選擇想要的 AMI 檔(作業系統 Image)
從網頁挑選, 有下面三種方式可以找:
- Amazon Machine Images (AMIs) - 各系統分類總列表
- Amazon Machine Images (AMIs) - 依照分數/條件挑選
- 選 Rating - Best: Amazon Machine Images (AMIs) - 依照 Rating 數最高的來排序
由上面挑選, 找到 Debian 5.0 Lenny (testing) Base Install: A clean, base install of Debian 5.0 Lenny (testing), built by Eric Hammond as part of the Alestic.com series [update 2008-12-22] (我是挑目前最新且最精簡版的 Debian)
於 Elasticfox 找
- 切換到 "AMIs and Instances"
- 於 Machine Images (AMI) 輸入 debian, 就會把 debian 相關的 AMI 檔都列出來.
- 找到 alestic/debian-5.0-lenny-base-20081222.manifest.xml 點選.
- 按上面的 綠色Power鍵(Launch instance(s)) 或 直接按右鍵(Launch instance(s) of this AMI)
- 註: 窗最下面有 User Data 的欄位, 於這邊寫的資料, 機器開完後可以使用
curl http://169.254.169.254/1.0/user-data
取得, 可以當外部參數代入等. - 選 Launch 即可.
- 於 Your Instances 區塊, 就可以看到新 run 的機器(Status 是 running 才算完成)
連線方法(連線到剛建立的虛擬主機)
找 DNS Name
- 對那台機器按滑鼠右鍵, 選最下面的 Connect to Public DNS Name. (會自動抓取 ~/ec2-keys/id_YOUR_NAME 的 key)
- 按滑鼠右鍵, 選 View Details, 找到 Public DNS Name, 後面那段就是 Domain name, ex: ec2-11-111-111-11.compute-1.amazonaws.com
連線
- 直接連線: ssh root@ec2-11-111-111-11.compute-1.amazonaws.com -i ~/ec2-keys/id_YOUR_NAME # 或 ~/ec2-keys/YOUR_NAME.pem
進入機器後就是 root, 剩下要怎麼做都行囉~ 🙂
強迫關機 / 重新開機
- 切換到 "AMIs and Instances"
- 於 Your Instances 區塊, 就可以看到新 run 的機器
- 點選要 關機 / 重新開機 的機器, 直接選上面的 Reboot Selected Instances 或 Terminate Selected Instances 即可.
- 於機器 login 完成後, halt 也可以直接關機.
建立屬於自己的 AMI Image
文件的方法 建立 AMI Image
建立屬於自己的 AMI Image 的三步驟 於 文件的方法: (註: 我跑到 Bundle into an AMI, 這步驟, Bundle into an AMI 不能點選, 所以放棄此方法,下述只是做個紀錄)(註2: 據說 Bundle into an AMI 是在 Windows 環境的才能跑, Linux 此選項不會啟用)
- 切換到 "AMIs and Instances"
- 找到 Your Instances 點選 Refresh (最左邊藍色的按紐)
- 對想要做的機器按滑鼠右鍵, 選 Bundle into an AMI.
- 輸入 S3 Bucket name(全部小寫) 和 Image name.
- 按 Ok 即可.
- 再去 Register the Image 完成後, 就可以於 Bundle Tasks 看到.
於線上機器直接建立 AMI Image
於線上機器直接建立屬於自己的 AMI Image: (cert-KEY.pem, pk-KEY.pem 由 X.509 憑證產生取得)
- scp -i ~/ec2-keys/id_YOUR_NAME cert-KEY.pem pk-KEY.pem root@ec2-11-111-111-11.compute-1.amazonaws.com:/mnt
- 產生 Image: (Account Number 是登入 ec2 後, 頁面右上角看到的字串(Sign Out 下方))
-
ec2-bundle-vol -d /mnt -c <your aws certificate file> -k <your aws private key file> -u <your aws account number> -r i386 -p <your image name>
- ex: ec2-bundle-vol -d /mnt/ -c /mnt/cert-KEY.pem -k /mnt/pk-KEY.pem -u ACCOUNT_NUMBER -r i386 -p YOUR_AMI_IMAGE_NAME
- 註: 64 bits 的話, 要把 i386 換成 x86_64
-
ec2-upload-bundle -b YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME -m /mnt/YOUR_AMI_IMAGE_NAME.manifest.xml -a ACCESS_KEY_ID -s SECRET_ACCESS_KEY
- # ACCESS_KEY_ID, SECRTE_ACCRESS_KEY => Amazon S3 key, 就會往 Amazon S3 送, 然後會設定為 Pirvate.
-
若有安裝 s3cmd, 就可以看到上傳上去的 Image Bucket 和 所有上傳檔案.
- s3cmd ls # 會看到新建立的 Bucket
- s3cmd ls s3://YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME
快速紀錄 建立屬於自己的 AMI Image 的三步驟
- scp -i ~/ec2-keys/id_YOUR_NAME cert-KEY.pem pk-KEY.pem root@ec2-11-111-111-11.compute-1.amazonaws.com:/mnt
- ec2-bundle-vol -d /mnt -c <your aws certificate file> -k <your aws private key file> -u <your aws account number> -r i386 -p <your image name>
- ec2-upload-bundle -b YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME -m /mnt/YOUR_AMI_IMAGE_NAME.manifest.xml -a ACCESS_KEY_ID -s SECRET_ACCESS_KEY
使用自己的 Machine Images (AMIs)
- 點選 綠色那個 + 號(Register a new AMI)
- 輸入 <s3 bucket name>/<your image name>.manifest.xml
- YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME/YOUR_AMI_IMAGE_NAME.manifest.xml
- 點 Register AMI 即可.
- 再來就可以開啟自己的 Machine 囉~ 🙂
刪除 AMI
- Deregister AMI 就可以刪除.
- 再從 Amazon S3 刪掉:
- s3cmd del s3://YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME/ # 需一個一個刪除
- s3cmd rb s3://YOUR_AMI_IMAGE_NAME_OR_S3_BUCKET_NAME/ # 全部刪除完畢後, 再把整個 BUCKET 刪除.
建立 Elastic Block Store (EBS) Volume
- EBS(Elastic Block Store): EBS 可以提供給 Amazon EC2 實體一個實體的儲存空間. (EC2 關機後, 資料就消失了.)
- Amazon EBS Snapshot: Amazon EBS 另外可以隨時建立 Snapshot 的 volumes, 並將此儲存在 Amazon S3.
建立新的 Volumes (空間)
- 開啟一個儲存空間, 來儲存 EC2 的資料, 讓資料在關機後不會消失, 若沒有要 Mount 到機器上時, 可以先做 Snapshot 存放起來.
- 切換到 "Volumes and Snapshots"
- 點選 綠色+ (Create new volume)
- Size (GB): 1 ~ 1000
- Availability Zone: us-east-1a, us-east-1b, us-east-1c (要選跟機器同一區域的)
- 點選 Create 即可.
- 如果有多個 Volume, 要記得把 Volume id 記起來. (Mount 時要用)
Mount 新的 Volumes 到機器上
- 切換到 "AMIs and Instances"
- 到 Your Instances 區塊, 於機器上按滑鼠右鍵, Attach an EBS Volume
- Volume ID 選剛剛建立的.
- Device: /dev/sdb (/dev/sda ~ /dev/sdp 都可以填寫, 不過看 /dev/sda 已經是主硬碟在用, 所以輸入 /dev/sdb)
- 點選 Attach 即可. (此時就已經將此硬碟裝置裝上去了)
- 此時於機器上, 就會自動產生 /dev/sdb 出來.
- fdisk /dev/sdb # np1 ... w 這邊就不詳述了
- mkfs.ext3 /dev/sdb1 # 格式化
- mkdir /backup
- mount /dev/sdb1 /backup # 這樣子就 mount 完成.
建立 Snapshots
- 作此步驟前, 還是得要先完成前面 格式化 的步驟.
- 切換到 Volumes and Snapshots
- Create a new snapshot from this volume
- 於 Snapshots (SNAPs) 就會產生一個新的 SNAP ID 的新 Volumes 的 Snapshots.
將 Snapshots Mount 到新的機器
- 切換到 "Volumes and Snapshots"
- 對 Snapshot 按右鍵, 選 Create new volume from this snapshot, 一樣指定 Size, 區域等.
- 於 Volumes(VOLS) 就會看到新的 Volume, 將 volume id 記著.
- 切換到 "AMIs and Instances"
- 到 Your Instances 區塊, 於機器上按滑鼠右鍵, Attach an EBS Volume
- Device: /dev/sdc
- 點選 Attach 即可.
- 此時於機器上, 就會自動產生 /dev/sdc1 出來. (因為剛剛 Snapshot 前已經有 format 過了)
- mount /dev/sdc1 /backup # mount 起來.
- /backup 的檔案也都還會存在.
Elastic IP (EIP)
- EIP 是要給此機器一個固定的靜態 IP, 不過 IP 是給 Account, 並不是給任何一個 Instances.
建立一個 固定IP (Elastic IP (EIP))
- 點選 綠色+(Allocate a new address), 就會自動產生一個新的 IP.
指定機器使用某個固定 IP
- 切換到 "AMIs and Instances"
- 於 Your Instances 區塊
- 找到要 指定的機器 按滑鼠右鍵, 選 "Associate Elastic IP with Instance"
- 點選 Associate 即可.
- 就可以 ssh -i ~/ec2-keys/id_YOUR_NAME root@EIP