2017年11月30日 星期四

AWS CloudWatch Filter

CloudWatch 的 Filter 功能,主要的目的好像是用來觀察指定的事件在某個時間區段中的發生狀況
所以總歸來說,適用在想要把結果劃成折線圖那種的狀況。

例如 AWS 官網給的範例 [2],都是屬於建立 Filter 去偵測某個特定樣式的 log 是否出現
出現的話,在 Metric 上會反應出「事件出現次數 +1」
然後最後在 CloudWatch 的 Metrics 那邊,就能夠以折線圖的形式,看到例如每分鐘這個事件的發生狀況。

參考資料
  1. 淺談系統監控與 AWS CloudWatch 的應用
  2. Creating Metric Filters

2017年11月27日 星期一

在 Java 中把 AWS DynamoDB 的紀錄轉成 JSON

DynamoDB 上的紀錄,都會有像是 {“S”: “XXX”} 之類的格式,用以表示它在 DynamoDB 裡的型態
不過程式在處理時,這樣很麻煩~。

實務上,AWS SDK 裡提供了一些方法,可以幫我們去掉那些多餘的東西。
具體來說,例如以下的程式碼:

ScanRequest scan = new ScanRequest();
ScanResult result = dynamodbClient.scan(scan);

Gson gson = new GsonBuilder().build();

for (Map item : result.getItems()) {
    JsonElement json = gson.toJsonTree(InternalUtils.toSimpleMapValue(item));
}

上述的程式碼,是假設對一個 DynamoDB 的表格做 scan 操作
操作完以後,要把 scan 出來的結果,用 GSON 轉成 JsonElement 的型態。
這裡透過 com.amazonaws.services.dynamodbv2.document.internal.InternalUtils 這個套件
就能夠去掉欄位型態這個東西,讓結果成為單純的 JSON。

參考資料
  1. DynamoDB - Object to AttributeValue

2017年11月24日 星期五

AWS Lambda 呼叫另一個 AWS Lambda

一般來說,Lambda 都是透過中介服務去觸發的
例如透過 DynamoDB Stream、SNS、Kinesis、S3 等等的
當這些服務發生變更時,發送訊息觸發 Lambda。

不過實務上,Lambda 本身只要具備 Invoke 權限,就能夠直接透過 AWS 的 Lambda API 去觸發另一個 Lambda。

2017年11月22日 星期三

AWS SNS 的 Delivery Policy

在使用 SNS 時,需要考慮如果接收端處理 message 失敗了該怎麼辦?
如果沒有做特殊的設定,預設 SNS 是會直接走 Backoff Phase,重試三次、每次延遲 20 秒。

不過如果想要更多一點的重試,或者想設定比較複雜的行為,就需要稍微了解一下 SNS 的 Delivery Policy。

2017年11月16日 星期四

在 Elasticsearch 上安裝 X-Pack

因為想要監控 Elasticsearch,所以就試著安裝了 X-Pack。
X-Pack 安裝流程請直接參考官方文件 [1] XD
因為只有幾個動作而已,這裡就省略了。

yum 鎖定軟體版本

以我的狀況來說,因為我的 Elasticsearch 有使用一些有限定版本的擴充套件
因此要避免 yum 不小心幫我把 Elasticsearch 升級。
要作到這個效果,可以使用 versionlock 這個工具
例如以下這樣,可以把 elasticsearch 和 kibana 套件鎖在目前安裝的版本上。

yum install yum-plugin-versionlock
yum versionlock elasticsearch-*
yum versionlock kibana-*
參考資料
  1. How do I exclude kernel or other packages from getting updated in Red Hat Enterprise Linux while updating system via yum?

2017年11月12日 星期日

從 Jupyter 讀取 Windows 磁碟中的鐵達尼號資料

在書上的範例中,提到用鐵達尼號的資料做分析
不過書上範例所指的資料位址已經無法存取了。
稍微搜尋了一下,發現 Kaggle 也有提供這個資料 [1],而且是免費的。

從 [1] 下載資料下來之後,假設是放在 D:\test\data\titanic 這個資料夾裡,訓練用的資料命名為 train.csv

import pandas

training_data_path = "D:\\test\\data\\titanic\\train.csv"

# Read training data.
training_data = pandas.read_csv(training_data_path)
print(training_data)

路徑要記得跳脫,才能正確找到檔案。

參考資料
  1. Kaggle - Titanic: Machine Learning from Disaster
  2. Read a .csv into pandas from F: drive on Windows 7

2017年11月7日 星期二

透過 Anaconda 安裝 Tensorflow 與 Keras

  1. 下載並安裝 Anaconda
  2. 執行以下的指令建立 Python 虛擬環境
    conda create --name tensorflow python=3.5 anaconda
  3. 啟用虛擬環境
    activate tensorflow
  4. 安裝 Tensorflow
    pip install tensorflow
  5. 此時想再使用 pip 會出錯 [1],要先以下述指令強制重新安裝 html5lib
    conda install --force html5lib
  6. 安裝 keras
    pip install keras
參考資料
  1. pip throws TypeError: parse() got an unexpected keyword argument 'transport_encoding' when trying to install new packages