網頁

2021年5月20日 星期四

[野人獻曝] AWS CDK8S 初步使用筆記

說到 K8S 喔,就不得不提到那精美的 YAML
當你想佈個 Service / Deployment 時,
可能會因為你常打還知道怎麼打出來!

一旦你要用的元件是不常用的時候,
你應該會很幹的去翻 K8S 官網文件查!
(就跟我之前為了要寫 AWS Cloudformation 時還要翻那該死的文件一樣)

因此 AWS 推出 CDK8S
讓你開發時比較不需要花太多時間翻文件!

CDK8S 目前支援 TypeScript / Python / Java,
不過這裡直接用 TypeScript 做個說明好了。

安裝 CDK8S 工具

npm install -g cdk8s-cli

建立新專案

mkdir /helloworld

cd /helloworld

cdk8s init typescript-app

開始開發

打開專案的 main.ts ,那就是開發的起點了!

部署

雖然一般都會直覺想到用 npm run build
但是實際上這會跑 compile / test / generate yaml 三個動作。
在還沒有寫測試之前,建議直接跑 npm run compile && npm run synth
這樣就能直接產生 K8S 所需要的 YAML(在 dist/ 目錄內)

接著輸入 kubectl apply -f dist/* 就可以開始部署到你的 K8S Cluster 上。

感想

老實說,這其實是個還蠻方便的玩意,
除了常用的一堆元件外,
也可以針對各種少見但就是會用到的元件寫自己的宣告(?),
下次要寫的時候可以提示哪些參數是必須或是該填些什麼,
能夠省下每次翻文件的時間。



2021年4月21日 星期三

[野人獻曝] AWS Go CDK 初步使用筆記

AWS 之前推出了 Cloud Development Kit (CDK)工具,
讓以前寫 YAML 透過 CloudFormation 建立資源的麻煩和不便減少許多,
只是彼時只支援 C#、Java、JavaScript / TypeScript 以及 Python。

不過最近開始支援 Go 了,
所以我就來稍微試用一下!

為了要使用 CDK Go,
必須確認開發機器上是否有以下工具:

  • aws-cdk:CDK 工具,可以透過這個工具進行建立新專案 / 部署等動作,最新版本: 1.100.0。
  • Go:由於 CDK 會使用到 Go 內建的 embed 套件,所以版本必須為 1.16.x 以上
  • aws-cdk-go:CDK 的 Go 函式庫,目前還在 preview 階段,最新版本是:1.100.0
以上工具安裝完後,即可開始建立新專案。

建立新專案

建立一個目錄後並切換到該目錄,
接著輸入:

cdk init --language go

 然後就會在該目錄下建立出相關的專案檔

開發

使用你習慣的 IDE,打開以該目錄為檔名的 .go 檔,
你所有需要的程式碼即會集中在這裡。

部署

輸入以下指令即可開始部署作業:

cdk deploy

輸入以下指令則可以確認這次修改後會有什麼樣的資源變動

cdk diff

輸入以下指令則可以刪除

cdk destroy

注意事項 

CDK 有兩種類型的物件:awscdk.NewCfn*awscdk.New*
前者是為了仍在使用 YAML 操作重複類型資源的狀況下使用,
只需要帶入模板檔路徑與該模板所需參數即可建立相應資源;
後者則偏向懶人包,
可以在建立資源時一併設定其他相依資源的屬性以便一起建立,
如果未設定的狀況下也會以預設的屬性直接建立。

2020年4月3日 星期五

[野人獻曝] MQTT 效能測試工具

因為敝社使用了 emqx 這個玩意,
為了測試效能所以找了emqtt-bench 這個測試工具來用。

結果拉下來後發現還需要 erlang 等一堆折騰人的東西,
好不容易弄完後怕組內有人要用還需要搞同樣的事,
所以就自己打包成一個 Docker Image(雖然 Dockerfile 內容才幾行)


2020年2月16日 星期日

[野人獻曝] shell 下的一些解析工具

jq

一套可以解析 JSON 內容的工具,基本上還算好用。但在解析層次比較複雜的 JSON 或是要產生 JSON 物件時會非常的讓人想死!
基本用法:


jo

jq 雖然可以產生出 json 內容,但其語法各種煩躁。所以就有了 jo 這玩意。
基本用法:



yq

這個工具則是可以解析 / 產生 yaml 的工具。
基本用法:

2019年6月21日 星期五

[野人獻曝] 安裝 OpenResty

OpenResty 這東西基本上就是把 Lua 和 Nginx 結合在一起做成撒尿牛丸!

OpenResty 這東西基本上就是結合 Lua 和 Nginx 各自的優勢,
讓你可以直接用 Lua 寫程式讓 Nginx 直接執行,
從而避免像是要用 proxy_pass 丟到 node 或是 fastcgi_pass 丟到 PHP 執行這種等等等的狀況。

安裝方式說難也不難,只是要注意一下機器上要有這些東西:

  • make / gcc :編譯原始碼時需要的工具,有需要的話在 Ubuntu / Debian 可以下 apt-get install -y make build-essential,這樣就會把需要的編譯工具裝好了。
  • PCRE:Perl 用的正規式函式庫,這東西基本上裝了會比較方便
  • zlib:gzip 功能相關。老實說沒想到不裝的理由。沒有的話要下 apt-get install -y zlib1g-dev
上面的準備完成後,可以直接下載原始碼
用 tar 解壓縮並切換到該目錄後,
就可以直接下 ./configure && make && make install
跑完以後 nginx 和 OpenResty 的相關元件就完成安裝了。

不過要補充一下,
上述的指令是按照預設設定安裝 nginx 及相關模組,
其實也可以根據需求在 ./configure 加相應參數來設定 nginx 主程式路徑 / log 路徑,
這部分可以下 ./configure --help 參考可用的參數。

最後補充,其實可以參照這篇直接安裝 OpenResty 。
但因為我在實驗所以我就直接手動編譯安裝了,顆顆!


2019年4月12日 星期五

[野人獻曝] 動態載入 nginx 模組

因為某些原因想要不重新編譯 nginx ,
又想要用某個模組的功能,
所以就想到 nginx 可以動態載入模組的功能!

首先需要的東西如下:
  • 要使用的 nginx 版本必須為 1.9.11 以上......除非真的太舊否則這應該不是問題
  • 跟你目前使用版本相符的 nginx 原始碼(完整版本列表
  • 你想要使用模組的原始碼,要確保該模組可以使用動態載入功能

操作方法如下:
  • 打開你的 terminal 視窗,輸入 nginx -V ,這會列出當初編譯安裝時使用的參數,內容大概就是:configure arguments: --add-module=xxxx --with-pcre 之類的內容,請把 -- 後面的字串複製下來備用。
  • 將你稍早下載的原始碼解壓縮某目錄下,這裡就假設是 /my/nginx-source
  • 把你下載的模組原始碼解壓縮到某目錄下,這裡就假設是 /my/nginx-modules 
  • 切換到 /my/nginx-source,輸入 ./configure 加上剛才的 nginx -V 內容,最後多加 --add-dynamic-module=/my/nginx-modules 後按下 enter。如此就會根據原本的編譯參數再加上新設定的動態模組參數準備編譯。
  • 接著再輸入 make modules,就會開始編譯模組
  • 編譯完的模組會放在 /my/nginx-source/objs 下,你可以把需要的模組檔複製到其他地方備用。
  • 接下來打開你的 nginx 設定檔(通常在 /etc/nginx/nginx.conf),在最上方加入 load_module 模組檔路徑; 後重新啟動 nginx 就可以生效了。

2018年3月21日 星期三

[野人獻曝] 設定 AWS Elasticsearch Service

AWS 什麼錢都要賺,
所以他們就拿 Elasticsearch 來賺錢了,
對於不想自己管 Elasticsearch 服務的人,
只要簡單拿出信用卡解決問題就好了。

設定步驟其實很簡單,大概只有以下三個內容要填:

  • 設定這個 ES Instance 的名稱
  • 設定這個 ES Instance 要使用的機器規格及數目 / 空間類型 / 大小
  • 設定這個 ES Instance 要使用的存取規則
前兩點其實沒什麼,
至於第三點的部分就比較需要談了。

關於存取規則這部分,
如果是 AWS 初學使用者的話建議使用「Allow access from specific IPs」,
這樣就會只限定特定機器可以存取 ES,
後續要使用像是 Logstash 之類的東西同步資料會比較方便(因為不用做身份驗證)。

如果使用「Allow or deny access to one or more IAM users / AWS accounts」的話,
用 Logstash 同步的話就可能要用 logstash-output-amazon_es 這個 plugin 才有可能同步。
不過不知道為何我用這玩意就是會出問題,
也因為如此我才使用限定 IP 的方式來做,
這樣我就可以直接用 elasticsearch 這個 plugin 同步資料。

另外 AWS Elasticsearch Service 設定完後也會有設定好 kibana,
有需要可以再針對這部份善加利用。