examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 46 分鐘

AWS CI/CD Pipeline 與 IaC 部署策略(CodePipeline、CloudFormation StackSets、CDK、CodeDeploy)

9,200 字 · 約 46 分鐘閱讀 ·

SAP-C02 深度指南:AWS CI/CD 與 IaC 部署策略全覽 — CloudFormation StackSets(自管理 vs 服務管理)、巢狀 stacks、change sets、drift detection、CDK L1/L2/L3 constructs、SAM 與 Serverless Application Repository、CodePipeline 多帳號多區域、CodeDeploy AllAtOnce/Canary/Linear、ECS blue/green、Lambda alias-based canary、AWS AppConfig、Service Catalog,以及情境驅動的決策矩陣。

立即做 20 題練習 → 免費 · 不用註冊 · SAP-C02

CI/CD pipeline 與基礎設施即程式碼(IaC)部署策略,在 SAP-C02 中位於可靠性、安全性與速度三者的交叉點。每道題目只要出現「公司必須以最短停機時間部署新版本」、「將基準配置推送至 40 個帳號」,或「錯誤率飆升時自動回滾」,本質上都是在考部署策略。在 Professional 等級,AWS 期望你選出正確的部署模式、正確的 IaC 工作單元,以及正確的多帳號分發機制——並且清楚知道每種選擇的失敗模式。

本指南假設你已具備 Associate 等級的基礎知識:CloudFormation stack 是什麼、CodeBuild 做什麼、Lambda function alias 是什麼。它聚焦在 Pro 等級的決策:StackSets vs 巢狀 stacks vs CDK Pipelines、CodeDeploy canary vs linear vs all-at-once、ECS blue/green 機制、Lambda alias-based 流量切換、AppConfig feature flags、Service Catalog 受管自助服務,以及何時該用 Terraform。目標是讓 SAP-C02 每一道部署策略題都變成 30 秒的快速辨識,而非 3 分鐘的逐項排除。

為什麼部署策略在 SAP-C02 如此重要

在 Professional 等級,AWS 幾乎不問「CloudFormation 是什麼」,而是問:「團隊有 20 個 AWS 帳號,組織層級的 IAM 基準必須可部署、可稽核、且能偵測 drift——你會組合哪些服務?」這道題同時牽涉 AWS Organizations、CloudFormation StackSets 服務管理權限、委派管理員、drift detection、change sets,以及 CodePipeline 的核准動作。少掌握任何一個環節,就會選到技術上可行但在維運上較差的答案。

考試也喜歡讓部署選項彼此對立:all-at-once vs rolling vs blue/green vs canary、CloudFormation vs CDK vs SAM vs Terraform、StackSets 服務管理 vs 自管理、CodeDeploy ECS blue/green vs rolling、Lambda canary vs linear vs all-at-once、AppConfig vs 環境變數作為 feature flag、Service Catalog vs 直接 CloudFormation 權限給開發者。最快的應對方式,就是把每個工具的最佳使用場景及其特定失敗模式背得滾瓜爛熟。

  • 部署策略(Deployment strategy):將流量從舊版本切換到新版本的模式——all-at-once、rolling、blue/green、canary、linear。
  • 基礎設施即程式碼(IaC):以版本控制的原始碼宣告式(或命令式)描述雲端資源。在 AWS 上包含:CloudFormation、CDK、SAM、Terraform。
  • CloudFormation StackSet:一種具備 AWS Organizations 感知能力的機制,可將同一份 CloudFormation 範本部署至許多帳號與區域,以 stack instance 呈現。
  • Change set:CloudFormation 在執行前預覽將對 stack 套用的資源層級差異,包含可能造成停機的資源替換操作。
  • 巢狀 stack(Nested stack):類型為 AWS::CloudFormation::Stack 的 CloudFormation 資源,其範本放在 S3,並作為父 stack 的子項目進行佈建。
  • 跨 stack 參照(Cross-stack reference):透過 Export / Fn::ImportValue 機制,讓同帳號同區域的一個 stack 使用另一個 stack 的輸出。
  • CDK construct(L1/L2/L3):CDK 的建構積木——L1(CFN 資源)、L2(具有合理預設的精選資源)、L3(結合多資源的模式)。
  • CodeDeploy 部署組態(Deployment configuration):決定部署期間流量或執行個體如何移轉的命名策略(AllAtOnce、OneAtATime、HalfAtATime、Linear、Canary、Custom)。
  • Lambda alias-based canary:Lambda 在 alias 上內建的流量分配(例如 10% 導向新版本),通常由 CodeDeploy 驅動。
  • AWS AppConfig:具備驗證、分段部署和 CloudWatch 警報自動回滾功能的執行期配置與 feature flag 服務。
  • AWS Service Catalog:受管的自助服務目錄,將 CloudFormation 範本包裝成終端使用者可啟動的產品。
  • 參考:https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html

白話文解釋 CI/CD and IaC Deployment

部署策略是一個機制看起來相似、但後果卻大相逕庭的主題。以下三個來自不同領域的類比,能讓各種取捨清晰易記。

類比一:便利商店新品上架

把一家 24 小時連鎖便利商店的新品上架流程想像成部署。All-at-once 部署是在最忙碌的午餐尖峰,把所有貨架一口氣換成新品——如果新款飯糰口味有問題,所有顧客同時踩雷。Rolling 部署是一次換一個貨架,其餘繼續賣舊品——每個時段只有少數顧客受影響,但整體轉換時間拉長。Blue/green 是最謹慎的做法:你在旁邊架設一個全新的陳列區,擺好新品試賣幾個品項,確認沒問題後,讓門市人員把所有顧客導引到新陳列區,舊陳列區則完成現有訂單後關閉。如果新品大翻車,門市立刻開回舊陳列區——不會有任何浪費。Canary 部署是先讓前 10% 的顧客試吃新飯糰,觀察 10 分鐘的反應,再逐步擴大到接下來的 20%,依此類推。Linear 是同樣的概念,但以固定節奏推進(每 10 分鐘增加 10%,不管回饋如何)。

CloudFormation 是店長手冊上的標準作業流程——宣告式、版本控制、冪等;同一套 SOP,得到同樣的結果。CDK 是能讀懂你的需求草稿並自動寫出完整 SOP 的資深主管——你說「幫我規劃一個可服務 200 人的早餐菜單」,他把完整流程整理出來。SAM 是專門給鮮食部門用的 SOP 格式——針對生鮮快取商品最佳化,比 CloudFormation 更精簡。Terraform 是能跨品牌使用的通用 SOP 格式——你的門市(AWS)、隔壁的咖啡廳(Azure)、樓下的麵館(GCP)都能用同一套。StackSets 是把你的 SOP 一次加盟授權給 40 家門市,並派遣督導(drift detection)定期巡店,確保沒有門市偷偷改配方。

類比二:航空公司機隊升級

航空公司汰換客艙設備的情境,能讓你用高風險場景直覺感受部署策略的差異。All-at-once 是週六深夜讓全機隊停飛、週一早上前全部改裝完畢——最快、風險最高。Rolling 是每週改裝一架,其餘繼續飛——每一步的爆炸半徑小,但整體推進耗時一季。Blue/green 是買一批新飛機,停在第二候機廊橋,空機試飛後,在切換日把所有新班次分配到新機隊,舊機隊完成既有排班後退役。如果新機娛樂系統當機,一小時內重啟舊機隊服務。Canary 是挑五架塗裝新塗裝的飛機載正常旅客,觀察一週的評價,評價良好才再擴展到二十架。Linear 是排程版本——每週五固定增加五架,不管評價如何。

AWS CodeDeploy 扮演航班調度員的角色:決定哪些飛機(或 ECS tasks、Lambda 版本)上有旅客。CloudWatch alarms 是接到調度員指令的安全感測器;一旦偵測到異常(錯誤率攀升、p99 延遲超標),調度員自動中止剩餘換裝程序,把旅客導回舊機隊。CodePipeline 是地勤排班系統,將整個工作流程串接起來:從倉庫領取零件(source)、在機棚組裝(build)、進行地面測試(test)、協調調度員(deploy)、通知機組人員(notify)。具備核准動作的多帳號 CodePipeline 是航空公司董事會——生產部署必須取得副總裁簽核,調度員才能放行旅客登機。

類比三:醫院新術式導入

醫院在引進新手術術式時採用的分段推行機制,與部署策略幾乎完美對應。All-at-once 是一夜之間讓所有手術室全面改用新術式——在真實醫療場景中絕對不可能這樣做。Rolling 是每個月訓練一位外科醫師;風險隨時間分散。Blue/green 是先在模擬手術室(staging 環境)練到熟練,再開設一間設備完整的第二手術室(green 環境)進行新術式,新排刀安排在此;若第一台手術出現意外,醫院立刻回到舊手術室——完全不需要重新排程。Canary 是倫理委員會核准的試驗:先做前十位病患,觀察兩週的術後成效,情況穩定才擴展到下一批一百位。Linear 是標準化推進——每月增加 10%,持續十個月。

Change sets 是術前確認清單——CloudFormation 在你動刀前告訴你「這次更新將取代 RDS 執行個體」;你可以喊停。Drift detection 是術後稽核——有人在正式流程之外偷偷更換了設備嗎?AppConfig feature flags 是每間手術室的獨立開關——你可以在不重新部署整間醫院的情況下,瞬間關閉新麻醉方案。Service Catalog 是核准術式手冊——外科醫師從通過審查的術式列表中自助挑選,而不是自己發明新做法。

對 SAP-C02 而言,航空公司機隊類比最能直接對應 CodeDeploy 的流量切換模型:你永遠以「舊機隊 vs 新機隊、旅客比例、回滾時間」的框架思考。醫院術式類比最適合用於變更管控的推理:當考題提到「部署前驗證、核准、可稽核回滾」,就想到外科術式導入流程。參考:https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html

部署策略選擇——All-at-Once、Rolling、Blue/Green、Canary、Linear

在討論 IaC 工具之前,先選定流量切換模式。SAP-C02 的題目幾乎都會暗示一個線索:「零停機」、「快速回滾」、「漸進流量轉移」、「成本敏感的開發環境」。把線索對應到正確策略。

All-at-once(原地全量部署)

  • 模式:停止所有主機上的舊版本,將新版本部署到同一批主機,啟動新版本。
  • 停機時間:有,時間等於停止-部署-啟動的週期。
  • 回滾速度:慢——需要再執行一次部署才能還原。
  • 成本:最低(無需複製機隊)。
  • 使用場景:開發/測試環境、非客戶端的批次作業、可接受維護視窗的環境。
  • CodeDeploy 組態:CodeDeployDefault.AllAtOnce(EC2/on-prem)或 CodeDeployDefault.LambdaAllAtOnce / CodeDeployDefault.ECSAllAtOnce。

Rolling(原地分批部署)

  • 模式:分波次替換執行個體或 tasks。常見波次:一次一個(OneAtATime)、一次一半(HalfAtATime)、自訂百分比。
  • 停機時間:每個執行個體幾乎無停機;推進期間整體吞吐量略降。
  • 回滾速度:慢——需要以舊版本向前部署。
  • 成本:與原地部署相同(無需複製機隊)。
  • 使用場景:EC2 Auto Scaling groups、具有足夠容量餘裕的 ECS 服務、內部工具。
  • CodeDeploy 組態:CodeDeployDefault.OneAtATime、CodeDeployDefault.HalfAtATime。

Blue/Green

  • 模式:佈建平行的「green」機隊,在此部署新版本,透過 ELB 監聽器交換或 Route 53 加權記錄切換流量,排乾後退役「blue」。
  • 停機時間:切換為原子操作時為零。
  • 回滾速度:極快——將監聽器切回 blue;blue 仍處於熱機狀態。
  • 成本:切換期間較高(兩套完整機隊同時運行)。
  • 使用場景:面向客戶的生產環境、原地升級有風險的有狀態工作負載、ELB 後方的 ECS 服務與 EC2。
  • AWS 服務:CodeDeploy ECS blue/green、CodeDeploy EC2 blue/green(搭配 Auto Scaling)、Elastic Beanstalk 環境 URL 交換。

Canary

  • 模式:將一小部分流量(通常 10%)切換至新版本,經過一段觀察期後再切換其餘流量。
  • 停機時間:零。
  • 回滾速度:快——幾秒內將流量從 canary 切走。
  • 成本:增量極低(只有小部分 canary 機隊需複製,Lambda 使用加權流量時甚至無需複製)。
  • 使用場景:公開 API、Lambda functions、任何能透過 CloudWatch 警報偵測錯誤率回歸的場景。
  • CodeDeploy 組態:CodeDeployDefault.LambdaCanary10Percent5Minutes、LambdaCanary10Percent10Minutes、LambdaCanary10Percent15Minutes、LambdaCanary10Percent30Minutes。

Linear

  • 模式:按固定排程以相等增量移轉流量(例如每分鐘增加 10%)。
  • 停機時間:零。
  • 回滾速度:推進期間快;完成後需重新部署才能還原。
  • 成本:低。
  • 使用場景:希望平滑推進而非突然跳躍時;適合遙測延遲已知的場景。
  • CodeDeploy 組態:CodeDeployDefault.LambdaLinear10PercentEvery1Minute、LambdaLinear10PercentEvery2Minutes、LambdaLinear10PercentEvery3Minutes、LambdaLinear10PercentEvery10Minutes。

自訂部署組態

對於 EC2/on-prem(非 Lambda、非 ECS),你可以建立自訂部署組態,指定最小健康主機數(百分比或絕對數量)。對 Lambda 和 ECS,則可使用上述內建的 canary 和 linear 變體——自訂 ECS blue/green 流量切換可透過 appspec Hooks 和自訂 CodeDeploy 組態支援。

在 SAP-C02 中,canary 代表「兩步驟切換:X% 觀察 Y 分鐘,再切換其餘流量」,而 linear 代表「每隔 Y 分鐘以相等步驟推進,直到 100%」。兩者都是零停機,且都能在透過 CodeDeploy 串接後,由 CloudWatch 警報驅動自動回滾。當你想要有人工觀察的觀察期時選 canary;當整個推進流程是全自動且你信任警報時選 linear。參考:https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html

CloudFormation Pro 深度——Stacks、Nested Stacks、Cross-Stack References

CloudFormation 是 AWS 原生的 IaC 骨幹。SAP-C02 中凡是說「使用 IaC」的答案,除非明確點名 Terraform,否則本質上都是 CloudFormation 或 CDK 的答案。

Stack 組織模式

你可以把整個架構塞進一個巨型 stack,但在 Pro 規模下這會出問題:

  • 爆炸半徑:一次失敗的更新會回滾整個 stack。
  • 變更頻率不一致:VPC 一年改一次,Lambda 每天改;單一 stack 強迫它們使用相同的節奏。
  • 所有權:網路團隊負責 VPC,應用團隊負責 Lambda;同一個 stack 造成所有權混淆。
  • 服務限制:每個 stack 最多 500 個資源(軟性限制,可申請調高)、200 個參數/輸出/映射。

AWS 的標準做法是依變更頻率和所有權拆分:基礎 stacks(VPC、IAM roles、共用 KMS keys)、平台 stacks(ECS cluster、EKS cluster)、應用 stacks(services、Lambdas)。再透過巢狀 stacks 或跨 stack 參照將它們串接。

巢狀 stacks

巢狀 stack 是一個 AWS::CloudFormation::Stack 資源,其 TemplateURL 指向 S3 中的子範本。父 stack 的生命週期管理所有子 stack 的建立、更新與刪除。

  • 優點:單一生命週期——更新父 stack,所有子 stack 以一次交易完成更新;失敗時一起回滾。
  • 優點:可重複使用的模組——將同一份子範本帶入不同父 stack,搭配不同參數。
  • 缺點:緊耦合——無法在不經過父 stack 的情況下獨立更新子 stack。
  • 缺點:當許多子 stack 彼此參照時,範本規模可能急遽膨脹。
  • 適用場景:VPC 模組 + 子網路模組 + 安全群組模組作為同一應用 stack 的兄弟子項目。

跨 stack 參照

跨 stack 參照使用一個 stack Outputs 區段的 Export,以及另一個 stack 的 Fn::ImportValue,在 stack 邊界之間共享值。

  • 優點:鬆耦合——各 stack 擁有獨立的生命週期與所有者。
  • 優點:清晰的契約——export 名稱就是契約。
  • 缺點:匯出 stack 在匯入者存在期間無法刪除或重新命名 export(你會收到相依性錯誤)。這是著名的 Day-2 痛點:必須先刪除匯入者,再更新匯出者。
  • 缺點:僅限同帳號同區域——跨 stack 參照無法跨帳號或區域。如需跨帳號共享,請使用 SSM Parameter Store 或透過 CDK Pipelines context 傳遞值。
  • 適用場景:VPC stack 匯出子網路 ID,多個獨立應用 stack 匯入使用。

選擇巢狀 stacks vs 跨 stack 參照 vs 單一大型 stack

評估標準 巢狀 stacks 跨 stack 參照 單一大型 stack
生命週期 與父 stack 單一交易 各 stack 獨立 單一交易
所有權邊界 弱(子 stack 隸屬父 stack) 強(每個 stack 可獨立擁有) 無
更新頻率 必須配合父 stack 各自獨立 必須配合整個系統
跨帳號 否 否(請用 SSM Parameter Store) 否
典型用途 可重複使用的模組 基礎共享(VPC、IAM) 小型單團隊工作負載

Change sets

Change set 在執行前預覽 CloudFormation 將套用的資源層級差異。關鍵特性:

  • 列出每個被新增、修改、移除或取代的資源(取代代表銷毀並重新建立——可能造成停機)。
  • 可由人工或程式化方式審查(CodePipeline 有 CloudFormationCreateReplaceChangeSet + CloudFormationExecuteChangeSet 動作拆分,這是 Pro pipeline 的標準模式)。
  • 生產 pipeline 必備:絕對不直接更新 stack;一律透過 change set 加核准閘門。

SAP-C02 變更管控場景的常見答案模式:CodePipeline 第 1 階段建立 change set(CHANGE_SET_REPLACE)、第 2 階段要求人工核准動作、第 3 階段執行 change set。這給你一個可預覽的差異、一份核准簽名,以及 CloudTrail 中清晰的稽核軌跡。替代方案——直接更新 stack——跳過了預覽,是真實的維運風險。參考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html

Drift detection 與補救

Drift 是 stack 預期的範本狀態與實際存活資源之間的任何偏差。例如:有人手動編輯了安全群組規則、有人刪除了 IAM 政策附加、某個外部腳本更改了 S3 bucket 的版本控制設定。

CloudFormation drift detection:

  • 隨選觸發:呼叫 DetectStackDrift(單 stack)或 DetectStackSetDrift(整個 stack set)取得快照。
  • Stack set 定期掃描:StackSets 支援透過 EventBridge 排程規則或 AWS Config 規則(cloudformation-stack-drift-detection-check)執行週期性 drift detection。
  • 補救路徑:(a) 手動或透過 Systems Manager Automation runbook 將資源恢復到範本期望狀態;(b) 更新範本以反映新的目標狀態後重新部署;(c) 透過循環 stack 替換已 drift 的資源。

Drift detection 不會自動補救。Pro 規模的完整模式是:drift detection → EventBridge 事件 → Lambda 或 SSM runbook,針對「已知安全的 drift」(如新增安全群組規則)自動補救,或針對「未知 drift」通知資安維運人員。

StackSets 大規模使用——自管理 vs 服務管理

CloudFormation StackSets 是多帳號、多區域的分發層。兩種權限模型:

  • 自管理權限(Self-managed):你在管理員帳號預先建立 AWSCloudFormationStackSetAdministrationRole,並在每個目標帳號建立 AWSCloudFormationStackSetExecutionRole。以帳號 ID 為目標。適用於組織未使用 AWS Organizations,或目標帳號位於組織外部的情境。
  • 服務管理權限(Service-managed):AWS 為你建立服務連結角色。以 OU 為目標。加入 OU 的新帳號透過自動部署自動收到 stack。這幾乎是 SAP-C02 組織範圍部署的標準答案。

每次 StackSet 操作的管控參數:

  • 最大並發帳號數(數量或百分比)——同時部署的帳號數。
  • 失敗容許度(數量或百分比)——在暫停前允許的失敗數。
  • 區域順序——明確的列表;跨區域依序推進,同一區域內跨帳號平行。
  • 每個 stack instance 的參數與標籤覆寫——帳號或區域可在不更改範本的情況下覆寫值。
  • 離開 OU 時的刪除行為——當帳號離開 OU 時,保留或刪除 stack instance。

委派管理員模式在此很重要:從管理帳號指定一個成員帳號(通常是 Shared Services 或 Deployments 帳號)作為 StackSets 的委派管理員;日常操作便可在管理帳號之外進行。SAP-C02 幾乎不接受讓日常工作在管理帳號執行 StackSets 的答案。

  1. 自管理 = 帳號 ID;服務管理 = OU + 新帳號自動部署。
  2. 委派管理員讓成員帳號執行 StackSets,使管理帳號保持乾淨。
  3. 並發數控制每次操作的爆炸半徑(數量或百分比)。
  4. 失敗容許度在超過失敗比例前中止操作。
  5. 區域順序依序跨區域推進——適用於漸進式區域採用。
  6. 自動部署自動套用至加入目標 OU 的新帳號。 參考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-concepts.html

標準模式:20 個帳號、組織層級基準、可部署 + 可稽核 + 可偵測 drift

這是 SAP-C02 最愛出的情境。正確架構如下:

  1. 啟用所有功能的 AWS Organizations,OU 按政策對齊(Security、Infrastructure、Workloads/Prod、Workloads/Non-Prod、Sandbox)。
  2. 已加入 AWS Control Tower 的 Security OU 基準(Log Archive、Audit、CloudTrail、Config)。
  3. 在 Shared Services / Deployments 帳號設定 CloudFormation StackSets 的委派管理員。
  4. **CodeCommit(或透過 connection 連接的 GitHub)**儲存基準範本,透過 pull request 進行同儕審查。
  5. Deployments 帳號的 CodePipeline:source → build/lint(CodeBuild + cfn-lint + cfn-nag)→ 在 StackSet 上建立 change set → 人工核准 → 執行 StackSet 操作,以服務管理權限並啟用自動部署,針對特定 OU 推進。
  6. 每個帳號和區域的 Stack instance 隨即佈建;加入 OU 的新帳號在第一天自動加入。
  7. Drift detection 透過 EventBridge 每 24 小時排程一次對 StackSet;drift 事件流入 Security Hub 並透過 SNS 通知資安維運人員。
  8. AWS Config 規則(cloudformation-stack-drift-detection-check、cloudformation-stack-notification-check)在偵測層補強相同的安全態勢。
  9. Root 層級 SCP 拒絕對基準 stack 名稱模式執行 cloudformation:DeleteStack 和 cloudformation:UpdateStack,除非 principal 是 CodePipeline 執行角色——這讓開發者無法篡改。
  10. CloudTrail 組織 trail(已由 Control Tower 啟用)記錄每一次 StackSet 操作;稽核人員透過 Athena 審查。

這個架構讓你具備可部署(一條 pipeline 同時推送基準到 20 個帳號)、可稽核(CloudTrail + change set 差異 + 核准簽名),以及可偵測 drift(CloudFormation + Config + EventBridge)。任何 SAP-C02 答案只要重用這個骨架,幾乎都是正確的。

AWS CDK——L1、L2、L3 Constructs 與 CDK Pipelines

AWS Cloud Development Kit(CDK)是程式化的 IaC 層,能從 TypeScript、Python、Java、C# 或 Go 程式碼合成 CloudFormation 範本。CDK 已成為 AWS 推薦的新工作負載撰寫體驗;SAP-C02 期望你識別出何時 CDK 是正確答案。

CDK 存在的理由

CloudFormation 是宣告式 YAML/JSON。在規模化時會遇到:

  • 冗長——一個簡單的「Lambda 搭配 IAM role、log group 和 X-Ray 追蹤」需要幾十行。
  • 重複——相同的 IAM 樣板複製貼上到每個範本。
  • 脆弱——參數和映射取代了真正的程式設計(無迴圈、條件式薄弱)。

CDK 以 constructs 取代範本——可組合的程式語言類別,在部署時合成為 CloudFormation。

Construct 等級——L1、L2、L3

  • *L1(Cfn constructs)**:與 CloudFormation 資源一對一對應。CfnFunction、CfnBucket、CfnTable。你能精確控制 CloudFormation 暴露的每個屬性。當你需要精細控制,或某個新 AWS 功能尚未抽象到 L2 時使用 L1。
  • L2(精選 constructs):具有合理預設和更高層級輔助工具的固執包裝。lambda.Function 自動建立 IAM role 和 log group,s3.Bucket 預設設定加密並封鎖公開存取。L2 是日常 CDK 程式碼的主體。
  • L3(模式):解決端到端使用案例的多資源模式。aws-ecs-patterns.ApplicationLoadBalancedFargateService 用一行程式碼建立 VPC、ECS cluster、Fargate service、ALB、安全群組、log groups 和 IAM roles。L3 constructs 內建 AWS 最佳實踐架構,是最快出貨的方式。

SAP-C02 期望你區分 L1(原始控制力、更多樣板)、L2(合理預設)、L3(整套模式)。情境說「團隊希望用最少的程式碼部署生產等級的 Fargate web 應用」,就指向 L3 模式。

環境、Bootstrapping 與 context

CDK 部署到環境(帳號 + 區域的組合)。部署前,每個帳號-區域需執行一次 cdk bootstrap aws://ACCOUNT/REGION——這會佈建一個 bootstrap stack,包含:

  • 放置範本資產和 Lambda 程式碼 zip 的 S3 bucket。
  • 放置容器映像資產的 ECR 儲存庫。
  • CDK Toolkit 在部署期間承擔的 IAM roles(cfn-exec、deploy、lookup、publish-file、publish-image)。

Bootstrapping 是 SAP-C02 中最容易被忽略的操作步驟;「CDK 部署失敗,出現 bucket not found 錯誤」的答案,通常都指向缺少 bootstrap。

CDK Pipelines——自我變更的 CI/CD

CDK Pipelines(aws-cdk-lib.pipelines)是一個 construct 程式庫,定義一個 CodePipeline,其第一個階段是「建構並更新 pipeline 本身」,之後是每個環境的 build+synth+deploy 階段。特性:

  • 自我變更(Self-mutating):當你在程式碼中新增一個階段並推送,pipeline 會先更新自身以包含新階段,然後執行新階段。無需手動編輯 pipeline。
  • 多帳號:每個階段可以針對不同的 AWS 帳號(透過跨帳號 CDK bootstrap roles);適用於 dev→staging→prod 的晉升流程。
  • 安全預設:工件 bucket 以 KMS 加密,roles 遵循最小權限,secrets 從 Secrets Manager 或 SSM Parameter Store 讀取。
  • Waves:wave 中的平行階段可同時部署到多個區域或帳號。

當 SAP-C02 問「團隊希望有一條 pipeline,能在 dev、staging、prod 帳號之間晉升應用程式,且無需人工維護 pipeline」,CDK Pipelines 是標準答案。

CDK vs SAM vs CloudFormation——決策依據

評估標準 CloudFormation CDK SAM
撰寫方式 宣告式 YAML/JSON 程式語言(TS/Py/Java/C#/Go) 宣告式 YAML 擴充
抽象層次 低(原始資源) 中到高(L1/L2/L3) 中(無伺服器巨集)
最適合 任何 AWS 資源,尤其是範本化重複使用 新工作負載、複雜架構、多帳號 pipeline 無伺服器應用(Lambda、API Gateway、DynamoDB、Step Functions)
本地測試 差 中等(CDK 程式碼的 jest) 好(sam local invoke、sam local start-api)
多帳號 StackSets、Service Catalog CDK Pipelines SAM Pipelines
學習曲線 簡單時低,複雜時高 中等 低(若熟悉 CloudFormation)

如果工作負載是純無伺服器(Lambda + API Gateway + DynamoDB + Step Functions + EventBridge),SAM 提供最佳的本地開發體驗和最短的範本。如果工作負載混合了無伺服器和傳統架構(ECS、EC2、RDS、VPCs),或者你希望所有內容使用單一撰寫語言,CDK 更勝一籌。如果團隊已有深厚的 CloudFormation 資產,且只需要搭配參數的範本化重複使用,純 CloudFormation + StackSets + Service Catalog 就夠了。參考:https://docs.aws.amazon.com/cdk/v2/guide/home.html

AWS SAM 與 Serverless Application Repository

**AWS Serverless Application Model(SAM)**是專為無伺服器工作負載特化的 CloudFormation 擴充。

SAM 簡介

  • 範本:使用 Transform: AWS::Serverless-2016-10-31 的 YAML。速記資源(AWS::Serverless::Function、AWS::Serverless::Api、AWS::Serverless::StateMachine、AWS::Serverless::HttpApi、AWS::Serverless::LayerVersion)在部署時展開為底層 CloudFormation。
  • SAM CLI:sam build 打包 function 程式碼,sam deploy 包裝 aws cloudformation deploy,sam local invoke 在 Docker 容器中針對本地事件執行 function,sam local start-api 執行本地 HTTP 模擬器。
  • 漸進式部署:AWS::Serverless::Function 上的 DeploymentPreference 屬性,將 CodeDeploy application + deployment group 與 pre-traffic Lambda hook、post-traffic Lambda hook,以及自動回滾的 CloudWatch 警報列表串接起來。設定 Type: Canary10Percent10Minutes 或 Linear10PercentEvery2Minutes,即可開箱即用地取得 alias-based 流量切換。
  • Policy templates:預建的 IAM 政策捷徑(DynamoDBCrudPolicy、S3ReadPolicy、SQSSendMessagePolicy)減少 IAM 撰寫工作。

SAM 相較於 CloudFormation 的獨特價值:無伺服器友好的速記 + 本地開發 + 內建 CodeDeploy canary 串接。相較於 CDK 的獨特價值:更少的移動部件,無合成步驟,pipeline 中不需要程式語言執行時期。

Serverless Application Repository(SAR)

AWS Serverless Application Repository 是用於發布和探索 SAM 應用程式的受管儲存庫。使用案例:

  • 組織內部重複使用——平台團隊發布一個部署標準日誌 Lambda + SQS DLQ 模式的 SAM app;每個應用團隊用幾個參數部署一份副本。
  • 公開重複使用——AWS 發布參考應用程式(警報處理器、Slack 通知器、CSV 轉 DynamoDB 載入器),你可以兩次點擊部署到自己的帳號。
  • 分發——廠商打包他們的無伺服器整合,客戶訂閱。

SAR 應用程式透過 AWS::Serverless::Application 資源部署,該資源參照應用程式 ARN 和 semver 版本。發布的範本存放在 SAR 的受管儲存空間;當你部署時,SAR 在你的帳號中合成一個巢狀 CloudFormation stack。

  1. 在 AWS::Serverless::Function 設定 AutoPublishAlias: live——每次部署發布新 Lambda 版本並移動 live alias。
  2. 設定 DeploymentPreference.Type 為其中一個內建的 canary/linear 類型。
  3. 設定 DeploymentPreference.Alarms 為 CloudWatch 警報列表——任何處於 ALARM 狀態的警報都會觸發自動回滾。
  4. 設定 DeploymentPreference.Hooks 為 pre-traffic 和 post-traffic Lambda ARN,用於整合測試。
  5. 執行 sam deploy 後,CodeDeploy 依設定移轉流量、監控警報,並在任何警報觸發時回滾。 參考:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/automating-updates-to-serverless-apps.html

AWS CodePipeline——多帳號與多區域部署

CodePipeline 是將 source、build、test 和 deploy 動作串接成具有多個階段的 pipeline 的協調層。在 Professional 規模,有趣的形狀是多帳號、多區域——這是大多數真實企業的運行方式。

跨帳號動作模式

標準的跨帳號 CodePipeline 具備:

  • Pipeline 帳號(通常是 Deployments 帳號):承載 CodePipeline、CodeBuild 和工件 S3 bucket。
  • 目標帳號(dev、staging、prod):承載實際被部署的資源。
  • Pipeline 帳號中的工件 bucket 以客戶自管 KMS key 加密;key 政策授予目標帳號 IAM roles 解密權限。
  • 每個目標帳號有一個 pipeline 執行角色(例如 CodePipelineCrossAccountRole),其信任政策信任 pipeline 帳號的 CodePipeline 服務角色,並附帶 external ID 條件。
  • 針對遠端帳號的 pipeline 階段,在動作的 RoleArn 欄位使用此角色以承擔目標帳號角色。

關鍵啟用因素:

  • 工件 bucket KMS key 必須允許目標帳號 principals(或透過 aws:PrincipalOrgID 允許組織中的任何人)使用 kms:Decrypt 和 kms:GenerateDataKey。
  • 工件 bucket 的 S3 bucket policy 必須允許目標帳號執行 s3:GetObject / s3:GetObjectVersion。
  • 跨帳號目標階段的 CloudFormation deploy 動作 必須包含 DeploymentRoleArn(CloudFormation 在目標帳號中承擔的角色)——這與 pipeline 動作的 RoleArn 是不同的角色。

多區域考量

CodePipeline pipeline 是區域性的;支援跨區域動作,但需要在 pipeline 跨越的每個區域各有一個工件 bucket。當 pipeline 階段針對另一個區域時,CodePipeline 將工件複製到區域 bucket,然後在該處執行動作。

Pro 模式:

  • 區域扇出:使用單一 pipeline,在 us-east-1、eu-west-1、ap-northeast-1 各有平行動作——每個動作部署相同的範本或映像。
  • 區域排序:對於漸進式區域推進(先區域 A,A 健康後再 B),串接依序的階段,並以 CloudWatch 指標檢查閘控每個階段。
  • 控制平面 vs 資料平面:在區域 1 部署後加入核准,不要等警報轉綠就自動推進到區域 2。

Source 動作選項

  • CodeCommit(原生 AWS Git)。
  • GitHub / GitLab / Bitbucket Cloud 透過 AWS CodeStar Connections——目前推薦的第三方 Git 機制(取代舊的 GitHub 動作)。
  • S3 object——放在 S3 的壓縮包。
  • ECR image——新推送的容器映像。
  • AWS CodeArtifact package——新的 NPM/PyPI/Maven 套件版本。

與部署策略相關的動作提供者

  • CloudFormation — CREATE_UPDATE、DELETE_ONLY、CHANGE_SET_REPLACE、CHANGE_SET_EXECUTE、REPLACE_ON_FAILURE。Pro pipelines 一律將 CHANGE_SET_REPLACE + 核准 + CHANGE_SET_EXECUTE 拆開。
  • CloudFormation StackSets — 建立或更新 stack set,建立針對特定 OU 的 stack instances。
  • CodeDeploy — 呼叫 EC2/on-prem 或 Lambda 或 ECS CodeDeploy 部署。
  • CodeBuild — 執行建構(測試、linting、安全掃描)。
  • Manual approval — 暫停 pipeline 等待人工簽核;支援 SNS 通知和審查者留言。
  • Lambda invoke — 自訂部署前或部署後邏輯(資料庫遷移、煙霧測試、整合呼叫)。
  • Step Functions invoke — 長時間執行或複雜的協調流程。
  • Service Catalog — 部署一個產品。

SAP-C02 的經典案例:團隊建立了跨帳號 pipeline,設定好目標角色的 assume-role 信任,pipeline 在 CloudFormation 部署步驟失敗並出現解密錯誤。幾乎必然缺少的是 pipeline 帳號工件 bucket 上的 KMS CMK key policy——必須允許目標帳號的角色使用 kms:Decrypt。僅在消費者端設定 IAM allow 是不夠的;KMS 要求 key policy 明確授予 principal。參考:https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create-cross-account.html

AWS CodeDeploy——深入部署組態

CodeDeploy 是 AWS 針對 EC2/on-prem 執行個體、Lambda functions 和 ECS 服務的部署引擎。**部署組態(Deployment configuration)**是管控部署期間流量或執行個體如何移轉的策略。

EC2 / on-premises 部署組態

適用於 EC2 執行個體或安裝 CodeDeploy agent 的 on-prem 伺服器上的原地和 blue/green 部署。

  • CodeDeployDefault.AllAtOnce — 同時更新所有執行個體。快速、高風險、低成本。僅限開發使用。
  • CodeDeployDefault.HalfAtATime — 分波次更新一半,需機隊規模 ≥ 2。平衡速度與風險。
  • CodeDeployDefault.OneAtATime — 每次更新一個執行個體。最慢但最安全,需機隊規模 ≥ 2。
  • 自訂部署組態 — 你定義 MinimumHealthyHosts 為數量或百分比;CodeDeploy 確保部署期間至少有那麼多執行個體保持健康。

Lambda 部署組態

Lambda 部署從不原地執行;CodeDeploy 發布新 Lambda 版本並移轉 alias 流量。

  • CodeDeployDefault.LambdaAllAtOnce — 立即切換 alias。開發使用。
  • CodeDeployDefault.LambdaCanary10Percent5Minutes — 10% 流量觀察 5 分鐘,再切換至 100%。
  • CodeDeployDefault.LambdaCanary10Percent10Minutes — 10% 觀察 10 分鐘,再切換。
  • CodeDeployDefault.LambdaCanary10Percent15Minutes — 10% 觀察 15 分鐘,再切換。
  • CodeDeployDefault.LambdaCanary10Percent30Minutes — 10% 觀察 30 分鐘,再切換。
  • CodeDeployDefault.LambdaLinear10PercentEvery1Minute — 每 1 分鐘增加 10%(共約 10 分鐘)。
  • CodeDeployDefault.LambdaLinear10PercentEvery2Minutes — 每 2 分鐘增加 10%。
  • CodeDeployDefault.LambdaLinear10PercentEvery3Minutes — 每 3 分鐘增加 10%。
  • CodeDeployDefault.LambdaLinear10PercentEvery10Minutes — 每 10 分鐘增加 10%(共約 100 分鐘)。

ECS 部署組態

透過 CodeDeploy 的 ECS 部署僅使用 blue/green——CodeDeploy 在 ALB/NLB 的測試監聽器後方佈建新的 task set,再移轉生產監聽器。

  • CodeDeployDefault.ECSAllAtOnce — 測試流量驗證後立即將所有流量切至新 task set。
  • CodeDeployDefault.ECSCanary10Percent5Minutes 到 ECSCanary10Percent15Minutes — 帶有指定觀察期的 canary。
  • CodeDeployDefault.ECSLinear10PercentEvery1Minute 到 ECSLinear10PercentEvery3Minutes — Linear 推進。

自動回滾與警報

每個 CodeDeploy deployment group 都可以串接 CloudWatch 警報。屬性:

  • Alarms:CloudWatch 警報列表;部署期間任何警報進入 ALARM 狀態,CodeDeploy 自動回滾。
  • 自動回滾事件:DEPLOYMENT_FAILURE、DEPLOYMENT_STOP_ON_ALARM、DEPLOYMENT_STOP_ON_REQUEST。
  • 生命週期 hooks:pre-traffic 和 post-traffic hooks 呼叫 Lambda functions 進行整合測試;hook 失敗觸發回滾。

Pro 模式:定義 p99Latency CloudWatch 警報和 Error5xxRate 警報;將兩者附加到每個 deployment group。對 Lambda,使用內建 CloudWatch 指標 Errors、Duration,以及透過 embedded metric format 發出的自訂應用指標。

ECS blue/green 搭配 CodeDeploy 需要:(1) 部署控制器設為 CODE_DEPLOY 的 ECS service;(2) 帶有兩個監聽器的 ALB 或 NLB——一個生產監聽器和一個測試監聽器;(3) 兩個 target groups——blue(目前服務中)和 green(為部署而建立);(4) 參照兩個 target groups 和兩個監聽器的 CodeDeploy application 和 deployment group;(5) 指定新 task definition 的 appspec.yaml。CodeDeploy 將新 task set 註冊到 green target group,可選擇透過測試監聽器路由測試流量進行驗證,再依部署組態將生產監聽器從 blue 切換到 green。回滾是將監聽器切回 blue。參考:https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-create-ecs-bg.html

Lambda Alias-Based Canary 與版本管理

Lambda 原生的版本控制和 alias 支援,是 CodeDeploy canary 部署的基礎。

Lambda 版本與 aliases

  • Lambda function 版本:發布時 function 程式碼 + config + 環境變數的不可變快照。版本以數字標記(1、2、3...),$LATEST 是可變的工作副本。
  • Lambda alias:指向特定版本的命名指標(prod → 7、staging → 8)。Aliases 可被呼叫(其 ARN 是穩定的),因此客戶端呼叫 alias ARN 而非版本 ARN。

Alias 流量切換

一個 alias 可以同時指向一或兩個版本,搭配 RoutingConfig 權重。範例:

alias: prod
FunctionVersion: 7  (主要,90% 的呼叫)
RoutingConfig:
  AdditionalVersionWeights:
    "8": 0.10  (10% 的呼叫路由至版本 8)

CodeDeploy 依部署排程(canary 或 linear)驅動這個 alias 流量切換。應用程式不知道有兩個版本;Lambda 服務處理每次呼叫的路由。

SAM vs 直接 CodeDeploy 串接

相同的 alias-canary 模式有三種撰寫風格:

  • SAM — AutoPublishAlias: live + DeploymentPreference.Type: Canary10Percent10Minutes + DeploymentPreference.Alarms。最簡短。
  • CDK — LambdaDeploymentGroup construct 搭配 deploymentConfig 和 alarms。CDK 資產的慣用做法。
  • 直接 CloudFormation / CodeDeploy — AWS::CodeDeploy::Application、AWS::CodeDeploy::DeploymentGroup、AWS::Lambda::Alias。完全控制,最冗長。

Provisioned concurrency 與 aliases

Provisioned concurrency 分配給 alias(或特定版本)。當你執行 canary 時,舊版本(主要)和新版本(canary)都需要足夠的 provisioned concurrency 以避免流量切換期間的冷啟動。常見的 Pro 錯誤是在 alias 上佈建 concurrency(在 canary 模式下是分流的),卻未考慮 canary 百分比——canary 版本會冷啟動。修正方式:在 canary 開始前將 concurrency 佈建在即將推出的版本上,而非 alias 上。

當 SAP-C02 說「新 Lambda 版本必須在部署後 10 分鐘內若錯誤率飆升就自動回滾」,教科書式的答案堆疊是:(1) 透過 CodeDeploy 發布新版本,(2) 使用 CodeDeployDefault.LambdaCanary10Percent10Minutes,(3) 在 function 錯誤 + 自訂指標上附加 CloudWatch 警報,(4) 警報觸發自動回滾。不需要自訂 Lambda 協調、Step Functions 或人工 runbook。參考:https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html

AWS AppConfig——執行期 Feature Flags 與配置

部署策略不只是關於出貨程式碼——也關於在不部署程式碼的情況下出貨配置和 feature flags。AWS AppConfig 是這方面的受管服務。

核心元件

  • Application:邏輯分組(例如「checkout-service」)。
  • Environment:邏輯部署目標(例如「prod-us-east-1」、「staging-eu-west-1」)。環境可設定 CloudWatch 警報以自動回滾。
  • Configuration profile:配置的單元——自由形式 JSON/YAML/文字、feature-flag profile(結構化 feature-flag JSON),或 hosted configuration。來源包含 AppConfig-hosted、SSM Parameter Store、S3 和 Systems Manager documents。
  • Deployment strategy:管控推進的命名策略——AppConfig.AllAtOnce、AppConfig.Linear50PercentEvery30Seconds、AppConfig.Canary10Percent20Minutes,或自訂。
  • Validator:可選的 Lambda 或 JSON Schema,在部署時驗證新配置。

部署流程

  1. 操作員以新版本更新 configuration profile(feature flag 切換、閾值調整)。
  2. 操作員以選定的部署策略開始部署到某個環境。
  3. AppConfig 驗證配置(語法 + JSON Schema + 自訂 Lambda)。
  4. AppConfig 依策略的推進節奏推出配置。
  5. 客戶端(透過 AppConfig Agent sidecar 或 SDK)在下次輪詢間隔時拉取並套用新配置。
  6. 如果環境的 CloudWatch 警報在部署期間進入 ALARM 狀態,AppConfig 內建回滾並還原。

為什麼選 AppConfig 而非環境變數

  • 更改 Lambda 環境變數需要完整的部署和 alias 切換。
  • 更改 ECS task definition 環境變數需要更新 task definition + service 部署。
  • AppConfig 讓你在幾秒內更改行為 flag,無需部署,且具備與程式碼部署相同的回滾護欄。

Feature flags vs 配置

AppConfig 有一流的 feature flag profile 類型,具有結構化 flags(布林值、值、約束)。執行期 SDK 暴露 getFlag("newCheckoutFlow"),並有合理的預設值;UI 讓你按環境啟用/停用。當 SAP-C02 說「逐步為 10% 的使用者啟用新功能,並提供緊急關閉開關」,這個服務就是答案。

把 AppConfig 視為程式碼 pipeline 之外的第二個部署面。考試喜歡出「風險配置變更必須在不重新部署應用程式的情況下可回滾」的情境——AppConfig 就是答案。搭配 CloudWatch 警報自動回滾,你就得到了 CodeDeploy canary 模式的執行期類比,而無需觸及 Lambda 版本或 ECS task definitions。參考:https://docs.aws.amazon.com/appconfig/latest/userguide/what-is-appconfig.html

AWS Service Catalog——開發者的受管自助服務

當開發者需要自行建立資源,但組織需要護欄時,AWS Service Catalog 將 CloudFormation 範本包裝成版本化的、可啟動的產品,讓終端使用者透過受控的產品組合使用。

核心元件

  • Product(產品):代表可重複使用架構的版本化 CloudFormation 範本(例如「標準三層 web stack」、「附備份策略的 Aurora Postgres」)。
  • Portfolio(產品組合):共享給特定 IAM principals 或帳號的產品分組。
  • Launch constraint(啟動約束):Service Catalog 在啟動產品時承擔的 IAM role。終端使用者不需要 CloudFormation 權限——他們只需要啟動產品的權限,launch constraint role 負責佈建資源。
  • Template constraint(範本約束):限制終端使用者可選擇的參數值的規則(例如,執行個體類型必須來自允許清單)。
  • TagOption library:受管的標籤鍵值允許清單;產品繼承 TagOptions,使所有已啟動的資源獲得一致的標籤。

多帳號模式

在多帳號組織中:

  • Hub 帳號(通常是 Shared Services):承載 portfolio 和 products。
  • Spoke 帳號:透過 Service Catalog portfolio share 機制,或透過 AWS RAM 進行組織範圍共享,接收 portfolio 分享。
  • Spoke 帳號的開發者從本地共享的 portfolio 啟動產品;使用 launch constraint role 在 spoke 帳號中啟動。
  • 產品更新自動傳播到共享的 portfolios;spoke 管理員可看到新版本並套用到現有的已佈建產品。

Service Catalog vs 直接 CloudFormation 權限

評估標準 直接 CloudFormation Service Catalog
開發者權限 需要廣泛的 CloudFormation + 資源權限 僅需啟動權限
範本治理 各團隊自行管理,無強制執行 精選的版本化 portfolio
參數控制 自由形式 Template constraints 限制值
標籤強制執行 各範本自行處理 TagOption library 強制一致性
多帳號共享 StackSets 或手動 Portfolio share + RAM
使用案例 平台團隊 終端使用者自助服務

SAP-C02 答案信號:「開發者應在不需廣泛 IAM 權限的情況下自助使用標準架構」→ Service Catalog。「平台團隊部署組織層級基準」→ StackSets。

AWS 上的 Terraform 考量

Terraform 不是 AWS 原生服務,但許多企業在 AWS 上大規模運行 Terraform。SAP-C02 偶爾會問 Terraform 如何與 AWS 原生 IaC 並存。

AWS 支援的整合點

  • AWS Provider for Terraform:涵蓋幾乎每個 AWS 服務的標準 Terraform provider。由 HashiCorp 和 AWS 共同維護,版本化管理。
  • AWS Cloud Control Provider:透過 Cloud Control API 提供 Terraform 對 CloudFormation 支援資源的存取——適用於 AWS Provider 尚未支援的資源。
  • AWS Control Tower Account Factory for Terraform(AFT):AWS 提供的基於 Terraform 的帳號自動佈建參考實作,搭配 Control Tower。使用每個帳號的 CodeCommit 儲存庫進行基準配置 + 全域自訂。
  • Terraform Cloud / Terraform Enterprise 整合:CodePipeline 支援呼叫 Terraform Cloud 執行;私有模組登錄可參照 AWS 原生工件。

AWS 上的狀態管理

Terraform 在 Pro 規模需要遠端狀態:

  • 狀態檔案使用 S3 backend,搭配 DynamoDB table 進行狀態鎖定(防止並發寫入)。
  • 狀態 bucket 的 S3 bucket 版本控制,用於稽核和回滾。
  • 靜態加密使用 KMS CMK。
  • 每個環境使用獨立狀態檔案以限制爆炸半徑(dev、staging、prod 各自擁有)。

Terraform vs CloudFormation——Pro 等級的選擇

評估標準 CloudFormation/CDK Terraform
AWS 覆蓋率 每個新 AWS 服務的第 0 天支援 快速但通常落後數週
多雲 僅 AWS AWS + Azure + GCP + 更多
狀態 AWS 管理 操作者管理(S3 + DynamoDB)
Drift detection 原生(CloudFormation + Config 規則) terraform plan + 第三方(如 driftctl)
多帳號分發 StackSets(服務管理) AFT、自訂 pipelines、Terragrunt
變更預覽 Change sets terraform plan
回滾 失敗時自動 手動(重新套用前一個狀態)
組織政策整合 原生(SCPs、Control Tower) 外部(Sentinel、OPA)
成本 免費 免費(OSS);Terraform Cloud 有付費方案

SAP-C02 通常偏好 CloudFormation/CDK 答案,除非情境明確提到現有的 Terraform 資產或多雲需求。當 Terraform 出現時,AFT 模式是 AWS 推薦的多帳號方式。

考試在三個情境選擇 Terraform:(1) 「公司已在生產環境運行 Terraform,希望擴展到 AWS」,(2) 「架構跨越 AWS + Azure + GCP,需要單一 IaC 工具」,(3) 「Control Tower Account Factory for Terraform(AFT)已是現有基準」。在所有其他 SAP-C02 IaC 情境中,CloudFormation 或 CDK 才是正確答案。參考:https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/introduction.html

Systems Manager Automation 與變更管理

Pro 規模的部署策略也涵蓋作業變更——修補程式推進、配置基準、一次性 runbook 執行。AWS Systems Manager Automation 是處理這些的服務。

Automation documents(runbooks)

  • AWS 受管 documents(數百個):AWS-RestartEC2Instance、AWS-PatchInstanceWithRollback、AWS-EnableExplorer、AWSSupport-TroubleshootRDP 等。
  • 自訂 documents:YAML 或 JSON 定義的步驟(aws:runCommand、aws:invokeLambdaFunction、aws:approve、aws:waitForAwsResourceProperty、aws:branch)。
  • 多帳號、多區域 automation:runbooks 可以針對 Organizations OU,在一次執行中跨帳號和區域。

Patch Manager

  • 每個 OS 和合規等級的Patch baselines 定義哪些修補程式獲批准。
  • Patch groups 以標籤將 EC2 執行個體與它們遵循的 baseline 關聯。
  • Maintenance windows 排程修補,遵守業務時間和維護核准。
  • 組織範圍推進:Systems Manager Quick Setup + Patch Manager baselines 跨 OU 套用。

Change Manager

  • Change templates 定義特定變更類型的審查工作流程和核准者。
  • Change requests 是繫結到 runbook 的提案;核准者審查並核准或拒絕。
  • Calendar 整合:防止在封鎖視窗期間進行變更。
  • CloudTrail 可稽核性:每個步驟都有記錄。

SAP-C02 答案信號:「跨 40 個帳號進行可核准且可稽核的作業變更」→ Systems Manager Change Manager + Automation。「以合規報告排程整個機隊的 OS 修補」→ Patch Manager 搭配 maintenance windows。

情境模式——SAP-C02 中的 CI/CD 與 IaC

以下模式將考題描述對應到架構。

情境模式 1:「將組織層級基準部署到 20 個帳號,可稽核且可偵測 drift」

這是上面已詳細介紹的標準模式。摘要:

  • AWS Organizations + Control Tower:提供 OU 結構和基準護欄。
  • 服務管理權限的 CloudFormation StackSets:針對特定 OU,新帳號啟用自動部署。
  • StackSets 的委派管理員設在 Deployments 帳號。
  • CodePipeline:CHANGE_SET_REPLACE → 人工核准 → CHANGE_SET_EXECUTE 動作。
  • Drift detection:透過排程 EventBridge 規則加上 AWS Config 規則 cloudformation-stack-drift-detection-check。
  • Root 層級 SCP:拒絕篡改基準 stacks,但 pipeline role 除外。
  • CloudTrail 組織 trail:稽核用途。

情境模式 2:「Lambda 必須在 p99 延遲回歸時自動回滾部署」

  • 以 SAM AutoPublishAlias 或 CDK LambdaDeploymentGroup 發布新版本。
  • CodeDeploy 部署組態 = CodeDeployDefault.LambdaCanary10Percent10Minutes。
  • Lambda Duration p99 超過閾值的 CloudWatch 警報,以及 Errors 率警報。
  • DeploymentPreference.Alarms 參照兩個警報。
  • 警報觸發時,CodeDeploy 自動回滾 alias 權重。

情境模式 3:「ECS 服務零停機部署,搭配自動回滾」

  • ECS service deploymentController = CODE_DEPLOY。
  • ALB 有兩個監聽器(生產 + 測試)和兩個 target groups(blue + green)。
  • CodeDeploy application + deployment group 搭配 ECSCanary10Percent5Minutes 或通過 hook 驗證後的 ECSAllAtOnce。
  • Pre-traffic Lambda hook 對測試監聽器呼叫 /health;失敗則回滾。
  • Post-traffic Lambda hook 執行整合測試;失敗則回滾。
  • ALB 5xx、target group 健康主機數的 CloudWatch 警報。

情境模式 4:「具備治理的開發者自助服務」

  • Shared Services 帳號中的 AWS Service Catalog hub。
  • 透過原生 share 機制將 portfolio 共享至工作負載 OU。
  • Launch constraint role 代表開發者在 spoke 帳號中佈建資源。
  • Template constraints 限制執行個體類型、區域、AZ。
  • TagOption library 強制必要標籤。
  • 開發者從 Service Catalog 主控台,或透過 CloudFormation AWS::ServiceCatalog::CloudFormationProvisionedProduct 呼叫。

情境模式 5:「帶有緊急關閉開關的 feature flag 推進」

  • AWS AppConfig application + environment + feature-flag profile。
  • AppConfig deployment strategy = AppConfig.Linear50PercentEvery30Seconds。
  • 業務指標的環境警報(例如轉換率)。
  • 應用程式使用 AppConfig Agent Lambda extension 以零延遲取得配置。
  • 緊急關閉:操作員將 flag 切換為 false 並啟動部署——幾秒內全面生效。

情境模式 6:「多帳號 CodePipeline——dev → staging → prod」

  • Pipeline 帳號:承載 CodePipeline、CodeBuild、附客戶自管 KMS key 的工件 S3。
  • Dev / staging / prod 帳號:各有一個信任 pipeline CodePipeline 服務角色的 CloudFormation 部署角色。
  • KMS key policy 允許每個目標帳號角色解密。
  • S3 bucket policy 允許目標帳號角色使用 s3:GetObject。
  • Pipeline 階段在動作的 RoleArn 欄位使用目標角色,在 CloudFormation 動作的 DeploymentRoleArn 指定部署角色。
  • Staging 和 prod 之間設有人工核准。

情境模式 7:「帶有漸進驗證的多區域推進」

  • 單一 pipeline 搭配依序的區域階段:us-east-1 → eu-west-1 → ap-northeast-1。
  • 每個區域有各自的工件 bucket(區域要求)。
  • 各區域之間設有 CloudWatch 警報檢查動作(自訂 Lambda),驗證沒有指標處於 ALARM 狀態。
  • 第一個生產區域要求人工核准;警報清除後後續區域自動晉升。

決策矩陣——哪個 IaC 和部署工具適合哪個目標

目標 首選工具 備註
透過 OU 將基準部署至多個帳號 CloudFormation StackSets(服務管理) 新帳號自動部署
單帳號內使用模組化範本部署 巢狀 stacks 單一生命週期可重複使用模組
在獨立 stacks 間共享 VPC/IAM 輸出 跨 stack 參照(Export/ImportValue) 僅限同帳號同區域
套用前預覽基礎設施變更 CloudFormation change sets Pro pipelines 必備
偵測已部署 stacks 的 drift CloudFormation drift detection + Config 規則 搭配 EventBridge 警報
全新複雜架構 CDK(L2/L3) 程式化抽象
全新無伺服器應用 SAM 最佳本地開發、最短範本
多帳號自我變更 pipeline CDK Pipelines 透過 bootstrap roles 跨帳號
受管的開發者自助服務 AWS Service Catalog Launch constraint + TagOptions
可回滾的配置/feature flag 變更 AWS AppConfig 執行期、警報驅動回滾
零停機 Lambda 部署 CodeDeploy Lambda canary 或 linear Alias-based 流量切換
零停機 ECS 部署 CodeDeploy ECS blue/green 兩個監聽器 + 兩個 target groups
零停機 EC2 機隊部署 CodeDeploy EC2 blue/green 新 ASG + ELB target group 交換
快速原地開發部署 CodeDeployDefault.AllAtOnce 僅限開發;避免在生產使用
組織層級 OS 修補 Systems Manager Patch Manager + Maintenance Windows 組織範圍
多帳號 runbook 執行 Systems Manager Automation(多帳號/區域) 透過 Change Manager 核准
具稽核的核准閘門變更 Systems Manager Change Manager 與 Automation 整合
多雲 IaC Terraform(+ AFT 用於 AWS 多帳號) 遠端狀態在 S3 + DynamoDB
內部發布可重複使用的無伺服器應用 Serverless Application Repository(SAR) 巢狀 stack 部署

常見陷阱——CI/CD 與 IaC 部署策略

每次 SAP-C02 考試都可能出現以下多個干擾項。

陷阱 1:當 Organizations 存在時使用「自管理 StackSets 權限」

如果組織正在使用 AWS Organizations(且情境提到 OU),服務管理權限才是正確答案。自管理僅在目標位於組織外部或未啟用 Organizations 時才正確。

陷阱 2:從管理帳號執行 StackSets

日常 StackSet 操作應在委派管理員帳號執行,而非管理帳號。讓 StackSets 留在管理帳號的答案是治理反模式。

陷阱 3:跨帳號的跨 stack 參照

Fn::ImportValue 僅限同帳號同區域。如需跨帳號共享值,使用 SSM Parameter Store 搭配 RAM 共享,或透過 pipeline 參數或 CDK Pipelines context 明確傳遞。

陷阱 4:忘記 CDK bootstrap

CDK 部署需要每個帳號-區域有一個 bootstrap stack。缺少 bootstrap 是 CDK pipelines 出現「bucket not found」錯誤的第一大原因。修正方式:每個環境執行一次 cdk bootstrap。

陷阱 5:ECS CodeDeploy 缺少兩個監聽器或兩個 target groups

ECS blue/green 需要生產和測試兩個監聽器,以及兩個 target groups。單監聽器/單 target group 情境預設使用 ECS rolling update 控制器,而非 CodeDeploy blue/green。

陷阱 6:AppConfig vs 環境變數

要求「不需部署即可快速可回滾地變更配置」的情境,答案是 AppConfig,而非環境變數。環境變數需要完整的 function/task 更新才能變更。

陷阱 7:Canary 期間 Lambda provisioned concurrency 分配錯誤

在 canary 推進期間,在新版本上佈建 concurrency,而非在 alias 上(alias 是分流的)。否則 canary 流量會冷啟動。

陷阱 8:CloudFormation 適用時選擇 Terraform

除非情境明確提到多雲或現有 Terraform 資產,AWS 原生答案(CloudFormation、CDK、SAM、StackSets)在 SAP-C02 上更受青睞。Terraform 不是錯的,但在純 AWS 情境中很少是「最佳」答案。

陷阱 9:對 Tag policy 強制執行的誤解

Organizations tag policies 預設報告不合規;它們不會阻止資源建立。如要阻止,結合 tag policies 和使用 aws:RequestTag 條件的 SCP,或在 Service Catalog 產品層級用 TagOptions 強制執行。

陷阱 10:跨帳號 pipelines 缺少 KMS key policy

跨帳號 CodePipeline 工件需要客戶自管 KMS key 的 key policy 授予目標帳號 principals 解密權限。目標端的 IAM allow 是不夠的——KMS 主要依賴資源型權限。

陷阱 11:假設 CodeDeploy 對 ECS 執行原地 rolling update

CodeDeploy 的 ECS 部署控制器僅限 blue/green。如果你需要 ECS 原地 rolling update,使用 ECS 原生的 rolling update 控制器(而非 CodeDeploy)。考試有時會以「CodeDeploy rolling for ECS」作為干擾項——這個功能不存在。

陷阱 12:生產環境跳過 change sets

任何在生產 pipeline 中直接使用 CREATE_UPDATE 的答案都值得懷疑。Pro pipelines 一律使用 CHANGE_SET_REPLACE + 核准 + CHANGE_SET_EXECUTE。

診斷入口——「為什麼這個部署失敗?」

當情境說「部署失敗,團隊預期 X 但看到 Y」,請沿著診斷梯逐步排查:

  1. Pipeline role 和跨帳號信任 — pipeline 的服務角色是否對目標帳號角色有 sts:AssumeRole?目標角色的信任政策是否以正確的 external ID 信任 pipeline 服務角色?
  2. KMS CMK key policy — 對於工件 bucket 加密的 pipelines,KMS key 是否允許目標帳號的 kms:Decrypt 和 kms:GenerateDataKey?
  3. 工件 bucket 的 S3 bucket policy — 是否允許目標帳號角色的 s3:GetObject / s3:GetObjectVersion?
  4. CloudFormation 部署角色 — 對於跨帳號 CloudFormation 動作,DeploymentRoleArn 是 CloudFormation 在目標帳號中承擔的角色;它需要範本涉及的每種資源類型的權限。這是與 pipeline role 不同的角色。
  5. 目標帳號路徑上的 SCP — 是否有拒絕 SCP 阻擋 CloudFormation 動作或某種資源類型?
  6. 服務配額 — CloudFormation 500 資源限制、StackSet 100 stack-instance 操作限制、pipeline 動作逾時(預設 1 小時)。
  7. Change set 有效性 — 過期的 change set 必須重新建立;參照不再存在的資源的 change set 執行失敗。
  8. CloudFormation Hooks 或主動性護欄 — Control Tower 主動性控制可能在 hook 評估時阻擋變更;在 CloudFormation events 中查看 hook 結果。
  9. CodeDeploy 部署的 CloudWatch 警報狀態 — 部署開始前某個警報是否已處於 ALARM 狀態(立即觸發自動回滾)?
  10. Lambda function 限制 — 並發限制、程式碼大小、部署套件大小、保留並發衝突。

Log Archive 帳號中的 CloudTrail(透過組織 trail)加上 pipeline 執行歷史記錄以及 CloudFormation stack events,提供完整的鑑識軌跡。

費用模型說明

大多數 CI/CD 服務依具體使用單位收費:

  • CodePipeline:第一條 pipeline 免費;額外的活躍 pipeline 按月計費。V2 pipelines 依執行分鐘計費。
  • CodeBuild:依每個建構主機的每分鐘計費(general1.small 到 large)。
  • CodeDeploy:EC2/on-prem/Lambda/ECS 部署本身不收費;你支付底層運算費用。
  • CloudFormation StackSets:不收服務費;你支付已佈建資源的費用。
  • CDK:免費;你支付已佈建資源以及 bootstrap 資產(S3 + ECR 儲存)的費用。
  • SAM CLI:本地使用免費。
  • Serverless Application Repository:發布和使用免費。
  • AWS AppConfig:按每次配置呼叫 + 每次取得的配置計費(極小的單位成本;透過 agent/extension 快取)。
  • Service Catalog:免費;你支付已佈建資源的費用。
  • Systems Manager:大多數功能免費;Automation 跨大量執行個體執行時按步驟執行次數收費。

在 Pro 規模,主要成本是已佈建的基礎設施本身和大型 pipelines 的 CodeBuild 分鐘數;CI/CD 控制平面費用低廉。

FAQ——CI/CD 與 IaC 部署策略高頻問題

Q1:何時應使用 CloudFormation StackSets vs 巢狀 stacks vs 跨 stack 參照?

當單一團隊擁有所有資源,並希望它們以一次交易完成部署、更新和回滾時,使用巢狀 stacks——父 stack 驅動每個子 stack。當不同團隊在同帳號同區域擁有不同的部件,需要獨立的生命週期(VPC 團隊、IAM 團隊、應用團隊),但仍需共享子網路 ID 等輸出時,使用跨 stack 參照。當你必須將相同範本部署到多個帳號或區域時,使用 CloudFormation StackSets——巢狀 stacks 和跨 stack 參照都無法跨越帳號邊界。對 SAP-C02 而言,「組織層級基準」始終對應到帶服務管理權限的 StackSets;「由子網路模組組成的模組化 VPC」對應到巢狀 stacks;「被多個應用共享的基礎 IAM」對應到透過 SSM Parameter Store 的跨帳號跨 stack 參照。

Q2:對於新工作負載,如何在 CloudFormation、CDK 和 SAM 之間選擇?

對於純無伺服器工作負載(Lambda、API Gateway、DynamoDB、Step Functions、EventBridge),且團隊重視短範本和一流本地開發體驗時,選 SAM。對於混合工作負載(無伺服器 + 容器 + VM + RDS),或團隊希望程式化重複使用、具型別的基礎設施以及跨所有內容使用單一語言時,選 CDK。當資產已大量使用 CloudFormation、你希望最簡單的撰寫方式且無需建構步驟,或你正在發布 Service Catalog 或 StackSets 使用的可重複使用範本時,選純 CloudFormation YAML。三者最終都合成為 CloudFormation——你可以混用(CDK 用於新服務、CloudFormation 範本透過 CfnInclude 使用、SAM 用於無伺服器子系統)。

Q3:使用可稽核 pipeline 部署到 20 個 AWS 帳號的標準模式是什麼?

從管理帳號啟用所有功能的 Organizations,並將 Deployments 帳號指定為 CloudFormation StackSets 委派管理員。在 Deployments 帳號,執行一個 CodePipeline:從 CodeCommit 或透過 CodeStar Connections 連接的 GitHub 拉取範本,執行 CodeBuild 進行 linting(cfn-lint、cfn-nag、Terraform 的 tfsec)和單元測試,在帶服務管理權限的 StackSet 上針對特定 OU 建立 change set,在帶 SNS 通知到資安維運人員的人工核准動作上暫停,然後執行 change set,以設定好的並發數和失敗容許度平行部署到所有目標帳號。啟用自動部署,使加入 OU 的新帳號在第一天就收到 stack。透過 EventBridge 排程 drift detection。用 root SCP 鎖定一切,拒絕除 pipeline role 以外的任何人對基準 stack 名稱模式執行 cloudformation:*。每個步驟都記錄在 CloudTrail 組織 trail 中,提供完整稽核。

Q4:Lambda 部署應使用 canary 還是 linear?

當你希望有明確的兩步驟切換,並帶有人工觀察或警報監控的觀察期時,使用 canary——經典模式是 LambdaCanary10Percent10Minutes,在全面切換前提供 10 分鐘的 canary 流量。當你有信心 10 分鐘的資料足以捕捉回歸時(良好的遙測、高流量),canary 很合適。當你希望更平滑的推進時,使用 linear——每分鐘增加 10%,持續 10 分鐘——減少 canary 階段結束時的「跳躍」。當警報需要更多資料點且流量穩定時,linear 更合適;漸進推進讓每個步驟的警報評估能輸入下一個步驟。兩者都在 CloudWatch 警報時自動回滾。對於低流量 Lambda,10% 的數據量太少時,考慮延長觀察時間(LambdaCanary10Percent30Minutes)或在生產部署前傾向使用 blue/green 式的 staging 測試。

Q5:ECS blue/green 搭配 CodeDeploy 的端到端運作方式?

ECS service 配置 deploymentController: CODE_DEPLOY。你有一個 ALB,帶有兩個監聽器——生產監聽器(port 80/443)和測試監聽器(例如 port 8080)——以及兩個 target groups(blue 和 green)。CodeDeploy deployment group 參照 cluster、service、兩個 target groups、兩個監聽器和一個部署組態。當部署開始時,CodeDeploy 建立一個新的 ECS task set,註冊到 green target group。你可以選擇透過測試監聽器路由測試流量進行預生產驗證;pre-traffic Lambda hook 對測試監聽器執行整合測試。如果 hook 通過,CodeDeploy 依部署組態(all-at-once、canary 或 linear)將生產監聽器從 blue 切換到 green。post-traffic hook 在切換後執行煙霧測試。如果 deployment group 警報列表中的任何 CloudWatch 警報觸發,CodeDeploy 自動回滾——生產監聽器切回 blue,green task set 被終止。這讓你在不需要第二次部署的情況下,在幾秒內完成回滾。

Q6:何時應使用 AWS AppConfig 而非重新部署?

對於必須在執行期間不進行程式碼部署即可變更的配置和 feature flags,使用 AppConfig。典型用途:為特定比例的使用者開啟/關閉功能、調高速率限制閾值、切換演算法、啟用維護模式橫幅、推進區域功能。AppConfig 給你與程式碼部署相同的護欄——驗證(Lambda 或 JSON Schema)、分段推進(linear、canary、all-at-once),以及 CloudWatch 警報自動回滾——但推進以秒為單位,因為不需要重新部署,只需在下一個輪詢間隔取得。SAP-C02 情境中「幾秒內回滾配置變更」、「feature flag 推進」或「緊急關閉開關」都指向 AppConfig。不要用 AppConfig 存放 secrets(使用 Secrets Manager)或大型靜態資產(使用 S3)。可用於 1 MiB 以內的 JSON/YAML 配置 blob 和 feature-flag profiles。

Q7:如何跨多個 AWS 帳號部署 CodePipeline?

將 pipeline 放在專屬的 pipeline 帳號(通常是 Deployments 帳號)。以客戶自管 KMS key 加密工件 S3 bucket,key policy 授予每個目標帳號的角色 kms:Decrypt 和 kms:GenerateDataKey;同時確保 S3 bucket policy 允許目標帳號角色的 s3:GetObject*。在每個目標帳號建立一個 CloudFormation 部署角色,信任 pipeline 的 CodePipeline 服務角色(信任政策使用 aws:PrincipalArn 或 sts:ExternalId 條件)。在 pipeline 中,動作的 RoleArn 指定要承擔的跨帳號角色,CloudFormation deploy 動作也指定一個獨立的 DeploymentRoleArn,即 CloudFormation 自身承擔以佈建資源的角色。在嘗試完整部署前,先用最小化的「list-stacks」動作測試信任鏈。如果你想自動生成這些串接,使用 CDK Pipelines。

Q8:如何大規模偵測並自動補救 CloudFormation drift?

結合三種機制。(1) 每個 stack set 或 stack 的 CloudFormation drift detection,透過 EventBridge 每 N 小時排程一次(DetectStackDrift 或 DetectStackSetDrift API)。(2) AWS Config 規則 cloudformation-stack-drift-detection-check 作為偵測控制,記錄 drifted stacks 的不合規。(3) EventBridge 規則匹配 CloudFormation drift detection 完成事件,將 drifted-stack 事件路由至 SNS topic(通知資安維運人員)或 Systems Manager Automation runbook(自動補救)。對於已知安全的 drift 類別(例如新增安全群組規則),runbook 可重新套用 CloudFormation 範本。對於未知 drift,通知人員並凍結 stack 直到調查完成。在 Pro 規模,另外在 root 層級附加 SCP 拒絕對標籤標識的基準資源進行手動編輯,從源頭防止 drift。搭配 Control Tower landing-zone 層級的 drift detection 以獲得完整覆蓋。

Q9:CDK Pipelines 和 CodePipeline 有什麼差異?

CodePipeline 是底層的 AWS 服務——由包含動作的階段組成的線性工作流程。你以 CloudFormation、CDK、SAM 或主控台撰寫 pipeline 定義,AWS 執行它。CDK Pipelines(aws-cdk-lib.pipelines)是更高層級的 CDK construct 程式庫,從你的 CDK 應用程式碼生成 CodePipeline。標誌性功能是自我變更:當你在 CDK 程式碼中新增階段或環境,pipeline 的第一個動作會重建自身以包含新階段。CDK Pipelines 也自動處理跨帳號 CDK bootstrap role 串接,以最佳實踐預設設定工件加密,並自然整合 CDK 應用程式的 stages(dev/staging/prod 作為 CDK stages,各自針對不同的環境)。對於 SAP-C02「帶有多環境晉升且維護工作最少的 pipeline」的答案,如果你已在 CDK 中,CDK Pipelines 是原生選擇。

Q10:SAR(Serverless Application Repository)如何融入多團隊組織?

平台團隊將一個可重複使用的無伺服器模式(比如「標準事件驅動 Lambda,帶有 DLQ、結構化日誌、X-Ray 追蹤和 CloudWatch dashboard」)打包為 SAM 應用程式,並發布到 SAR。發布範圍可以是帳號私有、共享給特定 AWS 帳號、共享給 AWS 組織,或公開。消費團隊在自己的帳號中,以單一 AWS::Serverless::Application 資源(參照 SAR 應用程式 ARN 和版本)部署 SAR app——SAR 在消費者帳號中合成一個巢狀 CloudFormation stack。優點:可重複使用模式的單一真相來源、帶有消費者明確選擇更新的語意化版本控制,以及 SAM 風格的參數傳遞以供自訂。SAR 補充(而非取代)AWS Service Catalog:SAR 是無伺服器特定的,以 SAM 慣例自助服務;Service Catalog 是通用 CloudFormation 包裝在治理中(launch constraints、TagOptions、portfolio 共享),也適合非無伺服器架構。

延伸閱讀

官方資料來源

更多 SAP-C02 主題