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


chmod 400 peter2ubuntu.pem

接著輸入下面command開始連線


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連線到主機。


ssh -i "your-key-pair-file.pem" user-name@ip-address

更新mirror連結與位址


sudo apt-get update

安裝 Nginx以及PHP


sudo apt-get install nginx

在瀏覽器輸入IP Address得到下面的頁面。

安裝MySQL server


sudo apt-get install mysql-server

會要求設定root password

連線到剛剛我們設定好的MySQL DB Instance


mysql -h db.choi5coyenv6.us-west-2.rds.amazonaws.com -u your-user-name -p

登入成功之後,如下圖所示。

執行查找Database name


select database();

接著會如下圖所示。

安裝:php-cli, php-fpm, php-mysql等套件。


sudo apt-get install php-cli php-fpm php-mysql

安裝(可選/參考)php-curl, php-mcrypt等套件。


sudo apt-get install php-curl php-mcrypt

編輯php.ini檔案並找到下面的設定值改成0


sudo vim /etc/php/7.0/fpm/php.ini

# In php.ini 檔案中找到下面的值改成0

cgi.fix_pathinfo=0

重新啟動php-fpm的服務


sudo systemctl restart php7.0-fpm

# 等價下列的command,兩者皆可,上面印出的訊息較多。

sudo service restart php7.0-fpm

設定Nginx config file設定檔


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服務


sudo nginx -t

sudo service nginx restart

接下來建造一個PHP 測試檔案,如下指令。


sudo vim /var/www/html/info.php

info.php內容


<?php

phpinfo();

接著就會看到類似下面的圖phpinfo的圖了。

測驗完成之後,記得把測試檔案刪除。


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)