Community程式設計與開發github.com

orenlion1/aws-architecture-diagrams

建立基於證據的 AWS 風格架構圖表(Mermaid、Graphviz DOT 或兩者皆可)。當需要 AWS 系統上下文、拓撲、架構或資料流程視覺化時使用。根據所需的渲染器、受眾、圖示精確度、佈局控制、可審查性及輸出成品來選擇格式;Mermaid 或 DOT 本身並無優劣之分。

aws-architecture-diagrams 是什麼?

此技能專門用於根據真實的基礎設施來源(如 Terraform、CloudFormation、CDK 或即時 AWS 帳戶清單)產生 AWS 風格的架構圖表。它遵循 AWS 參考架構圖表慣例,包括準確的服務名稱、帳戶/區域/VPC 邊界標籤、簡短的流程標籤以及清晰的版面配置。 技能強制執行「只繪製來源所建立的內容」規則,確保每個節點、邊緣和邊界都有可追溯的證據,並明確區分來自 AWS 的可靠連線、安全性規則授予的路徑、IAM 政策及純粹的推測。它支援 Mermaid(適用於內聯、主題感知、可文字審查的文件)和 Graphviz DOT(適用於需要特定 AWS 圖示資產、固定組合及匯出 SVG/PNG 的使用案例),並指導使用者根據實際的交付需求來選擇格式。 在設定圖表時,它要求對每個資源明確說明「在 AWS 中如何稱呼」、「屬於何種資源類型」及「其用途為何」,並使用完整的 AWS 圖示名稱(如 `Res_Amazon-DynamoDB_Table`)而不是僅靠圖示來識別。它也提供從即時帳戶收集資源和關係的具體 CLI 命令與 API 清單,並指出每種證據的強度。 最後,此技能適用於 Claude Code、Cursor 及類似平台,且明確要求避免常見的錯誤模式,例如僅因視覺平衡而新增未經證實的服務、在非標準環境中假設 AWS 圖示可用,或將兩種格式都設為預設而未指定消費者。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/orenlion1/investigation-skills/tree/HEAD/skills/aws-architecture-diagrams

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

AWS 風格架構圖表

概述

產生遵循 AWS 參考架構圖表 慣例的圖表:準確的服務名稱、標記的帳戶/區域/VPC 邊界、簡短的流程標籤,以及整潔的畫布。「AWS 風格」描述的是這些慣例;它本身並不要求必須使用官方 AWS 圖示或 Graphviz。

Mermaid 和 Graphviz DOT 是平行的創作格式。Mermaid 通常適合內聯、主題感知、可文字審查的文件;DOT 通常適合需要精確在地 AWS 圖示資產、可控的構圖,以及可用於簡報的 SVG/PNG 輸出。當某個格式能滿足完整的交付合約時使用它;當不同的受眾或成品使得額外的維護工作有價值時,則同時使用這兩種格式。

使用時機

此技能適用於基於實際證據的 AWS 架構、拓撲、系統上下文或資料流程圖表。請勿將其用於非 AWS 的視覺內容,或當單純的表格能更清晰地傳達所需資訊時。

常見的錯誤推理

  • 「AWS 風格就等於 DOT」忽略了能夠滿足實際合約的 Mermaid 渲染器。
  • 「兩種格式更安全」在沒有兩個指定的消費者時會產生同步成本。
  • 「服務大概在這裡連接」並不是邊緣存在的證據。

紅旗訊號

在繪製或查詢即時基礎設施之前,請先停止並解決不支援的資源或關係、不明確的目標渲染器、缺少的圖示權利或資產、衝突的來源證據,或請求的區域超出授權範圍等問題。

凌駕於美學之上的規則

只繪製來源所建立的內容。 每個節點、邊緣、邊界、區域和協定都必須可以追溯到真實的來源——Terraform、CloudFormation、CDK、已部署的設定,或擁有者的書面陳述。圖表是一種視覺化的證據產物。

切勿因為畫面看起來不平衡而新增服務、連線、可用區域、VPC 或區域。如果來源沒有建立某個邊界,就把它省略;一個誠實但稀疏的圖表勝過一個裝飾華麗但虛假的圖表。當某個項目已部署但被停用時,請在節點上說明(例如 WEB_PUSH_ENABLED=false,或「已部署,但釋出時停用」),並標記哪些是其他團隊擁有的,以免讀者認為是你在控制。

在圖表本身說明出處——一個副標題,指明來源,例如 「追蹤至 <iac-dir>/*.tf,修訂版 <revision>」 或 「唯讀即時庫存,<date>」——並在 DOT 來源的標頭註解中重複此資訊。

命名資源,而非僅命名服務

單獨的服務圖示無法識別任何東西。一個標示為「Operations」的洋紅色 DynamoDB 符號可能是資料表、串流或索引,而讀者無法在控制台中找到它。每個節點應陳述三件事實:

  1. 它在 AWS 中的名稱。 實際部署的名稱——例如 acme-orders-events,而不是像是「Orders」的友好別名。將帳戶 ID 寫成 <帳戶> 而不是實際數字;切勿將密碼、權杖或端點放入圖表中。
  2. 它是何種資源類型。 以灰色字體寫在名稱下方:「DynamoDB 資料表」、「S3 儲存桶」、「Lambda 函數」、「API Gateway HTTP API」、「WAFv2 Web ACL」、「SES v2 電子郵件身份」。
  3. 它的用途。 一行說明,且僅在讀者無法從上下文推斷時提供。

對於 Graphviz 輸出,請在 AWS 有提供的地方使用資源圖示——例如 Res_Amazon-DynamoDB_Table、Res_Amazon-Simple-Storage-Service_Bucket、Res_AWS-Lambda_Lambda-Function——其他情況則使用服務 (Arch_) 圖示。圖示能強化識別;但它絕不應該是唯一的識別依據,因為圖示在灰階、縮圖尺寸或螢幕閱讀器中是不可讀的。

根據需求選擇格式

沒有全域的贏家,也沒有預設的格式。尊重明確要求的來源格式,除非它與其他驗收標準衝突。否則,比較實際的交付需求:

需求Mermaid 通常較適合Graphviz DOT 通常較適合
儲存庫審查內聯 Markdown 渲染,緊湊的文字差異可審查的文字來源加上分開渲染的產出物
圖表類型序列圖、流程圖、狀態圖、依賴圖及簡單的架構視圖密集的拓撲圖、巢狀邊界、需要仔細路由邊緣的圖形
AWS 視覺效果AWS 風格的名稱、邊界、顏色,或渲染器提供的圖示套件確切的儲存庫在地 AWS 發布的圖示資產
佈局渲染器管理的回應式佈局及主題適配精確的排序、連接埠、叢集、間距及固定的構圖
交付應該在撰寫處直接渲染的文件用於簡報、文件及展示用途的可控 SVG/PNG
工具支援目標渲染器已支援所需的 Mermaid 語法和版本在構建或創作環境中可用的 Graphviz 及所需的在地資產

如果請求的內容實際上是表格形式,請使用 Markdown 表格而不是將其轉換為圖片。對於有序的參與者交換,Mermaid 的 sequenceDiagram 通常是自然的選擇;這是圖表類型的優勢,而非對 Mermaid 的一般偏好。

Mermaid 支援架構圖和可設定的圖示套件,但無法假設託管渲染器會提供儲存庫在地的 AWS 資產、自訂套件註冊,或與可控的在地渲染器相同的 Mermaid 版本。Graphviz 可以直接載入在地圖片資產,因此當精確的圖示資產和固定的匯出構圖是驗收標準時,它是可靠的選擇——而不僅僅是因為請求中寫了「AWS 風格」。

權衡雙方的取捨。Mermaid 可能因渲染器版本、可用的圖示套件及主機主題而有所不同。DOT 則增加了渲染步驟和產生的產出物,這些產出物必須與可編輯的來源保持同步。選擇成本與儲存庫和目標相符的格式,而不是將任一工具的優勢視為通用。

如果渲染器支援、圖示精確度、固定構圖或預期的輸出檔案會實質性地改變結果,且請求不明確,請釐清交付合約。否則,選擇能以最少的事項特定機制滿足已知需求的格式。

當選擇 Mermaid 時,請保留上述關於證據、出處、資源命名和可及性的規則,在目標渲染器中驗證來源,並在開始以下 Graphviz 特定工作流程之前停止。

當兩種格式都有正當理由時

當 Mermaid 和 DOT 能滿足不同的實際需求時,才同時產生它們,例如內聯的儲存庫審查加上需要精確 AWS 圖示的簡報輸出。雙重交付並非自動更好:僅在兩個產出物都有指定的消費者或驗收標準時才正當。

預設情況下,兩個來源沒有哪一個是標準的。兩者都應從相同的已驗證資源與關係清單中推導出來,攜帶相同的出處,並檢查節點、邊緣、邊界、區域、擁有權及不確定性是否一致。某個格式可能會增加簡報特定的結構,但不得改變它所聲稱的架構。僅在使用者或儲存庫政策明確指定角色時,才將某個格式指定為權威。

對於需要精確 AWS 圖示、固定構圖或連接埠層級連接點放置的異常密集的完整系統地圖,DOT 及其 SVG 和 PNG 可以作為簡報和 AWS 圖示產出物。當同時需要時,Mermaid 渲染可以作為可維護、可內聯審查的輔助。對於不需要這些 DOT 特定需求的聚焦流程,Mermaid 本身可能就能滿足合約。這些是基於需求的選擇,而非為每個圖表產生兩種格式的理由。

Mermaid 工作流程

1. 選擇 Mermaid 圖表類型

對於架構和拓撲,使用 architecture-beta 或流程圖;對於有序的交換,使用 sequenceDiagram;只有當實際發生狀態轉換時才使用狀態圖。確認目標渲染器支援所選的語法和任何圖示套件;不要假設 GitHub、文件網站和在地 Mermaid CLI 執行相同的版本或配置。使用 Iconify 符號時,請在文字中保留完整的 AWS 資源名稱和類型;圖示絕不能是唯一的資源識別方式。

2. 編碼已驗證的清單

僅當證據建立時,才表示 AWS 帳戶、區域、VPC、可用區域、子網和擁有權邊界。使用完整的資源名稱和類型、簡短的標籤邊緣,以及用於允許或推斷關係的 Visible 註解。將出處保留在附近的 Markdown 中,並在語法允許時,保留在原始碼註解中。

3. 在目標環境中渲染和檢查

使用儲存庫固定的 Mermaid 命令或文件構建工具。驗證將要發布的確切圍欄區塊或 .mmd 來源,然後在其預期寬度和主題下檢查渲染結果。檢查剪裁的標籤、重疊的邊緣、不支援的圖示或語法、無法存取的對比度,以及與已驗證清單的語意偏差。修正可編輯的來源並重新渲染,直到可讀為止。

明確註冊非內建的圖示套件。對於 Mermaid CLI,可重現的 AWS 符號渲染可以使用:

mmdc --iconPacks '@iconify-json/logos' \
  -i system-context-aws.mmd -o system-context-aws.svg -b white

將 ? 後備視為渲染失敗,而不是外觀問題。圖示套件支援可能因 Mermaid 版本和佈局渲染器而異;請視覺化和結構性地驗證實際輸出。如果一個受支援的渲染器遺失了已註冊的圖示,請使用另一個支援的渲染器(保留它們)並記錄佈局的取捨。除非目標主機也註冊了所需的套件,否則不要聲稱內聯可移植性。

4. 交付所需的產出物

當這是儲存庫合約時,將 Mermaid 保持在內聯。當需要獨立 SVG 或 PNG 輸出時,請使用儲存庫固定的 Mermaid 版本確定性地渲染它們,並記錄重現命令。

Graphviz 工作流程

1. 從來源建立架構

在繪製任何東西之前,先讀取 IaC 並盤點實際存在的內容。找到此專案存放 IaC 的目錄——例如 infra/、terraform/、deploy/ 或 CDK 應用程式——而不是假設佈局:

iac_dir=infra   # 無論此儲存庫實際使用什麼
grep -hoE '^resource "aws_[a-z0-9_]+"' "$iac_dir"/*.tf | sort | uniq -c | sort -rn

然後提取使邊緣真實存在的具體細節,以及節點上的名稱:函數名稱、資料表名稱、儲存桶名稱、事件規則及其排程、S3 通知、授權者,以及任何跨帳戶或跨堆疊的授權。透過其變數和本地值將名稱解析為實際部署的值。注意設定區域的變數,而不是基於假設。

1b. 當沒有 IaC,或 IaC 僅涵蓋部分資產時

有時要繪製圖表的對象是一個正在運行的帳戶,沒有人為它準備 Terraform,或者 Terraform 僅涵蓋已部署資源的一小部分。那麼來源就是即時帳戶,唯讀,並且圖表必須明確說明這一點。

從標籤謂詞開始,而不是逐一掃描服務,因為這是界定「什麼屬於此系統」的唯一方法:

aws resourcegroupstaggingapi get-resources --region <region> \
  --tag-filters 'Key=<key>,Values=<v1>,<v2>'

幾個標籤鍵需要各發送一個請求,之後再透過 ARN 合併——在一個請求中傳遞兩個鍵會套用 AND 操作,默默丟棄僅包含其中一個鍵的所有項目。記錄結果的計數和日期;這是一個快照,不是一個事實。

標記 API 不會回傳所有資源類型,且標籤不代表擁有權。因此,標籤查詢提供的是節點集合,而關係來自於實際建模它們的 API:

要建立讀取
入口連線elbv2 describe-load-balancers、describe-target-groups
允許哪些路徑ec2 describe-security-groups、describe-vpcs
運算層可以呼叫什麼iam get-instance-profile,然後是 get-policy-version
資料層的形狀和副本rds describe-db-instances、elasticache describe-*
非同步連線佇列重新驅動政策、S3 通知、事件規則

在繪製之前,將你找到的每個 CIDR 解析為一個已命名的 VPC;未解析的 10.16.0.0/16 對讀者來說沒有意義。

1c. 說明每條邊緣基於何種證據

這在讀取即時帳戶時最重要,因為很容易因為兩個資源共享一個命名前綴就繪製一條連線。請將這些類別視覺化區分,並在圖表及其文字中定義它們:

  • AWS 本身報告的連線——例如目標群組的目標、副本的來源。最強的類別;AWS 正在為你建模關係。
  • 某物允許的路徑——例如安全群組規則、儲存桶政策。這建立的是呼叫可能發生,而非確定發生。注意規則何時是 CIDR 範圍而不是安全群組範圍:它授權的是整個範圍,而不僅僅是你畫箭頭的那個工作負載。
  • 身分持有的授權——IAM 政策陳述式。同樣的注意事項,此外,在評估 SCP、權限邊界和資源政策之前,此授權並非有效權限。
  • 從命名或標籤推斷——使用虛線繪製,標記不確定性,或將其省略。絕不使用實線。

缺失也是一個值得繪製的發現。當一個「顯然」要與佇列通訊的角色實際上沒有任何 sqs:* 動作時,一個說明此情況的節點比一個缺失的箭頭更有用,因為它能排除錯誤的假設,而不是讓它懸而未決。

(由於原文已在該處截斷,此處無法提供更多內容。完整的原始技能檔案請參考上游來源。)

相關技能