前言
在參加MOPCON的時候,因為在Unconf中有舉辦這場演講,所以在因緣際會下,也接到了這場免費的工作坊邀請。(相關連結)
這場工作坊Workshop最主要是基礎入門AWS的雲端運算平台,對於我這個沒有使用過AWS來說,是在最適合不過的課程,再加上是免費的,所以二話不說也就報名了。
課程筆記
上課的課程筆記我把它記在Gist上,若有需要可以參考。
最主要的操作課程如下:
- 建立EC2 and MySQL Database
- Launch Your Amazon Simple Storage Service(S3)
前置作業
在開始後面的兩個Lab操作之前,務必先要註冊一個AWS的帳號,註冊帳號方式,不在此教學文章裡面,不過網路上很多。還有重要的一點就是,需要有一張信用卡,因為信用卡需要用來預先知道你是否有能力可以付款服務,因此需要信用卡資訊,在註冊成功後,還需要讓AWS象徵性的扣一美元。本次兩個WorkShop是有附教學文件檔的,但礙於是訓練的課程,所以就不會在此公開,需要的人可以寄信向我索取。
那下面的是我濃縮文件上的教學,以及自己改過的版本,讓整體的教學更簡單易懂。因為在課程中,台上帶頭做的講師除帶的較緊湊之外,加上文件並沒有寫的很清楚。在這樣的情況下,我當時與朋友都沒有跟上,我是自己事後看文章的教學成功的。
客戶端需要的環境
這裡指的是你自己的電腦環境,作業系統我建議是Unix-based的。像是Linux發行版本中的Ubuntu, Fedora等都可,不拘,不要Windows就好。雖然在教學文件中是以Windows為主,但是在SSH連線時我覺得異常的難用,因為需要下載Putty與使用PuttyGen來進行連上機器的動作,這兩個東西在我學會Linux相關的作業系統之後,就很少在用了。
建立EC2 and MySQL Database
從本章節開始,會紀錄該如何從無到有建立一台Amazon EC2和MySQL資料庫
因為AWS上所有的服務都是切開的,所以要建立一台機器需要花很多的設定包含內部的子網路,允許Port number的安全規則等都需要一一的設定,因此整個教學步驟會很多。廢話不多說,從下面開始吧!
步驟一
登入AWS並進到開始的畫面。在登入成功之後,會跳轉到下面的頁面。
在左上角的選單中,可以發現到有一個US West…等的字樣,當按下去之後,就可以選擇希望建立要使用的主機地點,地點是可以隨意選擇的。
步驟二
建立一個自己的VPC,首先先從首頁頁面中進入。
接著會看到有一個預設的VPC,我們在這裡自己建立一個,不使用預設的VPC。
接著按下『Create VPC』按鈕會跳出畫面,如下圖所示。
接著在表單裡面依照對應填入
Name tag: My Lab VPC
IPv4 CIDR block: 10.0.0.0/16
如下圖中所示。填入之後按下『Yes, Create』就把VPC建立起來了。
步驟三
在同一個頁面中,點選『Internet Gateways』(如下圖所示)並按下『Yes, Create』按鈕
接著選擇新建立好的『』並點選『Attach to VPC』按鈕把VPC建立(Attach)起來,如下圖所示。建立之後,就會看到剛剛建立的Internet Gateway已經是Attached的狀態了。
接著同一個頁面左邊,選擇『Subnets』並依照下圖建立一個名為: 『Public Subnet 1』的子網路。VPC記得選擇我們剛剛所建立的『My Lab VPC」Availability Zone選擇『us-west-1b』,IPv4 CIDR block選擇『10.0.1.0/24』。接著按下圖中的『Yes, Create』。
接著重複上面的步驟,在建立一個名為『Public Subnet 2』的子網路。Name tag改成『Public Subnet 2』,VPC選擇『My Lab VPC』,Availability Zone選擇『us-west-1c』,IPv4 CIDR block選擇『10.0.2.0/24』,如下圖所示。
接著選擇『Public Subnet 1』,下方Tab切換到『Route Table』並點選連結『』,如下圖。連結的文字不一樣沒有關係,因為每個產生出都是隨機的。
進到Route Table的連結頁面之後,按照下圖所示步驟,把Table設定好,接著按下圖中的『Save』按鈕。Target在點下去之後會有提示填入的值,選擇剛剛所建立的『My Lab IGW』。
『Public Subnet 2』也是像上面的步驟重複一遍。這個時候我們可能不需要在重複做一遍,因為AWS會幫我們把『Public Subnet 2』設計好。不過保險起見,還是重複步驟去確認是否有設定完成。
步驟四
這步驟中,建立我們要的『Instance』。回到AWS console並點選『EC2』。
點選『Launch Instance』按鈕。
從圖中可以看到,有很多映像檔可以選擇。在我參加的Lab中,是選擇第一個『Amazon Linux』作為要啟動的Instance,那這一次在本次教學中,我選擇下方的『Ubuntu 16.04』作為這次要啟動的映像檔,當然這邊我們也可以自行選擇所需要的映像檔。
接著會來到方案的部份,選擇預設的『t2.micro』就好。接著選擇:Next: Configure Instance Details。
接下來在設定部份,需要注意下圖圈起來得部份。選擇剛剛所建立的Subnet Network和VPC。
- Network: My Lab VPC
- Subnet: Public Subnet 1
- Auto-assign Public IP: click Enable
沒問題就按下『Next: Add Storage』,這裡就用預設的設定就好,不需要更動。按下下一步『Next: Add Tags』按鈕。
在設定Add Tags頁面中,按下『Add Tags』接著就按照下圖所示,把需要的Key跟Value填入。並按下『Next: Configure Security Group』。
在『Configure Security Group』設定頁面中,主要是要設定允許可以通過的Port Number並設定清單。按照下圖中的2~3步驟去產生三個協定可以允許通過的Port Number。裡面的步驟1需要注意的是,需要自己填入我們自己取的Security Group名稱和敘述。在最後按下『Review and Launch』按鈕。
在Review步驟中,基本上就是看前面的設定的東西有沒有錯誤,沒問題後按下『Launch』。
這時候需要選擇或是建立自己的Key Pair,選擇新增一個Key Pair(Create New Key Pair),如下圖所示。在按下『Download Key Pair』之後,才可以按下『Launch Instance』。這個Key Pair 的目的是要用來使用SSH連線到主機所使用。
接著顯示出下圖這個畫面,代表Instance就開始啟動中了。
同一頁面中拉下來有『View Instances』的按鈕,點下去就可以回到Instance的清單。
等到Instance的狀態變成如下圖所示,即代表Instance已經建置完成可以開使用了。
接著打開我們的Terminal,依照圖中圈選起來的位置可以找到連線的IP address
接著輸入下面的command把剛剛下載的Key Pair file 權限改成400
1 | chmod 400 peter2ubuntu.pem |
接著輸入下面command開始連線
1 | ssh -i "your-key-pair-file.pem" user-name@your-ip-address |
連線過去的user name會隨著使用的Image映像檔不一樣。若要確定是哪一種可以點選下圖中的『Connect』按鈕,接著會出現連線的相關資訊。
接著就連線成功了!
Create a VPC security group for the RDS DB Instance—-建立RDS關聯式資料庫Instance
如果有用VPS(Virtual Private Server)相關的服務就會知道,這個EC2機器建立起來只會有memory和CPU,並沒有storage的儲存空間,所以要有儲存空間的話,需要再去使用RDS(Relational Database Instance)建立Relational Database關聯式資料庫。
在建立Database Instance之前,需要先設定一些與建立EC2類似的設定,Subnets子網路和Security Group的規則等。
步驟一
回到AWS console management並點選VPC進入到VPC的頁面(如下圖所示)接著左邊有一個可以捲動的選單,往下拉找到『Security Groups』連結並選擇下去。
接著如下圖裡的步驟標示所示,建立一個給Database的Security Group
記得要選擇VPC為之前所建立的,不要使用預設的VPC。填完之後就按下『Yes, Create』按鈕。
建立之後,會看到清單多了『DBSecurityGroup』可以選擇。依照下圖的數字步驟,來設定Inbound Rules。
按下『Edit』按鈕之後,如下圖所示,可以知道要填入的值,唯一要注意的是,source是要選擇『LabSecurityGroup』的Group ID。
在上圖的同一個頁面中,左邊的捲動菜單選擇『Subnets』子網路的設定。
選擇『Public Subnet 1』注意下面的Availability Zone: 『us-west-1b』。
選擇『Public Subnet 2』注意下面的Availability Zone: 『us-west-1c』,每個人的都不盡相同。
注意自己當初選擇的Zone,在之後建立新的『Private Subnet』給DB Instance時會需要用到。
看過之後,我們可以來建立新的『Private Subnet』了。首先依照下圖方式,建立一個新的Subnet名為『Private Subnet 3』,注意框起來的部份。
接著再去用上面同樣的方法去建立『Private Subnet 4』。
Availability Zone的選擇在這個區域下只有兩個可以選,所以我們選擇的時候,就直接分別選擇:『us-west-1b』與『us-west-1c』(如上兩張圖所示)
接著要建立『DB Subnet Group』,先回到AWS Management Console,並點選RDS。進到RDS的畫面之後,再點選左邊選單的『 Subnet Groups』。
接著按照下圖所示,把剛剛建立的『Private Subnet3』和『Private Subnet4』串成一個Subnet Group。
之後重複兩次上圖中的動作,就會變成下圖的樣子。
按下『Create』之後,會回到原來Sunet Group的清單,這時候會沒有顯示剛剛建立的清單,這時候只要按下右上角的圖案,就會顯示剛剛我們所建立的Subnet Group了。
步驟二
上面把Subnet 與Subnet Group設定好之後,回到AWS console management並選擇:RDS(圖中有標示)
進入之後如下圖點選『Get Started Now』。
接著會進到可以選擇要使用的資料庫的畫面,在當天Work Shop的時候,有些人的畫面是新版的,那我還是使用舊版的,下圖也是舊版的,我沒有看過新版介面長怎樣,等真的我也被改版的時候再來更新吧XD。接著點選『MySQL』。
接著點選『Select』按鈕。
MySQL DB server 選擇『Production』
接著下一步之後,可以看到下圖中的DB Instance,預設是比較大的DB Instance Class,我們在這裡調整成最小的DB Instance Class以及其他的設定如下圖一樣一併的調整。
往下拉選單之後,下面有需要填寫相關DB的部份,像是:DB Instance 名稱,使用者名稱,密碼等。如下圖,填完成之後,接著下一步(Next Step)。
接著下圖所示,需要選擇對應的VPC以及Security Group還有設定Database Name。其他的設定預設就好,唯一需要注意的是『Publicly Accessible』的這個選項,預設是『No』,當選擇No的時候,EC2以外的裝置或是機器是無法連近來這台DB server的,當選擇『YES』時,才可以在EC2機器外部連線到這台DB server。
接著設定好之後,捲軸往下拉即可看到『Launch DB Instance』
當按下去之後,就會出現下圖的訊息,代表DB Instance已經完成建立,目前正在建置中,要看最新的DB Instance 的狀態,可以按下下圖中的按鈕。
當圖中的狀態(Status)已經是『Available』的時候,代表DB Instance已經建置完成了。
在下圖中有兩個需要注意的地方,一個是DB的狀態,還有End Point,End Point指的是連線DB的主機位址,這個在EC2內部裡面是需要的。這樣才可以知道DB要連線到哪一台主機。
步驟三
完成建置DB Instance之後,我們就要來使用先前建置好的EC2機器來進行連線到我們建置好的DB Instance把這兩個連接起來。
從這裡開始會跟Lab上面的會有出入,因為如果是以這篇的EC2主機的話,用的是Ubuntu的主機,所以這篇下面也是以Ubuntu的主機作為基礎。
而Lab上面的則是以:yum等指令為主。
首先先用SSH連線到主機。
1 | ssh -i "your-key-pair-file.pem" user-name@ip-address |
更新mirror連結與位址
1 | sudo apt-get update |
安裝 Nginx以及PHP
1 | sudo apt-get install nginx |
在瀏覽器輸入IP Address得到下面的頁面。
安裝MySQL server
1 | sudo apt-get install mysql-server |
會要求設定root password
連線到剛剛我們設定好的MySQL DB Instance
1 | mysql -h db.choi5coyenv6.us-west-2.rds.amazonaws.com -u your-user-name -p |
登入成功之後,如下圖所示。
執行查找Database name
1 | select database(); |
接著會如下圖所示。
安裝:php-cli, php-fpm, php-mysql等套件。
1 | sudo apt-get install php-cli php-fpm php-mysql |
安裝(可選/參考)php-curl, php-mcrypt等套件。
1 | sudo apt-get install php-curl php-mcrypt |
編輯php.ini檔案並找到下面的設定值改成0
1 2 3 4 5 | sudo vim /etc/php/7 .0 /fpm/php .ini # In php.ini 檔案中找到下面的值改成0 cgi.fix_pathinfo=0 |
重新啟動php-fpm的服務
1 2 3 4 5 | sudo systemctl restart php7.0-fpm # 等價下列的command,兩者皆可,上面印出的訊息較多。 sudo service restart php7.0-fpm |
設定Nginx config file設定檔
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | sudo vim /etc/nginx/sites-available/default # 把檔案改成下列的形式 # 要改的地方為:index.php, server_domain_or_IP # location ~ \.php$ 以及 location ~ /\.ht的部份 server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html ; index index.php index.html index.htm index.nginx-debian.html; server_name server_domain_or_IP; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets /fastcgi-php .conf; fastcgi_pass unix: /run/php/php7 .0-fpm.sock; } location ~ /\.ht { deny all; } } |
測試Nginx 的語法是否正確,語法正確後,接著重新啟動Nginx服務
1 2 3 | sudo nginx -t sudo service nginx restart |
接下來建造一個PHP 測試檔案,如下指令。
1 | sudo vim /var/www/html/info .php |
info.php內容
1 2 3 | <?php phpinfo(); |
接著就會看到類似下面的圖phpinfo的圖了。
測驗完成之後,記得把測試檔案刪除。
1 | sudo rm /var/www/html/info .php |
參考資料
相關文章
- Create an alarm in CloudWatch and SNS service (Lab 1 continuation)
- Launch Your Amazon Simple Storage Service(S3)(Lab 2)