使用 Slack API 傳遞訊息至 Slack頻道

Slack 是目前非常流行的溝通協作工具, 而且也支援API 提供呼叫。 有時想把一些系統重要訊息丟到Slack頻道裡,方便監控,甚至還能在手機上直接看,那將會非常實用.

--

Slack App Directory

Slack 有一個 App Directory (可理解為 Slack外掛商店), 這次使用的是 Incoming WebHooks , 可透過它,以HTTP Request方式傳遞訊息進去Slack. 如果只是單向傳訊息的用途, 那使用這App是不錯的選擇.

以下是操作步驟:

  1. 到Incoming WebHooks 這個App頁面申請 ,取得Webhook URL
  2. 發出 HTTP Request, 傳遞訊息進去 Slack

取得Webhook URL

以下是取得 Webhook URL的步驟

more ...

練習題: 匯入IP國家資料庫至DynamoDB - Part 1 解析資料

IP與地理資訊對應資料庫,在很多場合都會用到, 例如網路廣告業、線上遊戲產業、各種影片、直播鎖區的需求等等. 以前知道有一些免費的這類資料可供下載, 我想試試看將資料灌到 NoSQL 也就是 AWS DynamoDB裡,並測試一下效能如何.

下載資料庫

根據 stackoverflow 鄉民的討論串: Best IP to Country Database , 免費資料庫有下列兩種, 大部分人都推薦 前者Maxmind 的產品. 這類資料庫的付費模式大都相同, 免費的資料庫涵蓋了各個國家的ip對照表, 而更詳細的城市、經緯度對照則要付費(年費超過1,000美金).

  • Maxmind 公司的 GeoIP2 資料庫
  • ip2nation

下載

http://dev.maxmind.com/geoip/geoip2/geolite2/ --

解壓縮

--

裡面的資料有三類:

  • IPv4 資料庫
  • IPv6 …
more ...

練習題: 匯入IP國家資料庫至DynamoDB - Part 2 匯入DB

Create Table

之前跟 DynamoDB 不是很熟, 在Create Table的設計上,先後換了好幾個版本.

最後版本是這樣子的:

Table name: ip_geo_table

Primary key :
    partition key:  partition (string)
    sort key: num_start (number)

Provisioned capacity:
    Read capacity units: 1
    Write capacity units: 1 (匯入資料前,拉高至100,理由後述)

Secondary indexes:
    不需建任何二級索引

Primary Key 規劃

DynamoDB 支援兩種類型的Primary Key:

  1. Partition Key : 例如 身分證字號、流水號
  2. Partition …
more ...

練習題: 匯入IP國家資料庫至DynamoDB - Part 3 查詢

搞定資料庫之後, 最後就是如何下查詢條件的問題. 目標只有一個: 給定一個 IP, 查詢該一筆資料出來. 但是可能是以前 RDBMS 資料庫玩太久,觀念一時轉不過來. 一直想寫出這樣的語法:

SELECT *
FROM ip_geo_table
WHERE IP_START <= '8.8.8.8' AND
      IP_END >= '8.8.8.8'

很不幸的,DynamoDB 跟 RDBMS 本質上還是不太一樣的. 在這裡除非整個Table Scan一次才有辦法處理這樣的查詢, 但是20+萬筆全部Scan一次是很慢的, 只好另尋它法.

簡化問題

稍微簡化問題一下, 假如我們有一個相似但是比較簡單的Table如下, 我們輸入數字 25, 那要如何找出正解,也就是20~29這個第二筆?

--

允許的方式只能使用主鍵(前兩個欄位) 以及 Sort Key(num欄位 …

more ...