如何從 AWS CloudFormation 範本參照另一個堆疊中的資源?

1 分的閱讀內容
0

我想在建立範本時參照另一個 AWS CloudFormation 堆疊中的資源。

簡短說明

以下的解決方法提供建立跨堆疊參考的一種方法範例。如需其他指示,請參閱逐步解說: 參照另一個 AWS CloudFormation 堆疊中的資源輸出

**注意:**若要參照另一個 AWS CloudFormation 堆疊中的資源,您必須先建立跨堆疊參照。若要建立跨堆疊參照,請使用輸出欄位來標記要匯出的資源輸出值。然後,使用 Fn::ImportValue 內建函數將值匯入相同 AWS 區域和帳戶內的任何堆疊中。AWS CloudFormation 會依範本中指定的名稱來識別匯出的值。這些名稱在您的 AWS 區域和帳戶中必須是唯一的。

解決方法

下列步驟說明如何建立名為 NetworkStack的 AWS CloudFormation 堆疊。此堆疊會建立與網路相關的資源,以及名為 ${AWS::StackName}-SecurityGroupID${AWS::StackName}-SubnetID的匯出。建立堆疊後,NetworkStack 會取代 ${AWS::StackName}。最終匯出名稱是 NetworkStack-SecurityGroupIDNetworkStack-SubnetID

建立一個堆疊以匯出輸出值

1.    使用此範本建立 AWS CloudFormation 堆疊

2.    將該堆疊命名為 NetworkStack

**注意:**NetworkStack 會匯出子網路和安全群組值。

使用匯入的子網路和安全群組來建立 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體

1.    開啟 AWS CloudFormation 主控台

2.    選擇建立堆疊,然後選擇設計範本

3.    在程式碼編輯器的參數索引標籤中,選擇範本

4.    複製下列範本並貼到程式碼編輯器中,然後使用適當的 InstanceTypeImageId值來更新範本:

{
  "Parameters": {
    "NetworkStackParameter": {
      "Type": "String"
    }
  },
  "Resources": {
    "WebServerInstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "InstanceType": "t2.micro",
        "ImageId": "ami-a1b23456",
        "NetworkInterfaces": [
          {
            "GroupSet": [
              {
                "Fn::ImportValue": {
                  "Fn::Sub": "${NetworkStackParameter}-SecurityGroupID"
                }
              }
            ],
            "AssociatePublicIpAddress": "true",
            "DeviceIndex": "0",
            "DeleteOnTermination": "true",
            "SubnetId": {
              "Fn::ImportValue": {
                "Fn::Sub": "${NetworkStackParameter}-SubnetID"
              }
            }
          }
        ]
      }
    }
  }
}

**重要事項:**在步驟 4 的範本中,使用 NetworkStack 資源堆疊做為 NetworkStackParameter 的值。NetworkStack 值會取代對應的 Fn::ImportValue 函數中正確的堆疊名稱。

**注意:**如需匯入和匯出範本的範例,請參閱 Fn::ImportValue

5.    選擇建立堆疊圖示,然後選擇下一步

6.    在堆疊名稱中,輸入堆疊的名稱。

7.    在參數中,輸入您要相互參照的網路堆疊名稱 (NetworkStack)。

8.    選擇下一步,再選擇下一步,然後選擇建立

9.    堆疊建立完成後,請開啟 Amazon EC2 主控台

10.    在瀏覽窗格中,選擇執行個體,然後選擇您在步驟 4 中使用範本建立的執行個體。

11.    選擇描述檢視畫面,然後確認已設定安全群組和子網路。

**重要事項:**當另一個堆疊正在匯入這些值時,您無法刪除來源堆疊或來源堆疊的匯出值。若要更新來源堆疊的匯出值,請先手動取代堆疊中正在匯入來源堆疊匯出值的實際值。然後,您可以更新來源堆疊的匯出值。

若要列出正在匯入匯出輸出值的所有堆疊,請執行 list-imports 命令。若要列出 AWS 區域中的所有匯出,請使用 AWS CloudFormation 主控台或執行 list-exports 命令。每個 AWS 區域帳戶的匯出名稱必須是唯一的。

相關資訊

如何使用 AWS Systems Manager Parameter Store 中的參數,在 CloudFormation 堆疊之間共用值?

AWS CloudFormation 範本

AWS::EC2::Instance

AWS 官方
AWS 官方已更新 1 年前