Authorkilawang

AWS – RDS Restore to Point in Time

昨天犯了一個錯誤,用錯腳本,導致更新資料到資料庫時,更新到Production上

原本是要更新到空的Stage資料庫上的…

緊急發現的時候需要還原,但是距離上一次備份資料是前一天

中間的資料差損失會造成很誇張的後果

 

印象中記得AWS有一個Restore to Point in Time的功能

就直接硬著頭皮上了

使用Restore to Point in Time有兩個條件

1.RDS必須有開啟 Automated Backups

2.同上一點,備份的區間就是可以回復的時間區間

舉例:我備份檔案選擇7天,那在選擇還原點的時間就是這七天內都可選

 

確認是不是有開啟很簡單,確認RDS選單內有沒有出現一堆Automated就是了

系統會自動製作許多還原點的Snapshots

還原流程則是

1.選擇你當下需要還原的RDS,在Instance Actions中選擇Restore to Point in Time

 

2.會出現一個建立新RDS的畫面,主要需要留意上方出現的還原時間選擇點

系統會預設最後一筆還原時間,是當下的5分鐘之前

或是你可以選擇在你設定的備份區間之內的任一時間點

 

3.幫還原的RDS設定名稱,其他設定預設會與原本的RDS相同,如VPC、Multi_AZ等

 

4.Launch DB即可

接著將連線導回還原時間點新建立的DB,基本上就完成的還原的動作

我實際使用後檢查DB的時間

我建立是11:27:00的還原點,DB內的最後一筆資料時間為11:26:55

所以還是會有些微的誤差,但比起系統最後一次備份的時間,還是好太多了

提供給各位參考

 

AWS – EC2 快速建立L2TP VPN

最近有接到一個需求,因許多手機不支援PPTP的VPN協定

大多要求更安全的VPN連接方式

所以要建立一個L2TP的VPN,然後要在AWS上建置

 

之前我建立L2TP的時候是在實體Server上做的,基本上都快忘光了

也很懶得從頭一步一步按部就班的去做

只好開始找懶人包,在研究了三小時之後找到一個百分百完美版

https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/README-zh.md

Lin Song (linsongui@gmail.com) 所建立的專案

基本上一鍵可以搞定

 

至於我這邊要補充的就是

PSK 的修改路徑 /etc/ipsec.secrets

LOG的開啟與debug模式修改路經 /etc/ppp/options.xl2tpd

新增帳戶在 /etc/ppp/chap-secrets

大致上是這樣子

 

應該是目前最簡單的安裝方式了

AWS – 線上繪製架構圖平台

今天討論事情才發現到

我沒有提供過任何的架構圖工具

所以補一篇文章提供一下我平常畫AWS架構圖的工具

https://cacoo.com/

免費版本只能輸出PNG

然後在 cacoo store商店內搜尋 AWS

即可找到AWS相關的服務套件

接下來就可以在線上畫架構圖了

另外也有雲端操作記錄的保存

萬一不小心關掉網頁 存檔之前操作記錄還是會留著的

Java Web 另一個選擇 Resin

兩年前曾經碰過的一套Java Web Server

當初是因為總監的要求才去研究,實際摸過之後發現其實效能很好

正常的Java Web 都是 Apache + Tomcat

然後開始有人用 Nginx + Tomcat

最後我是摸到了 Nginx + Resin

如果沒被修改掉的話,Yiabi應該還是我們當初建置的 Nginx + Resin 架構

 

首先官網是 http://caucho.com/

右上角就可以下載,這個是手動編譯版本

下載tar.gz版本之後 解壓縮 進到目錄之後編譯

#/configure –prefix=/usr/local/resin

#修改設定檔

cd /usr/local/resin/conf

vi resin.properties

#註解拿掉

#web_admin_external : true
#port也在此修改
#修改設定vi resin.xml

修改webapp id與路徑

<web-app id=”/Maltese” root-directory=”/home/webuser/ResinJservRoot/Maltese”/>

修改自動deploy路徑設定
web-app-deploy path=”/home/webuser/ResinJservRoot”

如果有買專業版本的話,有cache機制可以使用

修改cache參數
vi resin.xml

在cluster 內增加
<server-header> </server-header>
<resin:if test=”${resin.professional}”>
<cache memory-size=”64M”>
<rewrite-vary-as-private/>
</cache>
</resin:if>

 

在<web-app-deploy 底下增加
<web-app-default>
<prologue>
<allow-servlet-el/>
</prologue>

<session-config>
<use-persistent-store/>
<enable-url-rewriting>false</enable-url-rewriting>
</session-config>

<resin:if test=”${resin.professional}”>
<cache-mapping url-pattern=”/” max-age=”5s”/>
<cache-mapping url-pattern=”*.gif” max-age=”60m”/>
<cache-mapping url-pattern=”*.jpg” max-age=”60m”/>
<cache-mapping url-pattern=”*.png” max-age=”60m”/>
<cache-mapping url-pattern=”*.css” max-age=”60s”/>
<cache-mapping url-pattern=”*.js” max-age=”60s”/>
</resin:if>
</web-app-default>

接著是啟動與停止指令
啟動
/usr/local/resin/bin/resin.sh start
停止
/usr/local/resin/bin/resin.sh stop

效能上來說比tomcat快上約40%

不過免費版本最好的就是搭配Nginx使用

比較彈性也方便

AWS-CLI簡易切換ELB Health check

在工作上因為盡可能要做到自動化

所以很多指令操作都寫成了一堆的shell script (誰叫我linux系的XD)

在公司的系統維護上因為有需要切換維護頁面的顯示,但是在產品設計上有跟nginx連動

所以在原本的ELB health check在tomcat關閉的時候需要切換到80 port的nginx維護頁面上

所以為了方便,寫了這個小工具

主要是用aws cli 與iam的身分去執行

#!/bin/bash

case $1 in
java)
aws elb configure-health-check –load-balancer-name jack-sim –health-check Target=HTTP:80/java/,Interval=15,UnhealthyThreshold=2,HealthyThreshold
=2,Timeout=3
;;
web)
aws elb configure-health-check –load-balancer-name jack-sim –health-check Target=HTTP:80/,Interval=15,UnhealthyThreshold=2,HealthyThreshold=2,Timeou
t=3
;;
*)
echo “Usage: $0 {java|web}”
esac
exit 0

主要就切換 80:/ 與 80:/java/ 兩個health check的監控存活頁面

畢竟在java更新重啟的時候會失效導致ELB將server抽掉,user無法正常瀏覽到維護畫面

所以切換給80由nginx判斷並顯示維護畫面,也可以透過nginx的判斷讓公司內部進入測試

 

AWS CloudTrail Log問題

最近公司的AWS帳號開啟了 CloudTrauil的功能

但是最近在查詢操作紀錄的時候發現到有怪怪的LOG

%e6%93%b7%e5%8f%96

我使用IAM user進行操作,但是出現了root的操作紀錄

詢問了一下主管,並未使用root同時進行操作

然後細查了LOG的內容是針對同一個service的操作

詢問了新加坡的TC之後,得到了一個連結

https://aws.amazon.com/tw/premiumsupport/knowledge-center/cloudtrail-root-action-logs/

說明這個狀況是正常的XD

提供給需要的人參考…

AWS-MFA and Authy 設定

最近因為有遇到一些狀況,為了資安的考量

建議公司全部帳號一律使用MFA做多一道防護

其實很多遊戲都有使用了這樣子機制,包括一些銀行也有,但是銀行端是使用OTP

設定的話,在AWS的IAM當中,每個USER內都可以設定自己的MFA裝置

擷取

由於我的IAM帳號有設定了,我先移除重新設定一下

擷取

點選 Manage MFA Device,之後會看到兩個裝置的設定,正常都是選APP,手機太方便XD

擷取

會出現一些關於MFA的注意事項與說明

擷取

然後會出現QR CODE,安裝APP 掃瞄一下

填上出現的兩組code就可以通過驗證了

之後登入就需要多填一組驗證的隨機碼了

 

再來是要說明的Authy

註冊Authy之後,掃上一個步驟的QR CODE

會出現下圖

S__4972616

確定之後

S__4972617

之後就用這個驗證做登入了

當然為什麼要推薦使用Authy的原因不是這麼簡單

原因在於Authy有Chrome套件

安裝完之後 Chrome會出現一個工具鈕

擷取

點開之後,第一次會要求你註冊手機號碼

擷取

填入後會請你確認需要哪一種方式驗證,可以使用電話、SMS,以及另一個有註冊過的裝置,我習慣使用SMS

擷取

註冊完之後,會出現這畫面,如果與你手機有同步的話,就會出現你有的裝置MFA資訊

擷取

有驚嘆號是因為尚未解除鎖定,會先要求設定開啟Authy的密碼

擷取

設定完密碼之後,你會發現右下角的Backyo&Sync無法打勾

這時候請去手機APP裡面設定backup password

之後關閉設定視窗,回到下圖,點一下鎖頭

輸入backup password即可解除

擷取

之後沒有手機,也可以用chrome解除MFA了

AWS RDS MySQL 連線數量限制

前天看到一篇文章有提到關於RDS MySQL的最大連線數量限制

剛好之後也許會需要這個數據作為系統架構設計的參考

順便分享出來

規格與連線數量限制如下方表格

t2.micro 66
t2.small 150
m3.medium 296
t2.medium 312
M3.large 609
t2.large 648
M4.large 648
M3.xlarge 1237
R3.large 1258
M4.xlarge 1320
M2.xlarge 1412
M3.2xlarge 2492
R3.xlarge 2540

有些規格可能沒有資料,但實際上按照比例去參考應該相差不遠

參考資料來源

AWS ELB新服務 ALB

AWS真是一個強大的功能

今天更新了一個新的Service 由ELB延伸出的新服務 ALB

我大概看了一下文章的內容

傳統的ELB走網路層的協定去做負載平衡

ALB走第七層 應用層的協定做負載平衡

以下圖為例

右邊是傳統的ELB模式,左邊是ALB模式

主要定義為 假設第一組的監控路徑為 /index.php  那麼第二組可以設定 /mobile.php

這樣子是不是一組ELB分為兩個應用了呢?

其實滿有趣的,應用的程度應該會多樣化許多,之後有需求就可以玩看看啦~

8/19 補充更新,ALB可以使用port作為一個單位做指定,配合container的形態使用

因為我本身沒有實際設置過,所以這資訊是一位強者提供的,實際上的功能請親自使用XD

參考文章來源 AWS Blog

AWS CLI 取得EC2 IP

目前的公司有與日本合作

在做關於AWS 上的 Auto scaling的時候,因為有佈署更新相關的需求

所以需要得知Auto scaling所啟動的EC2 IP

有看到日本方面提供了一個Ruby寫的腳本

但是好像不夠泛用

 

所以我自己寫了一個Shell版本的

主要是用Tag Key去做判斷取出對應EC2 IP

#!/bin/bash
key=Name
value=”$1″
declare -a hostbox
declare -a ipbox
hosts=`aws ec2 describe-tags –filters “Name=key,Values=Name” “Name=value,Values=$value” –output text|wc -l`
for (( i=1 ; i<=$hosts ; i++ ))
        do
        hostbox[i]=`aws ec2 describe-tags –filters “Name=key,Values=Name” “Name=value,Values=$value” –output text|head -n $i|tail -n 1|awk ‘{print $3}’`
        ipbox[i]=`aws ec2 describe-instances –instance-ids ${hostbox[i]} |grep PrivateIpAddress|tail -n1|awk ‘{print $2}’|cut -d ‘”‘ -f2`
        echo ${ipbox[i]}
        done

© 2017 Kila's IT Home

Theme by Anders NorénUp ↑