使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

2 分的閱讀內容
0

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

解決方法

若要參照另一個 CloudFormation 堆疊中的資源,您必須先建立跨堆疊參照。以下的解決方法提供建立跨堆疊參考的一種方法範例。範例 NetworkStack 堆疊會建立 ${AWS::StackName}-SecurityGroupID${AWS::StackName}-SubnetID 網路相關資源並匯出。建立堆疊後,CloudFormation 將 ${AWS::StackName} 取代為 NetworkStack。最終匯出名稱是 NetworkStack-SecurityGroupIDNetworkStack-SubnetID

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

完成下列步驟:

  1. 建立 CloudFormation 堆疊,然後使用 SampleNetworkCrossStack 範本
    注意:您必須在範本的輸出區段中宣告匯出欄位。
  2. 將該堆疊命名為 NetworkStack
    **注意:**NetworkStack 會匯出子網路和安全群組值。

使用匯入的子網路和安全群組建立 Amazon EC2 執行個體

Amazon Elastic Compute Cloud (Amazon EC2) 執行個體屬性,例如 SubnetIdSecurityGroupId,會使用匯出堆疊中的值。若要匯入值,請使用 Fn::ImportValue 內建函數。

**注意:**匯入和匯出堆疊必須位於相同的 AWS 區域和 AWS 帳戶中。此外,匯出的值名稱對您的區域和帳戶必須是唯一的。

若要建立 EC2 執行個體,請先完成下列步驟:

  1. 開啟 CloudFormation 主控台
  2. 選擇建立堆疊,然後選擇設計範本
  3. 選擇程式碼編輯器的參數標籤,然後選擇範本
  4. 若要使用匯出堆疊中的值來建立執行個體,請在程式碼編輯器中輸入下列範本:
    **重要:**將 NetworkStack 資源堆疊設定為 NetworkStackParameter 的值。NetworkStack 值會取代對應的 Fn::ImportValue 函數中正確的堆疊名稱。
    {  "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"
                  }
                }
              }
            ]
          }
        }
      }
    }
    注意:t2.micro 取代為您的執行個體類型,並將 ami-a1b23456 取代為您的 Amazon Machine Image (AMI) ID。
  5. 選擇建立堆疊 (帶向上箭頭的雲圖示),然後選擇下一步
  6. 對於堆疊名稱,輸入堆疊的名稱。
  7. 對於參數,輸入您要相互參照的網路堆疊名稱,例如 NetworkStack
  8. 選擇下一步,然後再次選擇下一步
  9. 選擇建立
  10. 堆疊狀態變更為 CREATE_COMPLETE 後,開啟 Amazon EC2 主控台
  11. 在導覽窗格中,選擇執行個體,然後選取您建立的執行個體。
  12. 選擇描述標籤,然後確認已設定安全群組和子網路。

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

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

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請參閱AWS CLI 錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

相關資訊

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

AWS CloudFormation 範本

AWS::EC2::Instance

參照另一個 CloudFormation 堆疊中的資源輸出

AWS 官方
AWS 官方已更新 2 個月前