本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用巨集處理範本有兩個主要步驟:建立巨集本身,然後使用巨集在您的範本上執行處理。
若要建立巨集定義,您必須建立下列項目:
-
執行範本處理的 Lambda 函數。此 Lambda 函數接受程式碼片段或整個範本,以及您定義的任何其他參數。它會傳回已處理的範本程式碼片段或整個範本作為回應。
-
類型 的資源AWS::CloudFormation::Macro,可讓使用者從 CloudFormation 範本內呼叫 Lambda 函數。此資源指定針對此巨集叫用的 Lambda 函數的 ARN,以及可協助除錯的其他選用屬性。若要在帳戶中建立此資源,請撰寫包含
AWS::CloudFormation::Macro
資源的範本,然後建立具有自管許可的堆疊或堆疊集。 AWS CloudFormation StackSets 目前不支援使用參考巨集的範本的服務受管許可來建立或更新堆疊集。
若要使用巨集,請在範本中參考巨集:
-
若要處理範本的區段或部分,請參照相對於您要轉換之範本內容,位於
Fn::Transform
函數中的巨集。當您使用Fn::Transform
時,您也可以傳遞它需要的任何指定參數。 -
若要處理整個範本,請在範本的 Transform 區段中參考巨集。
接著,您通常會建立變更集,然後加以執行。(處理巨集可以新增您可能不知道的多個資源。 為了確保您知道巨集引入的所有變更,強烈建議您使用變更集。) CloudFormation 會將指定的範本內容以及任何其他指定的參數,傳遞至巨集資源中指定的 Lambda 函數。Lambda 函數會傳回已處理的範本內容,不論是程式碼片段或整個範本。
呼叫範本中的所有巨集後,CloudFormation 會產生包含已處理範本內容的變更集。檢閱變更集之後,請執行它來套用變更。

如何直接建立堆疊
若要使用參考巨集的範本來建立或更新堆疊,您通常會建立變更集,然後執行它。變更集說明 CloudFormation 將根據處理過的範本所採取的動作。處理巨集可能會新增您不了解的多個資源。為了確保您知道巨集所產生的所有變更,我們強烈建議您使用變更集。檢閱變更集之後,您可以執行它來確實套用變更。
巨集可以將 IAM 資源新增至您的範本。對於這些資源,CloudFormation 會要求您確認其功能。由於 CloudFormation 在處理範本之前無法知道要新增哪些資源,因此您可能需要在建立變更集時確認 IAM 功能,取決於參考的巨集是否包含 IAM 資源。如此一來,當您執行變更集時,CloudFormation 具備建立 IAM 資源的必要功能。
若要直接從已處理的範本建立或更新堆疊,而不先檢閱變更集中提議的變更,請在 CreateStack
或 UpdateStack
請求期間指定 CAPABILITY_AUTO_EXPAND
功能。如果您知道巨集執行哪些處理,您應只直接透過包含巨集的堆疊範本來建立堆疊。您不能將變更集與堆疊集巨集一起使用;您必須直接更新堆疊集。
如需詳細資訊,請參閱 AWS CloudFormation API 參考UpdateStack中的 CreateStack或 。
重要
如果您的堆疊集範本參考了一或多個巨集,您必須直接從處理的範本建立堆疊集,而不必先檢視變更集中產生的變更。處理巨集可能會新增您不了解的多個資源。從直接參考巨集的範本建立或更新堆疊集之前,請確定您知道巨集會執行哪些處理操作。
若要減少從參考巨集的範本啟動堆疊的步驟數目,您可以使用 package
和 deploy
AWS CLI 命令。如需詳細資訊,請參閱 使用 將本機成品上傳至 S3 儲存貯體 AWS CLI 和 建立包含轉換的堆疊。
考量事項
使用巨集時,請記住下列備註和限制:
-
只有在 Lambda 可用 AWS 區域 的情況下,才支援巨集。如需可使用 Lambda 的區域清單,請參閱 AWS Lambda 端點與配額。
-
任何處理的範本程式碼片段都必須是有效的 JSON。
-
任何處理的範本程式碼片段都必須通過建立堆疊、更新堆疊、建立堆疊集或更新堆疊集操作的驗證檢查。
-
CloudFormation 會先解析巨集,然後處理範本。產生的範本必須是有效的 JSON,且不能超過範本大小上限。
-
由於 CloudFormation 處理範本中元素的順序,巨集無法將模組包含在傳回至 CloudFormation 的處理範本內容中。如需詳細資訊,請參閱巨集評估順序。
-
使用更新復原功能時,CloudFormation 會使用原始範本的副本。即使加入的程式碼片段有所變更,它也會復原至原始範本。
-
將巨集包含在巨集內無法運作,因為我們不以遞迴方式處理巨集。
-
巨集內目前不支援
Fn::ImportValue
內部函數。 -
範本包含的內部函數是在任何巨集之後評估。因此,巨集傳回的已處理範本內容可能包含內部函數的呼叫,一樣照常評估。
-
StackSets 目前不支援使用參考 CloudFormation 巨集之範本的服務管理許可來建立或更新堆疊集。
巨集帳戶範圍和許可
巨集只能在它們已建立為資源的帳戶中使用。巨集的名稱在給定帳戶內必須是唯一的。不過,您可以在基礎 Lambda 函數上啟用跨帳戶存取,然後建立巨集定義在多個帳戶中參考該函數,就能讓多個帳戶使用相同的功能。在下列範例中,三個帳戶包含巨集定義,各指向相同的 Lambda 函數。

為了建立巨集定義,使用者必須有許可,才能在指定的帳戶內建立堆疊或堆疊集。
若要讓 CloudFormation 成功執行範本中包含的巨集,使用者必須具有基礎 Lambda 函數的Invoke
許可。為了防止權限可能提升,CloudFormation 會在執行巨集時模擬使用者。
如需詳細資訊,請參閱《 AWS Lambda 開發人員指南》中的在 中管理許可 AWS Lambda,以及》服務授權參考》中的 的動作、資源和條件索引鍵 AWS Lambda。