AWS Workshop(2017/11/17)

前言

在參加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)