閱讀382 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Hello, 資源編排

資源編排通過一個JSON模板來定義您的需要創建的阿裏雲的資源組合,依據您的配置來完成您的資源配置,創建和一鍵銷毀,快速方便的構建您的應用。更多的信息您可以通過資源編排的幫助中心獲取。

目前資源編排正在公測期間,所以您需要首先申請下公測,我們會盡快通過,通過之後您就可以開始您的ROS之旅了。我們有一個技術支持的旺旺群,1496006086。在這裏您可以得到最及時的反饋。

今天為了在阿裏雲上創建一台ECS虛擬機,您需要首先創建一個安全組(Security Group),您可以通過ECS控製台來生成安全組的定義,您也可以通過資源編排來更加便利的實現。我們從一個安全組開始您的資源編排之旅。

創建一個安全組

創建一個安全組,首先我們需要定義一個JSON模板。從模板之中,我們看到這個模板有兩部分構成:

  • 一個是ROSTemplateFormatVersion版本號,目前的Stack都使用這個版本。
  • Resources部分定義創建的資源, 在這個裏麵我們定義一個資源叫SecurityGroup, 這裏的名字可以自己定義,每個Resource有兩個關鍵的屬性,
    • Type: 目前ROS支持的資源類型可以通過ROS控製台中的資源類型來查看。
    • Properties:每個資源類型,有哪些屬性是必填、選填、約束等等也可以在ROS控製台資源類型來查看。
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Resources": {
    "SecurityGroup": {
      "Properties": {},
      "Type": "ALIYUN::ECS::SecurityGroup"
    }
  }
}

我們將下麵的模板拷貝到ROS控製台中,選擇一個Region,然後提供一個模板名稱hello_ros, 點擊創建您就完成了自己的第一個Stack。

創建Stack的關鍵屬性

每個Stack有幾個關鍵的屬性,這些屬性是創建Stack的必要參數

  • 名稱: 不可修改的stack標示,1-64個字符,名稱不可重複。
  • 超時時間,公測期間的範圍為10-180分鍾
  • 失敗回滾,當整個堆棧沒有創建成功之後,如果這個選項設置為True,則開始啟動回滾操作,將會把創建的相關資源支持釋放的釋放掉
  • Region,當前堆棧支持在哪個region進行操作。

Stack的幾個重要的輸出構成:

  • 概覽:提供這個Stack的基本信息,例如創建時間狀態,返回的數據類型,這個模板在運行時的入參等等
  • 資源:Stack在創建的過程中生成的物理資源或者重要的關聯資源信息
  • 事件:每個資源在創建的時候都會有狀態,例如創建開始,創建完成,創建失敗,回滾開始,回滾完成,刪除開始,刪除完成。
  • 模板:創建模板是提供的Template

安全組創建進階

隻創建一個安全組的話,這個安全組默認是沒有配置安全組的出規則和入規則的話,使用這個安全組創建出的虛擬機是沒有辦法正常的和外部進行通訊,所以需要製定出人規則,可以通過一步步的在ECS控製台來實現,但是通過ROS來創建這個就非常的方便。

相比上麵的模板, 這次的模板多出了一個部分為Parameters, 這裏聲明了一個新的屬性定義了一個安全組的優先級,通過控製台中我們可以看到創建模板就會多一個參數需要填寫,有一個默認值1。更多的參數定義請參考幫助文檔。

Properties 中同樣多了更多的屬性,多了安全組的名稱、描述、以及出入規則的定義。關於安全組的更多屬性可以參考安全組資源定義

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "SecurityGroupPriority": {
      "Default": 1,
      "Description": "生成的安全組的優先級,優先級可選範圍為1-100,默認值為1,即最高優先級。",
      "Type": "Number",
      "MinValue": 1,
      "MaxValue": 100
    }
  },
  "Resources": {
    "DefaultSecurityGroup": {
      "Properties": {
        "Description": "生成經典網絡安全組默認開通外網的所有出網和入網訪問權限",
        "SecurityGroupEgress": [
          {
            "DestCidrIp": "0.0.0.0/0",
            "IpProtocol": "all",
            "NicType": "internet",
            "PortRange": "-1/-1",
            "Priority": {
              "Ref": "SecurityGroupPriority"
            }
          }
        ],
        "SecurityGroupIngress": [
          {
            "IpProtocol": "all",
            "NicType": "internet",
            "PortRange": "-1/-1",
            "Priority": {
              "Ref": "SecurityGroupPriority"
            },
            "SourceCidrIp": "0.0.0.0/0"
          }
        ],
        "SecurityGroupName": "CreateByROS"
      },
      "Type": "ALIYUN::ECS::SecurityGroup"
    }
  }  
}

相比傳統的JSON,這裏有一個屬性非常特殊叫"Ref",它指向了Parameters的參數定義,這樣就可以引用這裏的定義進行賦值。

Actions

  • 嚐試著將安全組的名稱也提取到Parameters中,而不是Hard Code。需要怎麼做呢?

Stack的輸出

上麵的模板創建出來的Stack可以定製的屬性較少,您可以在堆棧的概述中查看Stack的輸出。隻需要添加一個Outputs部分即可。

Outputs中,定義了一個輸出參數為SecurityGroupId, 會返回生成的Stack的安全組的Id,使用到了一個函數Fn::GetAtt, 它的屬性為一個數組,第一個參數為在Resources中定義的資源名稱,第二個屬性為ALIYUN::ECS::SecurityGroup支持的返回屬性, 我們可以發現安全組隻支持一個屬性SecurityGroupId

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "SecurityGroupPriority": {
      "Default": 1,
      "Description": "生成的安全組的優先級,優先級可選範圍為1-100,默認值為1,即最高優先級。",
      "Type": "Number",
      "MinValue": 1,
      "MaxValue": 100
    }
  },
  "Resources": {
    "DefaultSecurityGroup": {
      "Properties": {
        "Description": "生成經典網絡安全組默認開通外網的所有出網和入網訪問權限",
        "SecurityGroupEgress": [
          {
            "DestCidrIp": "0.0.0.0/0",
            "IpProtocol": "all",
            "NicType": "internet",
            "PortRange": "-1/-1",
            "Priority": {
              "Ref": "SecurityGroupPriority"
            }
          }
        ],
        "SecurityGroupIngress": [
          {
            "IpProtocol": "all",
            "NicType": "internet",
            "PortRange": "-1/-1",
            "Priority": {
              "Ref": "SecurityGroupPriority"
            },
            "SourceCidrIp": "0.0.0.0/0"
          }
        ],
        "SecurityGroupName": "CreateByROS"
      },
      "Type": "ALIYUN::ECS::SecurityGroup"
    }
  },
  "Outputs": {
    "SecurityGroupId": {
      "Value": {
        "Fn::GetAtt": [
          "DefaultSecurityGroup",
          "SecurityGroupId"
        ]
      }
    }
  }  
}

Stack的刪除

當一個Stack需要被刪除的時候,可以根據需要來選擇,有兩個選項:

  • 刪除堆棧同時刪除Stack創建的資源
  • 刪除堆棧的時候保留Stack創建的相關資源

下一節,我們將著重介紹資源編排的重要構成部分模板

最後更新:2017-04-01 13:44:33

  上一篇:go ALICloudDB for PostgreSQL 試用報告 - 6 任意時間點恢複
  下一篇:go MySQL · 引擎特性 · InnoDB redo log漫遊