範本概觀 - AWS CloudFormation

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

範本概觀

本主題提供範本關鍵部分及其使用方式的簡介。

您可以使用此頁面中的段落來瞭解下列有關範本的資訊:

  • 宣告資源及其屬性。

  • 使用函數引用其他資源的Ref函數和資源屬性。Fn::GetAtt

  • 使用參數在堆疊建立時指定值,並使用約束來驗證參數輸入。

  • 使用映射判斷條件值。

  • 使用Fn::Join函數根據參數、資源屬性和其他字串建構值。

  • 使用輸出值來擷取堆疊資源的相關資訊。

關於範本

CloudFormation 模板是構成堆棧的 AWS 資源的聲明。範本是使用 JavaScript物件標記法 (JSON) 或 YAML 標準遵循特定格式規則的文字檔案。由於範本是文字檔案,因此您可以在任何文字編輯器中建立和編輯它們,並使用其餘的原始程式碼在原始檔控制系統中管理它們。

在範本中,您要宣告您要建立的 AWS 資源。您可以使用所選格式的語法規則 (JSON 或 YAML),將每個資源定義為一組屬性和值。

模板有不同的部分,但唯一需要的部分是Resources部分,它必須聲明至少一個資源。

如需展示範本完整結構及所有可用區段的範例,請參閱〈〉範本格式。如需可使用建立的資源清單 CloudFormation,請參閱AWS 資源和屬性類型參考

資源:Hello Bucket!

Resources區段是您要建立的資源清單。每個資源都必須有一個Type屬性,該屬性定義了 AWS 資源的類型。Type 屬性有特殊的格式:

AWS::ProductIdentifier::ResourceType

例如,Amazon S3 儲存貯體的資源類型為AWS::S3::Bucket

我們來看看基本範本。下列範本宣告AWS::S3::Bucket:具有名稱HelloBucket之類型的單一資源。

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket" } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket'

如果您使用此範本建立堆疊, CloudFormation 將會建立 Amazon S3 儲存貯體。建立值區非常簡單,因為 CloudFormation 可以使用預設設定建立值區。對於其他資源 (例如 Amazon EC2 執行個體或 Auto Scaling 群組) CloudFormation 需要更多資訊。資源宣告使用 Properties 屬性指定建立資源所用的資訊。

根據資源類型而定,某些屬性是必需的,例如AWS::EC2::Instance資源的ImageId屬性,其他屬性是可選的。某些屬性具有預設值 (例如AWS::S3::Bucket資源的AccessControl屬性),因此指定這些屬性的值是選擇性的。有些屬性不是必要的,但可以新增您想要的功能,例如 AWS::S3::Bucket 資源的 WebsiteConfiguration 屬性。指定這類屬性的值完全是選擇性的,視您的需求而定。在上述範例中,因為 AWS::S3::Bucket 資源只有選用的屬性,且我們不需要任何選用功能,所以我們可以接受預設值並忽略 Properties (屬性) 屬性。

若要檢視每個資源類型的屬性,請參閱 AWS 資源和屬性類型參考中的主題。

資源屬性和配合使用資源

資源的屬性通常只是一個字串值。例如,下列範本會為值區的AccessControl屬性指定固定 ACL (PublicRead)。

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead" } } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead

有些資源可有多個屬性,有些屬性可有一或多個子屬性。例如,資AWS::S3::Bucket源具有兩個屬性:AccessControlWebsiteConfiguration。該屬WebsiteConfiguration性有兩個子屬性:IndexDocumentErrorDocument。以下範本顯示我們有其他屬性的原始儲存貯體資源。

JSON

{ "Resources": { "HelloBucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead", "WebsiteConfiguration": { "IndexDocument": "index.html", "ErrorDocument": "error.html" } } } } }

YAML

Resources: HelloBucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: PublicRead WebsiteConfiguration: IndexDocument: index.html ErrorDocument: error.html

範本最大的優點之一, CloudFormation 就是能夠建立一組共同運作以建立應用程式或解決方案的資源。範本內用於資源的名稱是邏輯名稱。 CloudFormation 建立資源時,會根據邏輯名稱、堆疊名稱和唯一 ID 的組合產生實體名稱。

您可能想知道如何在以另一個資源名稱或屬性為基礎的資源上設定屬性。例如,您可以建立由 S3 儲存貯體或使用 EC2 安全群組的 EC2 執行個體支援的 CloudFront 分發,而且所有這些資源都可以在相同的範本中建立。 CloudFormation 具有許多內在函數,您可以使用它們來引用其他資源及其屬性。您可以使用Ref函數來參照資源的識別屬性。通常,這是資源的實體名稱;不過,有時它可以是識別碼,例如AWS::EC2::EIP資源的 IP 位址或 Amazon Amazon SNS 主題的 Amazon 資源名稱 (ARN)。如需Ref函數傳回的值清單,請參閱 Ref 函數。下列範本包含AWS::EC2::Instance資源。資源的SecurityGroups屬性調用Ref函數來引用資AWS::EC2::SecurityGroupInstanceSecurityGroup

JSON

{ "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" } ], "KeyName": "mykey", "ImageId": "" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } } } }

YAML

Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: SecurityGroups: - !Ref InstanceSecurityGroup KeyName: mykey ImageId: '' InstanceSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0

SecurityGroups屬性是安全組的列表,在前面的例子中,我們在列表中只有一個項目。下列範本在SecurityGroups屬性清單中具有其他項目。

JSON

{ "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ], "KeyName": "mykey", "ImageId": "ami-7a11e213" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } } } }

YAML

Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: SecurityGroups: - !Ref InstanceSecurityGroup - MyExistingSecurityGroup KeyName: mykey ImageId: ami-7a11e213 InstanceSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0

MyExistingSecurityGroup是指現有 EC2 安全群組的字串,而不是範本中宣告的安全群組。您可以使用常值字串來參考現有 AWS 資源。

在上面的範例中,的KeyName屬性AWS::EC2::Instance是常值字串mykey。這表示名稱為 mykey 的金鑰對必須存在於建立堆疊的區域中,否則堆疊建立會因為金鑰對不存在而失敗。您使用的 key pair 可能會隨您建立堆疊的區域而有所不同,或者您可能想要與其他人共用範本,以便他們可以搭配使用該範本 AWS 帳戶。若是如此,您可以使用輸入參數,以便在建立堆疊時指定金鑰對名稱。該Ref函數可以參考在堆棧創建時指定的輸入參數。下面的模板添加了一個包含KeyName參數的Parameters部分,該參數用於指定AWS::EC2::Instance資源的KeyName屬性。參數類型是 AWS::EC2::KeyPair::KeyName,可確保使用者在其帳戶及建立堆疊的區域中指定有效的金鑰對名稱。

JSON

{ "Parameters": { "KeyName": { "Description": "The EC2 Key Pair to allow SSH access to the instance", "Type": "AWS::EC2::KeyPair::KeyName" } }, "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" }, "MyExistingSecurityGroup" ], "KeyName": { "Ref": "KeyName" }, "ImageId": "ami-7a11e213" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } } } }

YAML

Parameters: KeyName: Description: The EC2 Key Pair to allow SSH access to the instance Type: 'AWS::EC2::KeyPair::KeyName' Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: SecurityGroups: - !Ref InstanceSecurityGroup - MyExistingSecurityGroup KeyName: !Ref KeyName ImageId: ami-7a11e213 InstanceSecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0

如果資源的參數或傳回的值正是您想要的,則此Ref函數非常方便;不過,您可能需要資源的其他屬性。例如,如果您想要使用 S3 來源建立 CloudFront 分發,則需要使用 DNS 樣式的位址來指定儲存貯體位置。多項有其他屬性的資源,其值可用於範本中。若要取得這些屬性,請使用 Fn:: GetAtt 函式。下列範本會建立 CloudFront 散發資源,該資源使用Fn::GetAtt函數取得儲存貯體DomainName屬性來指定 S3 儲存貯體資源的 DNS 名稱。

JSON

{ "Resources": { "myBucket": { "Type": "AWS::S3::Bucket" }, "myDistribution": { "Type": "AWS::CloudFront::Distribution", "Properties": { "DistributionConfig": { "Origins": [ { "DomainName": { "Fn::GetAtt": [ "myBucket", "DomainName" ] }, "Id": "myS3Origin", "S3OriginConfig": {} } ], "Enabled": "true", "DefaultCacheBehavior": { "TargetOriginId": "myS3Origin", "ForwardedValues": { "QueryString": "false" }, "ViewerProtocolPolicy": "allow-all" } } } } } }

YAML

Resources: myBucket: Type: 'AWS::S3::Bucket' myDistribution: Type: 'AWS::CloudFront::Distribution' Properties: DistributionConfig: Origins: - DomainName: !GetAtt - myBucket - DomainName Id: myS3Origin S3OriginConfig: {} Enabled: 'true' DefaultCacheBehavior: TargetOriginId: myS3Origin ForwardedValues: QueryString: 'false' ViewerProtocolPolicy: allow-all

Fn::GetAtt函數有兩個參數,資源的邏輯名稱和要檢索的屬性的名稱。如需資源可用屬性的完整清單,請參閱 Fn:: GetAtt。您會注意到該Fn::GetAtt函數在數組中列出了它的兩個參數。對於需要多個參數的函數,您使用陣列指定它們的參數。

使用輸入參數接收使用者輸入

到目前為止,您已了解資源以及如何在範本中運用的一些內容。您已了解如何參考輸入參數,但對於如何定義輸入參數本身,我們尚未深入了解。讓我們來看看參數宣告以及如何限制與驗證使用者輸入。

您可以在範本的Parameters區段中宣告參數。參數包含定義其值的屬性清單以及針對其值的限制條件。唯一必要的屬性是Type,可以是StringNumber、或 AWS特定類型。您也可以新增描述您應該指定哪種值的Description屬性。當您在「建立堆疊」精靈中使用樣板時,參數的名稱和說明會顯示在「指定參數」頁面中。

下列範本片段是宣告 Parameters指定參數」頁面中使用之參數的區段。

JSON

"Parameters": { "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access into the WordPress web server", "Type": "AWS::EC2::KeyPair::KeyName" }, "WordPressUser": { "Default": "admin", "NoEcho": "true", "Description" : "The WordPress database admin account user name", "Type": "String", "MinLength": "1", "MaxLength": "16", "AllowedPattern" : "[a-zA-Z][a-zA-Z0-9]*" }, "WebServerPort": { "Default": "8888", "Description" : "TCP/IP port for the WordPress web server", "Type": "Number", "MinValue": "1", "MaxValue": "65535" } }

YAML

Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access into the WordPress web server Type: AWS::EC2::KeyPair::KeyName WordPressUser: Default: admin NoEcho: true Description: The WordPress database admin account user name Type: String MinLength: 1 MaxLength: 16 AllowedPattern: "[a-zA-Z][a-zA-Z0-9]*" WebServerPort: Default: 8888 Description: TCP/IP port for the WordPress web server Type: Number MinValue: 1 MaxValue: 65535

對於具有預設值的參數,除非 CloudFormation 使用者指定其他值,否則會使用預設值。如果您略過預設的屬性,則使用者必須為該參數指定一個值;不過,要求使用者輸入值不確保該值有效。若要驗證參數的值,您可以宣告條件約束或指定 AWS特定參數類型。

您要通知 KeyName 參數沒有 Default 屬性,但其他參數有。例如,WordPressUser 參數有屬性 Default: admin,但 KeyName 參數什麼都沒有。使用者必須在堆疊建立時指定金鑰名稱值。如果他們不這樣做,則 CloudFormation 無法創建堆棧並拋出異常:

Parameters: [KeyName] must have values

對於 AWS特定的參數類型,在創建任何堆棧資源之前,根據用戶 AWS 帳戶 和他們創建堆棧的區域中的現有值 CloudFormation 驗證輸入值。在範例樣板中,KeyName參數是的 AWS特定參數類型AWS::EC2::KeyPair::KeyName。 CloudFormation 在建立堆疊之前,檢查使用者是否指定了有效的 EC2 key pair 名稱。 AWS特定參數類型的另一個範例是AWS::EC2::VPC::Id,要求使用者指定有效的 VPC ID。除了前期驗證之外,當使用者使用「建立堆疊」精靈時, AWS 主控台還會顯示 AWS特定參數類型的有效值的下拉式清單,例如有效的 EC2 key pair 名稱或 VPC ID。

String 類型可以使用下列屬性宣告限制條件:MinLengthMaxLengthDefaultAllowedValuesAllowedPattern。在上述範例中,WordPressUser 參數有三項限制條件:參數值長度必須介於 1 到 16 個字元之間 (MinLengthMaxLength),而且必須以字母開頭,後面加上任意組合的字母和數字 (AllowedPattern)。

Number 類型可以宣告下列限制條件:MinValueMaxValueDefaultAllowedValues。數值可以是整數或浮點值。在上述範例中,WebServerPort 參數必須是介於 1 和 65535 (含) 之間的數值 (MinValueMaxValue)。

本章節前文中曾提及,參數是指定您需要使用但不想內嵌在範本本身中之敏感或實作專屬資料 (例如密碼或使用者名稱) 的最好方法。如果將NoEcho屬性設定為true,則會針對描述堆疊或堆疊事件的任何呼叫 CloudFormation 傳回遮罩為星號 (*****) 的參數值,但儲存在以下指定位置的資訊除外。在上述範例中,檢視堆疊設定的任何人都看不到 WordPressUser 參數值,參數值會傳回為星號。

重要

使用 NoEcho 屬性不會遮罩任何儲存在下列資訊中的資訊:

  • Metadata板部分。 CloudFormation 不會轉換、修改或密文Metadata章節中包含的任何資訊。如需詳細資訊,請參閱 中繼資料

  • Outputs 範本區段。如需詳細資訊,請參閱 輸出

  • 資源定義的 Metadata 屬性。如需詳細資訊,請參閱 Metadata 屬性

我們強烈建議您不要使用這些機制來包含敏感資訊,例如密碼或秘密。

重要

我們建議您使用堆疊 CloudFormation 範本中的動態參數來參照儲存和管理之外的敏感資訊 (例如 CloudFormation,在 Par AWS Systems Manager ameter Store 或) 中,而不是直接將敏感資訊嵌入範本中 AWS Secrets Manager。

如需詳細資訊,請參閱最請勿在您的範本中內嵌憑證佳做法。

使用映射指定條件值

參數是讓使用者指定唯一或敏感的值以供堆疊資源屬性使用的絕佳方式,不過,有些設定與區域相依,或對使用者而言因為其他條件或相依性而略微複雜難解。在這些情況下,您可能要在範本本身中放入一些邏輯,讓使用者可以指定簡單的值 (或完全不指定),以取得他們希望的結果。在先前的範例中,我們針對 EC2 執行個體的ImageId屬性硬式編碼 AMI ID。這在美國東部區域運作正常,該區域代表我們需要的 AMI。不過,如果使用者嘗試在不同的區域中建置堆疊,他們就會收到錯誤的 AMI 或完全沒有 AMI。(AMI ID 對區域而言是唯一的,所以不同區域中之相同 AMI ID 可能不代表任何 AMI 或為截然不同的 AMI。)

為避免此問題,您需要一個方法,根據條件輸入指定正確的 AMI ID (在本範例中為建立堆疊的區域)。有兩個模板功能可以提供幫助,Mappings部分和AWS::Region偽參數。

AWS::Region偽參數是 CloudFormation 解析為堆疊建立所在區域的值。當您建立堆疊 CloudFormation 時,會解析虛擬參數。映射可讓您使用輸入值作為決定另一個值的條件。類似參數陳述式,映射會建立一組值與另一組值的關聯。配合映射使用 AWS::Region 參數,可確保指定適當的區域 AMI ID。下列範本包含一個區Mappings段,其中包含名為RegionMap的對應,可用來將 AMI ID 對應至適當的區域。

JSON

{ "Parameters": { "KeyName": { "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type": "String" } }, "Mappings": { "RegionMap": { "us-east-1": { "AMI": "ami-76f0061f" }, "us-west-1": { "AMI": "ami-655a0a20" }, "eu-west-1": { "AMI": "ami-7fd4e10b" }, "ap-southeast-1": { "AMI": "ami-72621c20" }, "ap-northeast-1": { "AMI": "ami-8e08a38f" } } }, "Resources": { "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "AMI" ] }, "UserData": { "Fn::Base64": "80" } } } } }

YAML

Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance Type: String Mappings: RegionMap: us-east-1: AMI: ami-76f0061f us-west-1: AMI: ami-655a0a20 eu-west-1: AMI: ami-7fd4e10b ap-southeast-1: AMI: ami-72621c20 ap-northeast-1: AMI: ami-8e08a38f Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: KeyName: !Ref KeyName ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - AMI UserData: !Base64 '80'

在中RegionMap,每個區域都對應至名稱-值配對。名稱/值對是一個標籤,也是要映射的值。在中RegionMap,AMI 是標籤,而 AMI 識別碼是值。要使用 map 返回值,請使用 Fn:: FindInMap 函數,傳遞映射的名稱,用於查找映射值的值以及要返回的映射值的標籤。在上面的例子中,資源的ImageId屬性Ec2Instance使用Fn::FindInMap函數通過指定RegionMap為要使用的映射來確定其值,AWS::Region作為要映射的輸入值,並使用 AMI 作為標籤來識別要映射到的值來確定其值。例如,如果使用此範本在美國西部 (加利佛尼亞北部) 區域建立堆疊,則ImageId會設定為ami-655a0a20

提示

AWS::Region 虛擬參數可讓您取得建立堆疊的區域。某些資源 (例如AWS::EC2::InstanceAWS::AutoScaling::AutoScalingGroupAWS::ElasticLoadBalancing::LoadBalancer、和) 具有指定可用區域的內容。您可以使用 Fn::GetAZs 函數取得某個區域的所有可用區域清單。

已建構的值和輸出值

參數和映射都是在堆疊建立時傳遞或判斷特定值的絕佳方式,但有時候,來自參數或其他資源屬性的值只是您所需值的一部分。例如,在下列 WordPress 範本片段中,Fn::Join函式會將WebServerPort參數與其他常值字串串連,以形成所需的值,以建構ElasticLoadBalancer資源HealthCheck屬性的Target子屬性。

JSON

{ "Resources": { "ElasticLoadBalancer": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": { "Fn::GetAZs": "" }, "Instances": [ { "Ref": "Ec2Instance1" }, { "Ref": "Ec2Instance2" } ], "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": { "Ref": "WebServerPort" }, "Protocol": "HTTP" } ], "HealthCheck": { "Target": { "Fn::Join": [ "", [ "HTTP:", { "Ref": "WebServerPort" }, "/" ] ] }, "HealthyThreshold": "3", "UnhealthyThreshold": "5", "Interval": "30", "Timeout": "5" } } } } }

YAML

Resources: ElasticLoadBalancer: Type: 'AWS::ElasticLoadBalancing::LoadBalancer' Properties: AvailabilityZones: !GetAZs '' Instances: - !Ref Ec2Instance1 - !Ref Ec2Instance2 Listeners: - LoadBalancerPort: '80' InstancePort: !Ref WebServerPort Protocol: HTTP HealthCheck: Target: !Join - '' - - 'HTTP:' - !Ref WebServerPort - / HealthyThreshold: '3' UnhealthyThreshold: '5' Interval: '30' Timeout: '5'

Fn::Join函數有兩個參數,一個分隔符號用於分隔要連接的值,以及您希望它們出現的順序的值數組。在上面的例子中,Fn::Join函數指定一個空字符串作為分隔符號和 HTTP:、WebServerPort參數的值和/字符作為要連接的值。如WebServerPort果值為 8888,則Target屬性會設定為下列值:

HTTP:8888/

如需 Fn::Join 函數的詳細資訊,請參閱「Fn::Join」。

Fn::Join函數對於聲明堆棧的輸出值也很有用。範本中的Outputs區段包含您要在堆疊建立後可用之值的宣告。輸出是擷取資源或輸入參數重要資訊的便捷方式。例如,我們可能會針對建立 WordPress 網站的範本宣告下列輸出。

JSON

{ "Outputs": { "InstallURL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ] }, "/wp-admin/install.php" ] ] }, "Description": "Installation URL of the WordPress website" }, "WebsiteURL": { "Value": { "Fn::Join": [ "", [ "http://", { "Fn::GetAtt": [ "ElasticLoadBalancer", "DNSName" ] } ] ] } } } }

YAML

Outputs: InstallURL: Value: !Join - '' - - 'http://' - !GetAtt - ElasticLoadBalancer - DNSName - /wp-admin/install.php Description: Installation URL of the WordPress website WebsiteURL: Value: !Join - '' - - 'http://' - !GetAtt - ElasticLoadBalancer - DNSName

每個輸出值都有一個名稱,一個Value屬性,其中包含作為輸出值返回的值的聲明,以及可選的值的描述。在前面的例子中,InstallURL是連接的Fn::Join函數調用返回的字符串http://,資源ElasticLoadBalancer的 DNS 名稱和。/wp-admin/install.php輸出值可能類似以下內容:

http://mywptests-elasticl-1gb51l6sl8y5v-206169572.aws-region.elb.amazonaws.com/wp-admin/install.php

建立堆疊後,我們可能會使用此連結前往我們建立的 WordPress 部落格的安裝頁面。 CloudFormation 在完成建立堆疊後產生輸出值。您可以在 CloudFormation 主控台的Outputs索引標籤中或使用 describe-stacks CLI 指令來檢視輸出值。

進一步了解

我們只演練了範本及其使用方式的基本部分。

我們沒有涵蓋範本中的兩個頂層區段:AWSTemplateFormatVersionDescription

AWSTemplateFormatVersion只是模板格式的版本。如果未指定, CloudFormation 將使用最新版本。如需詳細資訊,請參閱 格式版本

Description這是任何有效的 JSON 或 YAML 字串。此說明會顯示在「建立堆疊」精靈的「指定參數」頁面中。如需詳細資訊,請參閱 描述

當然,還有更多進階範本和堆疊功能。以下是幾個您會想要進一步了解的重要項目清單:

  • DependsOn— 使用此屬性可指定必須在另一個資源之後建立。

  • DeletionPolicy— 使用此屬性可指定 CloudFormation 應如何處理資源刪除。

  • Metadata— 使用此屬性可指定包含資源的結構化資料。