2014年4月29日 星期二

AWS 筆記 - Amazon EC2 Auto Scaling 與 Elastic Load Balancing

整體流程:
  1. 建立 My AMI (www-service-auto-scaling-ami)
    • 順便準備一些會提升 CPU 使用率的程式
  2. 建立 ELB 規則 (www-service-auto-scaling-elb)
  3. 建立 Auto Scaling 規則
    • 建立 Launch 機器的規則 (www-service-auto-scaling-launch-conf)
    • 建立 Auto Scaling 規則 (www-service-auto-scaling-group)
      • 建立 新增機器 Alerm 規則 (CPU 平均高於 50%)
      • 建立 減少機器 Alerm 規則 (CPU 平均低於 30%)
首先,建立 My AMI 是因為開機器時要以自己的服務為主



建立 Elastic Load Balancing 規則,因為到時候打算對 ELB 新增機器,而非對 EC2,此外,這時建立 ELB 時,可以不用套用在任何機器上



點選建立 Auto Scaling 規則,但在這之前需要設定 launch 機器規則,例如要挑哪個 AMI 等:












設定 launch 規則後,正式進入 Auto Scaling 規則,這邊主要需設定新增機器、降低使用機器的條件,也可以設定 email notification 通報機器增減訊息等。












當 Auto Scaling Group 設定完後,將會立即依照設定開啟機器(同理刪除 Auto scaling group 也就會把機器都關掉),例如設定為最少2台,那就會馬上開2台出來。接著,可以在 ELB 或 Auto Scaling 頁面觀察機器狀態,其中在後者還能更新開關機器的條件,並且把上執行等。











 

至於如何測試自否自動 Scaling 的部分,此例我是搭配 ELB 測試,對指定網址瀏覽時,除了顯示 /etc/hostname 資訊來測試是否有不同外,還透過 CGI 執行一隻背景程式來讓 CPU 使用率衝到 100% ,透過這樣的做法,即可以觀察 Auto scaling 是否正常運行,亦可翻閱 Auto scaling history 查看更動。

<?php
shell_exec( 'echo "<?php while(1) ; " | php > /dev/null 2>&1 &' );

@date_default_timezone_set("Asia/Taipei");
$current_datetime = @date('Y-m-d H:i:s', @time());
echo "Service @ $current_datetime:".file_get_contents('/etc/hostname')."\n";

AWS 筆記 - 使用 Amazon Elastic Load Balancing 與 SSL/HTTPS (GoDaddy) 設定



首先,先開一台 EC2 機器,架設一下 HTTP/HTTPS,設定完就建一個 AMI 保存起來,再從 My AMI 再多開一檯出來(記得要擺在同一個 Availablility Zone才行),變成有兩檯 EC2 機器正在運行。此外,若 SSL 憑證有第三方簽證,而對於 EC2 上的機器,其 SSL 憑證可以不必用第三方簽證,只要在 Elastic Load Balancer (ELB) 上頭是第三方簽證的就夠用了!讓管理方便許多。

接著設定 ELB 吧,比較需要留意是 SSL 的設定,其中 DNS 跟 SSL 憑證是委託 GoDaddy 維護的,所以先從 GoDaddy 取得 SSL 憑證吧,大概會有三個檔案:
  • xxxxxx.crt
  • gd_bundle-xxxx.crt
  • xxxxxx.key



此時在填寫資料時,在 Public Key Certificate 就是 xxxx.crt ,而 Certificate Chain 就是 gd_bundle-xxxx.crt ,比較麻煩一點的是 Private key 那塊,需要稍微轉換 xxxxx.key

$ openssl rsa -text -in *.key

再把 -----BEGIN RSA PRIVATE KEY----- 到 -----END RSA PRIVATE KEY----- 裡的資料貼上即可。如此一來即可完成 SSL 設定。其他的步驟就沒什麼難的。



設定要用來監控判斷機器狀況的檔案:





挑兩檯機器以上吧:






設定好後就會得到一個網址可以連,此網址就會動態調整 requests 到數檯機器上:



此外,若有機器 out of service 時,也能觀測或動態刪減,十分方便:



其他筆記:
  • 關於 SSL / HTTPS 的部分,記得去申請個 CNAME Record 來對應到 ELB 的網址,如此一來,使用者逛網頁時就不會彈跳出不會彈跳出憑證問題
  • 關於如何測試 ELB 到底有沒有動態調整 requests 的部分,建議可以寫一隻 PHP 讀 /etc/hostname 出來,接著就可以透過 ELB 網址瀏覽,觀察讀出來的 hostname 是否有在變化

    $ cat index.php
    <?php
    @date_default_timezone_set("Asia/Taipei");
    $current_datetime = @date('Y-m-d H:i:s', @time());
    echo "Service @ $current_datetime:".file_get_contents('/etc/hostname')."\n";

AWS 筆記 - 查詢 Amazon RDS Disk Space 硬碟空間使用情況


AWS Console -> RDS -> Instances -> choose an instance -> Show Monitoring -> Freeable Sapce (MB)

此例是建立 300GB RDS,還剩 284053 MB 可用。還可以查看兩星期內的空間使用變化。

2014年4月28日 星期一

AWS 筆記 - 使用 Amazon EC2 以及建立自己的 AMI

老實說,已經有 4 年沒摸 EC2 了 XD 上去逛了一下,整個界面都不一樣了,慶幸地使用流程跟 4 年前差不多,連建立 AMI 的部分也是如此。

建立 Ubuntu 14.04 機器一檯:

Step 1:



Step 2:



Step 3:



Step 4:



Step 5:



Step 6:



建立 AMI:

Step a:



Step b:



接著,開機器時,可以從自己的 AMI 開一檯機器出來:

[Linux] Apache/2.4.7 [authz_core:error] : client denied by server configuration @ Ubuntu 14.04

開始在 AWS 上試用 Ubuntu 14.04 了,結果安裝完碰到這問題 XD 說真的有好一陣子沒有用 apache web server ,為了方便 deploy 跟 server 管理,就又改用 apache 了

關鍵解法:
Require all granted
範例:

$ sudo apt-get install mysql-client php5 apache2
$ sudo mkdir -p /data/dev
$ sudo vim /etc/apache2/conf-available/dev.conf
Alias /dev /data/dev
<Directory /data/dev>
        Options FollowSymLinks
        DirectoryIndex index.php
        AllowOverride None

        Require all granted
</Directory>

$ sudo a2enconf service-dev
$ sudo service apache2 restart