看板 Soft_Job 關於我們 聯絡資訊
Claudia.js是一個可以把Node.js/Javascript 的Microservice 簡單地部署到AWS Lambda的工具。 只要一行command就會幫你處理好AWS的IAM/Lambda的設定, 甚至是BOT的configuration,非常方便。 因為這個工具目前中文的介紹似乎還不多, 所以小的想拋磚引玉先來個簡單的中文介紹如何使用Claudia製作FB機器人, 請版上各位年薪千萬的大大們鞭小力一點。 Blog無廣告音樂好讀版 http://kaoruiscoding.blogspot.tw/2016/12/claudiajsfacebook.html 以前我們常常會需要一些Web Service幫我們處理一些簡單的GET/POST, 這些Web Service可能很簡單並不複雜,甚至不需要UI, 不過它總是需要一個host來立足,於是你可能就必須要找一台主機, 如果是Windows的話還要有IIS (然後忍受IIS偶爾的衝康跟無止盡的windows update) 所以當AWS推出了Lambda,身為一個Infra暴弱的Dev,真的會要給AWS一個大大的讚! 這才是真正的SASS精神啊。畢竟我們不需要為了喝牛奶而去養一頭牛你說是吧。 Lamdba讓程式開發人員可以專心的在程式的邏輯上面, 將每個function獨立出來計費可以讓阮囊羞澀的獨立開發者與startup 不需要負擔主機的維運費用, 並且有精美的dashboard可以統計各個function的狀態,真的是非~常~的美好。 BUT,這世界上總是有個BUT,Lambda要寫python/node.js方便是方便, 不過在部署的時候還是得設定IAM的Role,function才能正常運行。 如果是AWS的菜鳥(尤其是Infra跟我一樣爆爛的)看到IAM的設定應該會很茫然。 於是現在就有很多Lambda的部署工具,比方說Python用的Kappa, 以及現在我想介紹的Claudia.js。 Claudia.js其實就是用AWS的Node.js framework將Lamdba的部署自動化, IAM以及Lambda的設定都在Claudia.js當中完成。 之後如果要更新code,也只要一個指令就能完成, 而且不需要登入AWS Console,是不是很方便啊。 以下就來介紹怎麼透過Claudia.js自動部署microservice 並在Facebook上面做一個機器人。 首先你必須要申請一個AWS帳號(不然你是要部署到哪裡去), 在此就不贅述如何申請了。 設定環境 因為Claudia.js是用來Deploy Node.js的microservice, 所以你的電腦也要裝Node.js(這不是廢話嗎) Node.js預設就有npm(Node.js的package管理工具)因此以下會提到npm指令, 但不需要另外安裝。 安裝Node.js Windows版 Command: sudo curl http://nvm-latest.herokuapp.com | bash 手動安裝:到官網安裝最新版的Node.js 安裝完後在Command line工具中執行 node -v 就可以檢查Node.js是否正確安裝。 Mac版 雖然Mac的Homebrew好用到令人流淚,但因為node.js版本更新非常快速, 因此推薦使用nvm安裝。透過nvm安裝Node可以很簡單的輕鬆切換Node.js版本。 如果你有安裝XCode,可以透過XCode來安裝nvm $ xcode-select --install 如果沒有安裝,可以透過curl來安裝 sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash 在Terminal中輸入nvm ls-remote找出最新的版本, 我寫這篇文章時最新的版本是7.2.1 執行$ nvm install 7.2.1 $ nvm alias default 7.2.1 安裝node.js 新增一個IAM使用者 1.到AWS主控台,從上方的下拉選單選擇IAM服務, 進入IAM服務後選擇左邊的"Users" ,並按下藍色的"Add User" 2.輸入使用者名稱,並勾選“Programmatic access”, 然後按下“Next:Permissions" 3.選擇”Attach existing policies directly“ 並在底下的policy勾選IAM Full permission / Lambda Full permission, 然後按下"Next: Review" 4.確定這個使用者有IAM Full Access 和Lambda Full Access之後, 按下”Create User“ 5.按下"Download .csv"按鈕可以下載這個使用者的Credential, 強烈建議要下載下來, 因為當按下close之後你就再也沒有機會看到Secret access key 了, 只能重新建立一個使用者。 (都已經說了This is the last time these credentials will be available to download.了~) 建立登入資料 這個步驟是讓你在Deploy的時候不需要再輸入帳號密碼。 用Sublime或Notepad等純文字編輯器打開 Mac/Linux 的 ~/.aws/credentials 或 Windows 的 C:\Users\USERNAME\.aws\credentials,加入以下指令: [default] aws_access_key_id = YOUR_ACCESS_KEY_ID aws_secret_access_key = YOUR_ACCESS_SECRET_KEY YOUR_ACCESS_KEY_ID指的是剛剛建立好的帳號中,最後一步顯示的access_key_id, YOUR_ACCESS_SECRET_KEY則是被隱藏的access Secret key. 如果剛剛沒有把資料保存下來...再回去重新建立一個使用者吧 安裝Claudia.js 因為已經安裝好npm了,安裝Claudia就是一件非常輕鬆簡單的事情。 在Mac的Terminal或是Windows的console打入以下指令: npm install claudia -D Claudia就裝好了。 開始寫機器人囉! 初始化npm專案 1.建立一個資料夾並命名為aLittleGreeter 2.打開Mac Terminal/Windows command line tool 並移動到這個資料夾(cd aLittleGreeter) 3.初始化npm專案:輸入npm init 安裝套件 在寫機器人之前,我們還需要安裝兩個npm套件 1.claudia-bot-builder: 有了這個套件,Claudia才能幫你設定和其他通訊軟體 (例如Facebook, skype, slack) 2.huh:這是亂數取一個理由的npm套件, 可以在系統掛掉的時候第一時間回信給PM解釋(誤) 在Terminal或是Cmd輸入 npm install claudia-bot-builder huh -S 即可安裝這兩個套件。 BOT的Code (鄉民表示:終於到寫Code了) 打開你的sublime或是其他的記事本工具,輸入以下的code: const botBuilder = require('claudia-bot-builder'); const excuse = require('huh'); module.exports = botBuilder( function(message) { return 'Thanks for sending '+ message.text + 'Your message is very important to us, but '+excuse.get(); }); 然後儲存成index.js。 這是一個很簡單的機器人,會把你說的話再重複一次, 然後找個理由回(ㄈㄨ)答(ㄧㄢˇ)你。 透過Claudia把Code部署上AWS Claudia會幫你把Lambda和Role該設定的全部都設定好, 就交給Claudia部署就可以了。 只需要一個指令 claudia create --name aLittleGreeter --region us-west-2 --api-module index name 屬性: Claudia會使用name來建立IAM Role和Lamdba region屬性: 你要部署到哪個AWS的region, 在這邊使用us-west-w2指的是美國的奧勒岡州。 可以參考AWS Region列表 https://goo.gl/FXWlJW 選擇要部署到哪個region。 api-module屬性:Lamdba程式的進入點。我們的檔名是index.js, 所以將api-module設定為index, Claudia就會將index.js的內容部署到Lamdba。 如果沒有問題,就會看到Claudia一直在幫你跑AWS上面的流程了。 部署完成以後,應該會看到以下的訊息 { "lambda": { "role": "aLittleGreeter-executor", "name": "aLittleGreeter", "region": "us-west-2" }, "api": { "id": "[api-gateway-id]", "module": "index", "url": "https://[api-gateway-id].execute-api.us-west-2.amazonaws.com/latest" "deploy": { "facebook": "[url]facebook", "slackSlashCommand": "[url]slack/slash-command", "telegram": "[url]telegram", "skype": "[url]skype", "twilio": "[url]twilio", "kik": "[url]kik", "groupme": "[url]groupme", "viber": "[url]viber", "alexa": "[url]alexa" } } } 然後回到AWS的IAM 管理介面,選擇Role, 可以看到Claudia已經幫你建好一個Role了。 再切到AWS的Lambda管理介面,發現Claudia也建好Lambda的函數了。 這樣AWS的部署就已經完成了。有沒有很方便呀。 設定Facebook粉絲專頁機器人 OK,我們已經部署完AWS的部份了,接下來是Facebook的設定。 1.先建立一個粉絲專頁 2.到Facebook Developer應用程式開發頁面, 如果之前沒有註冊成為Facebook Developer, 應該會先看到"立即註冊"的按鈕,按下立即註冊成為Facebook Developer。 3.按下“新增應用程式”,類別選擇“專業應用程式”, 取好名字以後選擇“建立應用程式編號" 4.建立好之後會到這個應用程式的主控台, 在產品設定中按下Messanger區塊旁的"開始使用" 5.在"權杖產生"中,先選擇先前建立好的粉絲專頁, 在旁邊的粉絲專頁存取權杖中會顯示一組權杖,先記錄下來。 6.這時我們要在Claudia設定與Facebook連動, 回到電腦的Terminal或是Cmd Console,打入以下指令: claudia update --configure-fb-bot Claudia會將Code重新部署,部署完後會出現以下的回應: Facebook Messenger setup Following info is required for the setup, for more info check the documentation. Your webhook URL is: https://[api-gateway-id].execute-api.us-west-2.amazonaws.com/latest/facebook Your verify token is: [verify Token] Facebook page access token: Claudia詢問的Facebook page access token, 就是剛剛Facebook應用程式中粉絲專頁的權杖,將剛剛複製好的權杖貼入Terminal 接著Claudia會詢問Facebook App Secret, 到應用程式中選擇“主控台”,在主控台中找到"應用程式秘鑰", 按下顯示後,將內容貼到Terminal 到這邊AWS端的連動已經設定完成,接下來回到Facebook應用程式 到"Webhooks"區段中選擇“Setup Webhook” 填寫Webhook資訊: 回呼網址:填上Claudia回應中的deploy->facebook區段中的內容, 通常是 https://[api-gateway-id].execute-api.us-west-2.amazonaws.com/latest/facebook 驗證權杖:在剛剛打入claudia update --configure-fb-bot的時候, Claudia的回應中有一段 Your verify token is: [verify Token], 填入這個verify token 訂閱欄位:至少要勾選messages 儲存之後,就可以看到Webhooks區段有綠色勾勾,代表已經設定完畢 然後就可以嘗試傳送訊息給你的粉絲專頁了 茶包射手 *部署的時候出現npm error 檢查一下Code有沒有寫錯,或是需要的npm套件沒有安裝。 *部署的時候出現AccessDeniedException 檢查IAM的使用者是否已經有IAM和Lambda的Full permission *出現package.json does not exist in the source folder 通常是因為沒有執行npm init,可以再執行一次讓npm產生package.json 部署失敗, 出現Make sure you have the latest version of node.js and npm installed. 這是因為Node.js太舊了, 如果Mac有安裝Homebrew只要透過Homebrew更新就可以了 brew upgrade node 如果沒有Homebrew,可以透過npm清除Node.js的Cache並下載最新版: sudo npm cache clean -f sudo npm install -g n sudo n stable Windows的使用者也可以透過npm來更新node.js npm cache clean npm update -g *我想更新我的Code,重新執行Claudia出現這樣的訊息: Role with name aLittleGreeter-executor already exists. 這是因為重複執行Claudia create。 Claudia create會自動建立AWS的IAM Role和Lamdba, 而名字是identity不能重複的。 所以如果要更新Code或是設定其他的組態(像是Facebook連動), 請用Claudia update. 如果想要更新的不是只有Code本身,像是想要換AWS的region, 那麼只能將建立好的IAM Role, Lamdba等等都先手動刪除再執行Claudia create。 Facebook機器人不會回應我的朋友 這是正常的,這個機器人目前只會回應你而已, 當全部開發完成之後會需要提交給Facebook審查, 可以參考Facebook的審查說明。 https://developers.facebook.com/docs/messenger-platform/app-review 人工審查需要七天左右,審查通過其他人才可以用。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.205.197 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1481941288.A.9D7.html
jerry771210: 太威了 12/17 10:50
lipojack: 推 12/17 11:38
jjwei: push! 12/17 12:46
MagicTouch: 感謝分享~ 12/17 12:48
Ekmund: 喔喔這個讚 12/17 12:53
blackcan: 感謝分享 12/17 12:57
wddx: 感謝大大分享! 12/17 13:09
saivantist: 讚讚 12/17 13:45
SmallDruid: 好玩欸 12/17 14:02
jimmy689: 家豪推 12/17 14:34
ZC: 感謝 12/17 15:08
ian90911: 推 12/17 17:40
drajan: 讚 12/17 22:40
xxhomey: 推 12/17 22:45
srxrrr: 推推!!!! 12/17 23:46
NvidiaCUDA: 推 12/17 23:47
jay123peter: 推 12/18 02:07
bruce723: 推 12/18 09:21
yongb: PUSH 12/18 14:54
viper9709: 推~感謝分享 12/18 16:58
vidcina: 把朋友加到粉絲頁面的tester就可以收到了 12/19 10:11
kyocartoon: 推 12/19 19:05
yuanyu90221: 推 12/19 22:23
markbex: 感謝原po!! 12/21 19:01
youccu: 謝分享 12/22 10:01