Go 語言實作 Graceful Shutdown 套件

background job 01

歡迎追蹤 appleboy/graceful 套件

Go 語言撰寫的服務如何優雅的重新啟動,避免工作執行到一半就被關閉,是一個很中要的議題。故實作了簡易 Graceful Shutdown 套件,讓服務都可以支援此功能,如果不知道什麼是 Graceful Shutdown 的朋友們,可以參考這篇『 [Go 教學] 什麼是 graceful shutdown?』,本篇跟大家介紹一個好用的套件『appleboy/graceful』,使用後。不用再擔心背景的服務沒完成就被關閉,不只是背景的工作需要處理,在關閉服務前,開發者也要確保部分工作要在關閉服務前才執行,像是關閉 Database 及 Redis 連線。

[Read More]

使用 AWS IAM Policy 設定 S3 Bucket 底下特定目錄權限

如何有效控制 AWS User 能看到哪些功能,以及執行哪些操作,最仰賴的就是 AWS Identity and Access Management (簡稱 IAM),IAM 可以讓管理者透過 UI 或自定義 JSON 格式來客製化使用者權限。剛好最近跟其他團隊合作到一個專案,需求就是開發者透過 Web 進行 AI Model 訓練,訓練前 SageMaker 會將使用者的 Dataset 下載到容器內,接著開始訓練,而團隊將此下載 Dataset 動作記錄到 AWS S3 Bucket 的 syslog 目錄內,確保檔案存取紀錄。最後將目錄底下的檔案,開權限給客戶進行查看,避免管理者或其他 User 不小心存取到別人的 Dataset 資料。

log

一般來說在 Bucket 內會有許多 Sub-Folder,而 AWS 透過 IAM 方式設定 User 只能存取特定的目錄。可以參考 AWS 官方這篇文章『Writing IAM Policies: Grant Access to User-Specific Folders in an Amazon S3 Bucket』。

[Read More]

推薦自動化監控網站運行服務 - Gatus

gatus dashboard

部署服務後,怎麼明確讓團隊清楚知道服務的運行狀況,就像 GitHub 就是提供整體運行的網頁,監控常用的操作指令,像是 Git Operations, Webhooks 或 GitHub Actions 等服務狀況。讓開發者遇到問題的時候,可以即時查看現在狀態做出相對應動作。而類似這樣的線上服務很多,像是 Atlassian 的 StatuspagePingPong 等,更多免費服務可以直接參考 awesome-status-pages。而本篇要介紹一套開源軟體 Gatus,它是用 Go 語言撰寫出來的,非常輕量。

[Read More]

使用 pyroscope adhoc 加速找到效能瓶頸

pyroscope profiling

大家在開發軟體時,會快速迭代專案時程跟需求,功能越多,系統就會開始出現效能上的瓶頸,而最快的解決方式就是先垂直擴展,把 CPU 跟記憶體先往上加,但是這是治標不治本,所以之前有推薦大家一套如何在服務執行時,快速找到哪個地方執行較慢,請參考之前的文章『即時效能分析工具 Pyroscope』,Pyroscope 目前支援了很多語言,像是 Go, Python, Java, Ruby, Rust, PHP 及 .Net,如果你想要快速在本地端找到效能瓶頸,請繼續將本篇看完。底下會用 Go 語言實際範例教大家。

[Read More]

Go 1.18 generics 新套件 constraints, slices 及 maps

logo

今天看到 Go1.18 終於推出 RC1 版本了,離正式 Release 又跨出一大步了。繼上一篇『初探 golang 1.18 generics 功能』教學後,本次來看看 go1.18 推出三個新的 Package: constraints, slicesmaps 使用方式。目前這三個 Package 會統一放在 golang.org/x/exp 內。本篇程式碼都可以在這邊找到

[Read More]

初探 golang 1.18 generics 功能

logo

Go 語言在近期內會推出 1.18 版本,而 1.18 最重要的功能之一就是 generics,在此版本之前,最令人詬病的就是 Go 無法支援多種 Type 當參數,造成在寫 Package 時候多出很多重複性的程式碼,本篇會教大家基礎認識什麼是 generics,及怎麼使用。

[Read More]

infrastructure as code 優勢及工具選擇

logo

今年在 Cloud Summit 會議上分享『初探 Infrastructure as Code 工具 Pulumi』,主要幾項重點跟大家分享

  1. 什麼是 infrastructure as code 簡稱 IaC
  2. IaC 對團隊帶來什麼優勢
  3. PulumiTerraform 兩大工具比較
  4. Pulumi 價格比較

IaC 帶來的好處跟優勢如下

  1. 建置 CI/CD 自動化 (不用依賴 UI 操作)
  2. 版本控制 (審核避免錯誤)
  3. 重複使用 (減少建置時間)
  4. 環境一至性 (測試及正式)
  5. 團隊成長 (分享學習資源)

內容會偏向介紹 Pulumi 工具居多,如果想多了解,參考本投影片準沒錯

[Read More]

Introduction to Open Policy Agent 初探權限控管機制

logo

很高興可以在 Mopconf 分享 Open Policy Agent。本議程最主要是跟大家初步分享 OPA 的概念,我們團隊如何將 OPA 導入系統架構,及分享如何設計 RBAC 及 IAM Role 架構,底下是這次預計會分享的內容:

  1. Why do we need a Policy Engine?
  2. Why do we choose Open Policy Agent?
  3. Workflow with Open Policy Agent?
  4. What is Policy Language (Rego)?
  5. RBAC and IAM Role Design
  6. Three ways to deploy an Open Policy Agent.

可以參考另外兩篇介紹

如果可以的話,大家可以給我一些回饋,請填寫會後問卷

[Read More]

如何發佈高品質的 Pull Request (簡稱 PR)

code review

除了在公司團隊內負責審核各專案 PR 之外,也在 GitHub 上面提交多個 PR,並且與全世界各地開發者一起共同維護大型專案,一個好的 PR 可以加速專案的進行,且省下多數 Reviewr 寶貴的時間,故我自己整理底下幾點,來確保團隊同事之前有個共同的標準外,也大大降低 Review 時間,提升專案品質。

[Read More]

用 Supervisor 管理系統程式

cover

相信大家都有管理 Linux 主機 Process 的經驗,用的工具也是千奇百種,但是肯定對 Python 版本的 Supervisor 並不陌生,這套工具相當好用,可以監控不同的 Process 狀態,也可以自動重啟。而本篇要介紹用 Go 語言寫出來的開源套件『Supervisord』,作者提到為什麼要用 Go 語言開發此工具,原因很簡單,就是透過 Go 語言的跨平台優勢,寫一套程式,可以直接跑在任何平台,管理者就不需要再為了 Python 環境而煩惱。

[Read More]