選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

CloudFormation 範本Conditions語法

焦點模式
CloudFormation 範本Conditions語法 - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

篩選條件查看

選用的 Conditions 區段包含陳述式來定義在哪些情況下建立或設定實體。例如,您可以建立條件,然後將其與資源或輸出建立關聯,以便 CloudFormation 僅在條件為 true 時建立資源或輸出。同樣地,您可以將條件與 屬性建立關聯,以便 CloudFormation 只有在條件為 true 時,才會將屬性設定為特定值。如果條件為 false,CloudFormation 會將 屬性設定為您指定的不同值。

當您想要重複使用範本以在不同的內容中建立資源時 (例如測試環境與生產環境),可以使用條件。在範本中,您可以新增 EnvironmentType 輸入參數,此參數接受 prodtest 作為輸入。在生產環境中,您可以讓 Amazon EC2 執行個體包含特定功能;不過,在測試環境中,就要使用精簡的功能來節省資金。使用條件,即可針對每種環境類型定義要建立哪些資源和其設定方式。

條件的評估是根據預先定義的虛擬參數,或您在建立或更新堆疊時指定的輸入參數值。在每個條件中,您可以參考另一個條件、參數值或映射。定義所有條件之後,即可將它們與範本之 ResourcesOutputs 區段中的資源及資源屬性建立關聯。

在堆疊建立或堆疊更新時, 會在建立任何資源之前 AWS CloudFormation 評估範本中的所有條件。會建立與 true 條件相關聯的資源。與 false 條件相關聯的資源會被忽略。CloudFormation 也會在每次堆疊更新時重新評估這些條件,然後再更新任何資源。會更新仍與 true 條件相關聯的資源。會刪除現在與 false 條件相關聯的資源。

重要

在更新堆疊期間,您無法自行更新條件。唯有涵蓋新增、修改或刪除資源等變更作業時,才能更新條件。

如何使用條件

根據您要依條件建立或設定的實體而定,您必須在以下範本區段中包含陳述式:

Parameters 區段

定義您要讓條件評估的輸入。條件會根據這些輸入參數的值而評估為 true 或 false。如果您希望您的條件評估虛擬參數,您不需要在本節中定義虛擬參數;虛擬參數是由 CloudFormation 預先定義。如需這些虛擬參數的詳細資訊,請參閱虛擬參數參考

Conditions 區段

使用內建條件函數來定義條件。這些條件決定 CloudFormation 何時建立相關聯的資源。如需範例,請參閱範本範例

ResourcesOutputs 區段

將條件與您想要有條件建立的資源或輸出建立關聯。CloudFormation 會建立與 true 條件相關聯的實體,並忽略與 false 條件相關聯的實體。使用 Condition 索引鍵,以及要將其與資源或輸出建立關聯的條件邏輯 ID。若要有條件地指定屬性,請使用 Fn::If 函數。如需範例,請參閱關聯條件

語法

Conditions 區段由索引鍵名稱 Conditions 組成。每個條件宣告都會包含在您建立或更新堆疊時所評估的邏輯 ID 和內部函數。下列虛擬範本概述 Conditions 區段:

JSON

"Conditions" : { "ConditionLogicalID" : {Intrinsic function} }

YAML

Conditions: ConditionLogicalID: Intrinsic function

條件內部函數

您可以使用下列內部函數來定義條件:

  • Fn::And

  • Fn::Equals

  • Fn::ForEach

  • Fn::If

  • Fn::Not

  • Fn::Or

如需每個條件函數的語法和資訊,請參閱條件函數。如需 的語法和資訊Fn::ForEach,請參閱 Fn::ForEach

注意

只有在範本的 Resources 區段和 Outputs 區段的中繼資料屬性、更新政策屬性和屬性值中,才支援 Fn::If

範例

簡單條件

下列範例範本包含 EnvType 輸入參數,您可以在其中指定 prod 以建立生產用的堆疊,或指定 test 以建立測試用的堆疊。對於生產環境,CloudFormation 會建立 Amazon EC2 執行個體,並將磁碟區連接至執行個體。對於測試環境,CloudFormation 只會建立 Amazon EC2 執行個體。

如果 CreateProdResources 參數等於 true,則 EnvType 條件會評估為 prod。在範例範本中,NewVolumeMountPoint 資源會與 CreateProdResources 條件建立關聯。因此,只有在 EnvType 參數等於 prod 時,才會建立資源。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type.", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test." } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "CreateProdResources", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "CreateProdResources", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test. Conditions: CreateProdResources: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 MountPoint: Type: 'AWS::EC2::VolumeAttachment' Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: 'AWS::EC2::Volume' Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone

巢狀條件

下列範例範本會參考另一個條件中的條件。您可以建立一個會建立 S3 儲存貯體的堆疊。對於在生產環境中部署的堆疊,CloudFormation 會為 S3 儲存貯體建立政策。

JSON
{ "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: 'AWS::S3::Bucket' Condition: CreateBucket Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...

在本頁面

下一個主題:

Transform

上一個主題:

規則函數
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。