2018年12月30日 星期日
k8s mongo stateful
type :LoadBalancer 可連外,但無法使用 cvallance/mongo-k8s-sidecar
cvallance/mongo-k8s-sidecar
2018年12月20日 星期四
解 下載檔預設是gz
const request = require('request');
const zlib = require('zlib');
const concat = require('concat-stream');
const check_place_list = () => {
return new Promise(async (resolve, reject) => {
request("https://tcgbusfs.blob.core.windows.net/blobtcmsv/TCMSV_allavailable.gz")
.pipe(zlib.createGunzip())
.pipe(concat((stringBuffer: any) => {
// console.log(stringBuffer.toString());
}));
})
}
2018年12月17日 星期一
k8s 小工具
kubectl run -i --tty alpine --image=alpine --restart=Never -- sh
kubectl exec -ti alpine /bin/sh
apk add --no-cache curl
外部curl
kubectl run example -i -t --rm --restart=Never --image centos:7 -- curl -s http://ipinfo.io/ip
開mongo image
kubectl exec -ti alpine /bin/sh
apk add --no-cache curl
外部curl
kubectl run example -i -t --rm --restart=Never --image centos:7 -- curl -s http://ipinfo.io/ip
開mongo image
kubectl run -it --rm --restart=Never mongo-cli --image=mongo --command -- /bin/bash
root@mongo-cli:/# mongo "mongodb://mongo-0.mongo.db,mongo-1.mongo.db,mongo-2.mongo.db:27017/test"
2018年11月12日 星期一
gke k8s 筆記
https://cloud.google.com/sdk/gcloud/reference/config/set
設定 porject 跟 zone 才能抓到 叢集
To set the project
設定 porject 跟 zone 才能抓到 叢集
To set the project
property
in the core section, run:$ gcloud config set project myProject
To set the
zone
property in the compute
section, run:$ gcloud config set compute/zone asia-east1-b
2018年9月21日 星期五
Voice App 2018展望
smart speaker今夾應該是起點,
其實大家都是猜。
市面上smart speaker 百花齊放的,
最終比的還是 語音的辨識率,
而語音辨識率最終還是得來自語音辨識資料的大數據,
在這一點上,
我實在是不知道,
其他家要怎麼跟,
android(Google) iphone(mac)比,
而homepod(mac)的定價也實在是...
Google assistant 自已內部的sdk 居然就有兩版 Actions on Google v2 Alpha and Dialogflow Fulfillment Beta 好傻眼。
https://matthewayne.com/post/actions-on-google-v2-alpha-dialogflow-fullfillment-beta/
不過跟據diagflow的coder所撰寫的本文表示,
用dialogflow就對了,因為dialogflow會支援google assistant完整之外,還可以支援一堆平台,
雖然發現本篇是我在看actions on google之後,再度傻眼。
不過作者有清楚表達 actions on google 這個sdk之所以持續存在,主要是這個sdk 才是對google assistant 支援最完整的。
因為目前smart speaker 百花齊放的,
1.以未來性google home比較有機會
2.對平台有最大限度的支援
所以目前還是選dialogflow的sdk比較穩妥
但當 google home 打下江山之後,完整支援的actions on google會是好的選擇
不過當我看完 dialogflow 怎麼取 permission 時,我又變心了,因為它目前是用 http request 來取,也太麻煩了。
結論:
如果webhock要支不同的平台,例如 google assistant ; aws alxea ; line clova 等,
firebase cloud function 還是得依照不同平台來做設計,才會有完整的體驗。
例如 google home 就用 actions-on-google 其他的用 diagflow-fullfillment
其實大家都是猜。
市面上smart speaker 百花齊放的,
最終比的還是 語音的辨識率,
而語音辨識率最終還是得來自語音辨識資料的大數據,
在這一點上,
我實在是不知道,
其他家要怎麼跟,
android(Google) iphone(mac)比,
而homepod(mac)的定價也實在是...
Google assistant 自已內部的sdk 居然就有兩版 Actions on Google v2 Alpha and Dialogflow Fulfillment Beta 好傻眼。
https://matthewayne.com/post/actions-on-google-v2-alpha-dialogflow-fullfillment-beta/
不過跟據diagflow的coder所撰寫的本文表示,
用dialogflow就對了,因為dialogflow會支援google assistant完整之外,還可以支援一堆平台,
雖然發現本篇是我在看actions on google之後,再度傻眼。
不過作者有清楚表達 actions on google 這個sdk之所以持續存在,主要是這個sdk 才是對google assistant 支援最完整的。
因為目前smart speaker 百花齊放的,
1.以未來性google home比較有機會
2.對平台有最大限度的支援
所以目前還是選dialogflow的sdk比較穩妥
但當 google home 打下江山之後,完整支援的actions on google會是好的選擇
不過當我看完 dialogflow 怎麼取 permission 時,我又變心了,因為它目前是用 http request 來取,也太麻煩了。
結論:
如果webhock要支不同的平台,例如 google assistant ; aws alxea ; line clova 等,
firebase cloud function 還是得依照不同平台來做設計,才會有完整的體驗。
例如 google home 就用 actions-on-google 其他的用 diagflow-fullfillment
2018年6月1日 星期五
google cloud storage + google Load balancing + google cloud dns + google cloud cdn + Letsencrypt free ssl cert
前言:
因為我的AWS到期了,我很多站要搬家,我的GCP 有credits 還沒用完,故決定搬到 GCP
問題點:
firebase hosting 有送 ssl ,網頁直接丟 public 就搞定了,原本是最理想的方案,結果,他一個專案只能有一個 public;而一個billing account 只能連 5 個 project,而我有很多站...]
解決方案:
1.function 的部份直接用 google cloud function 或 firebase function 處理
2.靜態網頁的部分,
google cloud storage 的bucket 可以直接在 dns 設定裡加 cname => www / c.storage.googleapis.com => bucket: http://storage.googleapis.com/www.example.com/
就直接對應上去了。
https://jerrynest.io/cloud-storage-static-web/
but
https
就得靠
google Load balancing + google cloud dns + google cloud cdn
解
https://console.cloud.google.com/net-services/loadbalancing/
先去申請一個免費的ssl
https://www.sslforfree.com/
https://cloud.google.com/compute/docs/load-balancing/tcp-ssl/
直接申請https那個就好了。
因為我的AWS到期了,我很多站要搬家,我的GCP 有credits 還沒用完,故決定搬到 GCP
問題點:
firebase hosting 有送 ssl ,網頁直接丟 public 就搞定了,原本是最理想的方案,結果,他一個專案只能有一個 public;而一個billing account 只能連 5 個 project,而我有很多站...]
解決方案:
1.function 的部份直接用 google cloud function 或 firebase function 處理
2.靜態網頁的部分,
google cloud storage 的bucket 可以直接在 dns 設定裡加 cname => www / c.storage.googleapis.com => bucket: http://storage.googleapis.com/www.example.com/
就直接對應上去了。
https://jerrynest.io/cloud-storage-static-web/
but
https
就得靠
google Load balancing + google cloud dns + google cloud cdn
解
https://console.cloud.google.com/net-services/loadbalancing/
先去申請一個免費的ssl
https://www.sslforfree.com/
https://cloud.google.com/compute/docs/load-balancing/tcp-ssl/
直接申請https那個就好了。
2018年5月18日 星期五
2018年5月16日 星期三
2018年3月22日 星期四
aws lambda 只有isomorphic-fetch傳上去可以正常跑出來
'use strict';
const fetch = require('isomorphic-fetch');
module.exports.hello = (event, context, callback) => {
fetch('https://xxxx/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: `
{
}
` }),
})
.then(res => res.json())
.then(res => console.log(res.data));
const response = {
statusCode: 200,
body: JSON.stringify({
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
}),
};
callback(null, response);
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event });
};
2018年3月17日 星期六
2018年3月16日 星期五
chatbot的未來在車用系統
現在的chatbot應用平台(line fb messenger telegram slack....),根本無法讓chatb ot作良好的應用。
在有眼有手有腳可用的情況之下,
在有眼有手有腳可用的情況之下,
app 或 pwa 的solution,
都可以讓任何情況應用的更好,
其實現有2018.03以前做的都是玩具而已。
什麼情況會沒有眼手腳可用?
就是開車啊!
所以chatbot的殺手應用,肯定是車用系統。
2018年2月25日 星期日
serverless gcp (google cloud functioin)
參考這個。
開新的 project
要下載keyjson 註明在 serverless.yaml裡
sls deploy
service: serverless-85332
provider:
name: google
runtime: nodejs
project: serverless-85332 //這裡要註意,要和你的project名稱一樣
# the path to the credentials file needs to be absolute
credentials: ~/.gcloud/keyfile.json
後記:
bug:
因為想查 google cloud functions 有沒有台灣,所以下載 gcloud,但是不知道為何,目錄權限得一直自已開啟。
functions:
line_notify_cpc:
handler: handler.line_notify // handler 的命名,gcp不允許的樣子
events:
- http:
method: get
path: line_notify_cpc
2018年2月10日 星期六
使用 botframework + botbuilder-linebot-connector + serverless(AWS lambda) + botbuilder-mongodb-storage 連 mongodb cluster 開發 LineBot 入門 2
https://github.com/Wolke/linebot-serverless-MongoDbStorage-LineConnector-typeScript-starter-Kit
我直接解擇這個架構好了
我直接解擇這個架構好了
- serverless.yml 這個就serverless 的設定,得配合我開在AWS 上的 mongo cluster ,才能讓 aws lambda 存取。http://wolke-codes.blogspot.tw/2018/01/serverless-aws-lambda-aws-mongodb.html
- bot/bot.ts bot 的流程... 可以參考我在IT鐵人的不負責任教學:https://ithelp.ithome.com.tw/users/20046160/ironman/1510
- handler.js :這個是serverless 的預設的 function 定義的地方。
'use strict'; var config = require("./conf");//讀取你的設定 var bot_dailog = require("./bot/bot")//將bot 流程 require 進來。 var botbuilder_linebot_connector_1 = require("botbuilder-linebot-connector"); var botbuilder_mongodb_storage_1 = require("botbuilder-mongodb-storage"); var builder = require('botbuilder'); var connector = new botbuilder_linebot_connector_1.LineConnector({ hasPushApi: false, // your line channelId: process.env.channelId || config.channelId, channelSecret: process.env.channelSecret || config.channelSecret, channelAccessToken: process.env.channelAccessToken || config.channelAccessToken });//產生connector
const response = { statusCode: 200, body: JSON.stringify({ message: 'Go Serverless v1.0! Your function executed successfully!', input: event, }), }; callback(null, response); // Use this code if you don't use the http event with the LAMBDA-PROXY integration // callback(null, { message: 'Go Serverless v1.0! Your function executed successfully!', event }); };
使用 botframework + botbuilder-linebot-connector + serverless(AWS lambda) + botbuilder-mongodb-storage 連 mongodb cluster 開發 LineBot 入門 1
名字超長的一篇教學,
為什麼會搞到這麼長,
就是經驗而已。
- botframework: ms 出的一個開放 chat bot 的一個套件,有官方網站 dev.botframework ,但不幸沒有支援日台泰三國愛用的Line。
- botbuilder-linebot-connector : 小弟做的一個connector,連上 botframework的 bulider 不需要 dev.botframework 的官網帳號,就可以來開發bot了。
- serverless(AWS lambda) :會選用serverless ,純粹是經驗,因為之前開一個 AWS EC2 micro 的機器,差不多10個使用者,同時在和bot溝通時,就有明顯的delay了,故改用serverless架構,來必免這個scale的問題。
- botbuilder-mongodb-storage : 小弟做的一個 mongodb storage for botframework 用的,主要是將 bot state 存在 mongo上使用。
- mongodb cluster : 這看你自已的選擇,用 mlab 或是 mongodb altas 或是自已架,都是不錯的選擇。不過請注意 line 有replayToken 會失效的問題,建議不要取存時間過長,導致失效而發不出去。
我的選擇是直接 serverless (AWS lambda 東京) + 開AWS mongodb cluster (https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#SecurityGroups:groupId=sg-db38a1a2;sort=groupId )東京,因為Line 的 bot 機房就在東京。
2018年2月9日 星期五
lambda subnet (serverless )設錯 網域 會連不到...
Select the VPC Subnets that Lambda should use to set up your VPC configuration. Format: "subnet-id (cidr-block) | az name-tag".
subnet-44e59e0d (10.0.0.0/19) | ap-northeast-1a Private subnet 1A
2018年2月8日 星期四
linebot + serverless + typescript 開發時的小問題
serverless 的 serverless offline 套件每次都會從重啟 webpack ,如果是typescript就會重新組譯很久,至少超過1秒,導致我的 linebot reply token 失效。
用 handler.js ,不要寫handler.ts
2018年2月6日 星期二
免費 mongo host mlab .com
https://mlab.com/
有500mb
測試好用
要注意 db 的 user,從
database => users 這裡開的才能用const mongoString = 'mongodb://myUserAdmin:xxxx@ds125578.mlab.com:25578/abcxxxx
有500mb
測試好用
要注意 db 的 user,從
database => users 這裡開的才能用const mongoString = 'mongodb://myUserAdmin:xxxx@ds125578.mlab.com:25578/abcxxxx
2018年1月31日 星期三
serverless (AWS lambda) + AWS mongodb cluster
照這個教學
https://s3.amazonaws.com/quickstart-reference/mongodb/latest/doc/MongoDB_on_the_AWS_Cloud.pdf
https://s3.amazonaws.com/quickstart-reference/mongodb/latest/doc/MongoDB_on_the_AWS_Cloud.pdf
- 選 new VPC
- 會到 cloudformation
- 下一步
- Availability Zones <=要全選
- Number of Availability Zones <=全部
- Allowed Bastion External Access CIDR Allowed CIDR <= 0.0.0.0/0
- Key Pair Name <= key選本機原有的就好了<=之後還要從本機copy到,他開的機器,做ssh 的測試。
- MongoDB Admin Username ...
- MongoDB Admin Password ...
- 下一步
- 約20分鐘
- 會開出兩台 ec2
- LinuxBastion <= 測試你的 mongo cluster 用的
- PrimaryReplicaNode0 <= mongo cluster 只有 vpc 能連
- pdf 的測試方式為
- scp -i key .... 到 LinuxBastion
scp –i mykey.pem mykey.pem ec2-user@Bastion-public-ip:/home/ec2-user/mykey.pem
- ssh - i key PrimaryReplicaNode0的ip
- mongo
mongouse admindb.auth("admin", "YourAdminPassword") rs.printReplicationInfo()rs.status()
- 應該都正常了
===lambda
- 我直接改這個範例做測試
https://github.com/serverless/examples/tree/master/aws-node-rest-api-mongodb
service: aws-node-rest-api-mongodbprovider:name: awsregion: ap-northeast-1 //記得region 要設對,不然找不到 sgruntime: nodejs6.10vpc:securityGroupIds:- "sg-db38a1xx" //加這個subnetIds:- "subnet-39dd6bxx" //加這個- "subnet-44e59exx" //加這個functions:createUser:handler: handler.createUserevents:- http:path: usermethod: postcors: truevpc:securityGroupIds:- "sg-db38a1xx" //加這個subnetIds:- "subnet-39dd6bxx" //加這個- "subnet-44e59exx" //加這個- securityGroupIds <= 來自ec2 => PrimaryReplicaNode0 => Security groups
=> 點進去 => 看 Source - Subnet ID <= 來自ec2 => PrimaryReplicaNode0 => Subnet ID
- sls deploy
endpoints:
POST - https:// x.execute-api.ap-northeast-1.amazonaws.com/dev/user
PUT - https://x.execute-api.ap-northeast-1.amazonaws.com/dev/user/{id}
DELETE - https://x.execute-api.ap-northeast-1.amazonaws.com/dev/user/{id}
GET - https://x.execute-api.ap-northeast-1.amazonaws.com/dev/user/{id}
照這個試試吧!
結束!
2018年1月27日 星期六
訂閱:
文章 (Atom)