kumo:用Go編寫的輕量級AWS服務模擬器
用 Go 寫的輕量級 AWS 服務模擬器。既可用作 CI/CD 測試工具,也可用作具有可選資料持久性的本機開發伺服器。
秒懂
- 它是什麼?
- 一個記憶體中的AWS模擬器,支援82個服務、可選持久化和Docker部署。
- 適合誰用?
- kumo是一個自包含的AWS模擬器,覆蓋82個服務,支援Docker和二進位部署,並提供可選的持久化。其用於SES和Pinpoint SMS的自訂測試端點是區別於其他模擬器的特點。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 1 天前。
- 用什麼語言寫的?
- 主要是 Go(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
一個用Go編寫的AWS模擬器,定位為CI/CD和本地開發工具
kumo是一個用Go編寫的輕量級AWS服務模擬器,README將其定位為既適用於CI/CD測試,也適用於本地開發伺服器。倉庫元資料顯示語言為Go,描述與之相符。README強調了幾個特性:無需認證,適合CI環境;以單一二進位分發;支援Docker;輕量級,啟動快且資源佔用低;與Go AWS SDK v2相容;當設定KUMO_DATA_DIR時可選擇持久化資料。這些特性使kumo成為一個自包含的模擬器,無需AWS帳戶即可測試AWS API。
第1個觀察點要對準 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT。先確認 README 所列名稱在目前版本仍存在,再記下實際使用的參數、輸入資料與輸出結果。若命令沒有回傳預期結果,應保留完整錯誤訊息,回到對應檔案或 issue 查找原因,不把缺少說明的部分補成保證。
kumo 第1節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
服務目錄覆蓋82個AWS API,按類別列出
README聲稱支援82個服務,並提供了一個按類別組織的表格。儲存類包括DynamoDB、DynamoDB Streams、EBS、ElastiCache、Glacier、MemoryDB、S3、S3 Control和S3 Tables。計算類包括Batch、EC2、Elastic Beanstalk和Lambda。容器服務有ECR、ECS和EKS。資料庫服務有DocumentDB、Neptune、RDS和Redshift。訊息與整合涵蓋EventBridge、Firehose、Kinesis、MQ、MSK、Pipes、SNS和SQS。安全與身分包括ACM、Cognito、IAM、KMS、Macie、STS、Secrets Manager和Security Lake。完整列表繼續涵蓋監控、網路、應用整合、管理、分析和開發者工具。README未說明每個服務中實現了哪些API操作,因此各服務的具體覆蓋範圍仍有待驗證。
第2節涉及 kumo 的實際邊界。驗證時要檢查 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT 是否互相匹配,並分開記錄成功路徑、失敗路徑和未被文件覆蓋的情況。這樣才能分辨 README 的功能描述、版本差異與本地環境問題,也能讓後續升級比較有依據。
kumo 第2節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
透過Docker、二進位或Compose啟動kumo
快速開始部分展示瞭三種執行kumo的方式。第一種是Docker:`docker run -p 4566:4566 ghcr.io/sivchari/kumo:latest`在4566埠啟動模擬器。如需持久化,README新增了`-e KUMO_DATA_DIR=/data`並掛載命名卷。第二種是從原始碼構建,執行`make build`後執行`./bin/kumo`,可選設定`KUMO_DATA_DIR=./data`。第三種是Docker Compose,提供了一個對映4566埠的最小YAML範例,以及一個新增環境變數和卷以實現持久化的擴充套件範例。預設埠為4566,並在所有用法範例中使用。
針對 sivchari-kumo-deep-analysis,可以從 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT 建立最小案例:準備一份可重複的輸入,執行專案指定入口,檢查終端輸出、生成檔案、瀏覽器畫面或資料庫變化。若結果只在特定設定下成立,就把該設定連同版本一起寫進紀錄,避免把一次成功誤當成普遍行為。
kumo 第3節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
將AWS SDK v2用戶端指向localhost
README中的用法範例展示了如何配置AWS SDK v2用戶端以連線kumo。對於S3,程式碼使用區域`us-east-1`和靜態憑證`test`/`test`建立配置,然後設定`o.BaseEndpoint`為`http://localhost:4566`並使用路徑樣式定址。隨後建立儲存桶並放置物件。SQS、DynamoDB和Secrets Manager的範例遵循相同模式:載入預設配置,覆蓋基礎端點,然後呼叫相關操作。範例使用`背景內容`並忽略錯誤,表明它們是極簡說明而非生產程式碼。由於kumo不需要認證,任何靜態憑證都有效。
第4個觀察點要對準 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT。先確認 README 所列名稱在目前版本仍存在,再記下實際使用的參數、輸入資料與輸出結果。若命令沒有回傳預期結果,應保留完整錯誤訊息,回到對應檔案或 issue 查找原因,不把缺少說明的部分補成保證。
kumo 第4節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
環境變數與結構化日誌
kumo的配置由四個環境變數控制,這些變數在表格中列出。`KUMO_HOST`設定繫結地址,預設值為`0.0.0.0`。`KUMO_PORT`設定埠,預設值為`4566`。`KUMO_LOG_LEVEL`接受debug、info、warn或error,預設值為info。`KUMO_DATA_DIR`預設未設定,設定時啟用持久化。日誌採用結構化欄位,如method、path、status、duration和request ID。在INFO級別,每個請求會記錄`target`欄位(適用於Secrets Manager、DynamoDB、SQS等JSON/Query協議服務)或`action`欄位(適用於EC2、SNS等Query協議服務,當Action在URL查詢字串中)。在DEBUG級別,日誌輸出中包含完整請求體。
第5節涉及 kumo 的實際邊界。驗證時要檢查 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT 是否互相匹配,並分開記錄成功路徑、失敗路徑和未被文件覆蓋的情況。這樣才能分辨 README 的功能描述、版本差異與本地環境問題,也能讓後續升級比較有依據。
kumo 第5節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
預設記憶體執行,按需持久化
資料持久化是可選的。未設定`KUMO_DATA_DIR`時,kumo完全在記憶體中執行,程式退出時所有資料丟失;README稱這非常適合需要每次測試執行都保持乾淨狀態的CI/CD流水線。設定`KUMO_DATA_DIR`後,每個服務在啟動時從`$KUMO_DATA_DIR/{service}.json`載入先前狀態,並在收到SIGTERM或SIGINT訊號優雅關閉時儲存當前狀態。如果目錄不存在,會自動建立。寫入是原子的:README提到使用臨時檔案和重新命名模式以防止崩潰時損壞。臨時狀態(如SQS的在途訊息和S3的分片上傳)不會被持久化。這種設計讓本地開發可以在重啟間保留資料,同時不使CI使用複雜化。
kumo 第6節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
位於/kumo/字首下的測試專用端點
kumo在`/kumo/`字首下提供兩個自定義端點,它們不屬於任何AWS API。`GET /kumo/ses/v2/sent-emails`返回透過SES v2 `SendEmail` API傳送的電子郵件列表,`GET /kumo/pinpointsmsvoicev2/sent-messages`返回透過Pinpoint SMS Voice v2 `SendTextMessage` API傳送的SMS訊息。README包含示例curl命令和JSON響應,展示如`MessageId`、`FromEmailAddress`、`Destination`、`Subject`、`Body`和`SentAt`等欄位(電子郵件),以及SMS訊息的對應欄位。這些端點用於在測試中驗證應用行為,例如檢查是否傳送了包含預期內容的電子郵件。
第7個觀察點要對準 sivchari/kumo、Go、go.mod、go test ./...、go run、Dockerfile、GitHub Releases、MIT。先確認 README 所列名稱在目前版本仍存在,再記下實際使用的參數、輸入資料與輸出結果。若命令沒有回傳預期結果,應保留完整錯誤訊息,回到對應檔案或 issue 查找原因,不把缺少說明的部分補成保證。
kumo 第7節的結論只適用於 README 已寫明的範圍。實作時請將這個專案名稱、版本標籤、設定鍵與輸出檔案一併保存,並以同一組輸入重跑,觀察行為是否一致。文件沒有交代的相容性、效能和安全特性,不在本文替它做承諾。
編輯結論
kumo是一個自包含的AWS模擬器,覆蓋82個服務,支援Docker和二進位部署,並提供可選的持久化。其用於SES和Pinpoint SMS的自訂測試端點是區別於其他模擬器的特點。專案採用MIT授權,該授權授予使用、複製、修改、合併、發布、分發、再授權和銷售副本的權利,但軟體按「原樣」提供,不附帶任何形式的保證。README中未描述任何生產用途或安全保證。
社群筆記