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


讓 ESS 更靈活的新特性:UserData & KeyPair & RamRole & Tags

彈性伸縮(Elastic Scaling Service, ESS)是一種根據業務需求和策略,自動調整其彈性計算資源的管理服務,在滿足業務需求高峰增長時無縫地增加 ECS 實例,並在業務需求下降時自動減少 ECS 實例以節約成本。

為了提供更加彈性、靈活的伸縮服務,ESS 彈性伸縮配置中新增了 UserData、KeyPair、RamRole、Tags 四個特性。使用 UserData,您可以快速安全的完成自動化的配置過程,在 ECS 實例數量隨著業務需求彈性變化的同時,您還能夠安全、快速地完成應用級別的擴容和縮容。您還可以通過配置 KeyPair、Tags 等參數,實現更加高效、智能的 ECS 實例管理服務。

本文將詳細介紹 ESS 新增的四個特性,並結合具體場景,向您闡述這些特性在 ESS 中的使用方式。您可以根據自己的業務場景,靈活地使用這些特性來滿足您的業務需求。

實例自定義數據(UserData)

實例自定義數據(UserData),是阿裏雲 ECS 為您提供的一種自定義實例啟動行為及傳入數據的功能,該功能兼容 Windows 實例及 Linux 實例,主要有兩種用途:

  • 作為實例自定義腳本,在啟動實例時執行。
  • 作為普通數據,將一定的信息傳入實例中,您可以在實例中引用這些數據。

您在使用 ESS 來滿足您 ECS 實例數隨著業務需求彈性伸縮的要求時,如果您還要自動化地實現應用級別的擴容和縮容,常用地方法可能是通過自定義鏡像的方式來實現,也可能是通過使用Terraform等開源的IT基礎架構管理工具來實現。ESS 伸縮配置中添加了 UserData 參數以後,您隻需要準備好您的 UserData 自定義腳本數據,然後以 Base64 編碼的方式傳入伸縮配置中即可。當 ESS 彈性擴容 ECS 實例數的時候,UserData 實例自定義腳本會在實例啟動的時候自動地執行,從而幫您實現應用級別的擴容和縮容。相比借助於自定義鏡像或其它開源工具來實現應用自動擴展的方法,使用 ESS 原生的 UserData 特性顯得更加快捷、安全。

在創建伸縮配置,並使用了 UserData 參數時,需要注意以下幾點:

  • 專有網絡(VPC)的伸縮配置才能使用 UserData 參數。
  • UserData 要以 Base64 編碼的方式傳入。
  • UserData 將以不加密的方式傳入,所以請不要以明文方式傳入機密的信息(比如密碼、私鑰數據等),如果必須傳入,建議加密後,然後以 Base64 的方式編碼後再傳入,在實例內部以同樣的方式反解密。

關於 UserData 更多的使用方法,您可以參考 阿裏雲實例自定義數據 文檔。

SSH 秘鑰對(KeyPairName)

在使用 SSH 登錄遠程 Linux 服務器時,您可以選擇使用密碼的方式來登錄,也可以選擇使用 SSH Key 的方式來登錄。當您要管理的服務器集群較多時,頻繁地輸入密碼不僅浪費時間,而且容易發生密碼輸入錯誤,無法登陸服務器的情況。此時,如果您通過 SSH Key 的方式來登陸服務器,您隻需要配置好您的公鑰和私鑰,即可登錄到服務器。一次配置,長期有效。

阿裏雲創建的 SSH Key 隻支持 RSA 2048 位的密鑰對。在生成秘鑰的時候,阿裏雲會保存密鑰的公鑰部分,並返回給您秘鑰的私鑰部分。

ESS 彈性伸縮配置中的 KeyPairName 參數,為您提供了 SSH Key的方式來登錄服務器的能力。在創建伸縮配置時,選擇您想要使用的秘鑰對名稱作為 KeyPairName 參數配置到伸縮配置中。當 ECS 實例被彈性伸縮服務創建出來時,實例會存儲此秘鑰對的公鑰部分,您隻需要在本機配置一下秘鑰對的私鑰部分,便可以使用 SSH Key 的方式快速地登錄到您的服務器上去。

在創建伸縮配置,並使用了 KeyPairName 參數時,需要注意以下幾點:

  • Windows ECS 實例,忽略該參數。即使傳入了 KeyPairName,也不會生效。
  • 當傳入了 KeyPairName 參數後,Linux ECS 實例的密碼登錄方式會被初始化成禁止。

關於秘鑰對的創建,您可以參考 創建秘鑰對 接口 。

RAM角色名稱(RamRoleName)

RAM (Resource Access Management) 是阿裏雲為客戶提供的用戶身份管理與訪問控製服務。使用 RAM,您可以創建、管理用戶賬號(比如員工、係統或應用程序),並可以控製這些用戶賬號對您名下資源具有的操作權限。當您的企業存在多用戶協同操作資源時,使用 RAM 可以讓您避免與其他用戶共享雲賬號密鑰,按需為用戶分配最小權限,從而降低您的企業信息安全風險。

RAM 支持創建不同的角色,不同的角色具有對不同的雲產品的不同的操作權限。ESS 彈性伸縮配置新增了 RamRoleName 參數,您可以通過設置該參數,讓您的 ECS 實例 來扮演不同的角色,這些實例便擁有了這些角色不同的雲產品的操作權限。在給伸縮配置指定 RamRoleName 參數時,您需要確保當前的 RamRole 策略中允許您的 ECS 實例來扮演該角色,否則伸縮配置無法有效地彈出 ECS 實例。

關於 RamRole 的策略信息和創建方法,您可以參考 創建角色 接口。關於實例 RAM 角色使用的相關信息,您可以參考 雲服務器 ECS 最佳實踐:借助於實例 RAM 角色訪問其它雲產品 API 文檔。

標簽(Tags)

阿裏雲 ECS 提供標簽(Tags)服務,您可以通過給 ECS 實例綁定不同的標簽的方式,實現對 ECS 實例的分類管理。

您可以通過查詢不同的標簽的方式,獲取符合條件的 ECS 實例列表,同樣,您也可以通過查詢 ECS 實例的方式,查詢出匹配到的標簽。ESS 彈性伸縮配置新增了 Tags 參數,您可以通過設置不同的標簽對,來對您 ESS 伸縮服務彈出來的機器進行分類管理。每個伸縮配置暫時最多隻能支持五對標簽,當指定的標簽數超過五對,伸縮配置將創建失敗。

最佳實踐

為了讓您能夠更加清晰的理解並準確的使用 ESS 伸縮服務,本章節將結合這些新特性,向您詳細地介紹伸縮組和伸縮配置的創建過程,並為這些新參數中的每個參數都設置一個簡單的使用場景,來加強您的理解。

創建伸縮組

首先,您需要創建一個伸縮組。登錄 ESS控製台,點擊控製台右側創建伸縮組按鈕,彈出伸縮組創建對話框,如下圖所示:

1png.png

伸縮組分為經典網絡伸縮組、專有網絡伸縮組。由於專有網絡(VPC)環境下的伸縮配置才能使用實例自定義數據(UserData)參數,因此本文將基於專有網絡伸縮組展開介紹。您需要指定伸縮組所在的虛擬交換機,然後點擊確定,創建一個專有網絡伸縮組。

創建伸縮配置

創建完伸縮組以後,彈出創建伸縮配置對話框,如下圖所示:

屏幕快照 2017-11-07 下午11.23.09.png

點擊創建伸縮配置按鈕,彈出伸縮配置參數配置界麵,如下圖所示:

屏幕快照 2017-11-07 下午11.32.16.png

基本的伸縮配置參數這裏不做過多介紹,您可以參考 創建伸縮配置 接口來了解每個參數的作用和設置方式。這裏將重點介紹UserData、KeyPairName、RamRoleName、Tags四個參數的設置。

UserData參數設置

UserData 支持 Windows 係統和 Linux 操作係統,這裏將介紹 UserData 在 Linux 操作係統下,如何通過自定義 shell 腳本的方式,來實現在 ECS 實例啟動的時候自動地運行您定義好的腳本。

定義一個 shell 腳本,來實現在實例首次啟動後向 /root/output10.txt 文件寫入字符串 Hello World. The time is now {當前時間}。在定義 shell 腳本時,需注意以下幾點:

  • 格式:首行必須是 #!,如 #!/bin/sh。
  • 限製:在 Base64 編碼前,腳本內容(包括首行在內)不能超過 16 KB。
  • 頻率:僅在首次啟動實例時執行一次。

腳本的內容如下:

  #!/bin/sh
  echo "Hello World.  The time is now $(date -R)!" | tee /root/output10.txt

腳本經過 Base64 編碼後內容如下:

  IyEvYmluL3NoDQplY2hvICJIZWxsbyBXb3JsZC4gIFRoZSB0aW1lIGlzIG5vdyAkKGRhdGUgLVIpISIgfCB0ZWUgL3Jvb3Qvb3V0cHV0MTAudHh0

shell 腳本準備好以後,伸縮配置中鏡像類型選擇公共鏡像,鏡像選擇 Linux 類型的係統鏡像如 Ubuntu,伸縮配置中用戶自定義數據填寫 Base64 編碼以後的腳本數據,並勾選輸入已采用base64編碼選項,上述參數設置結果如下圖所示:

屏幕快照 2017-11-08 上午12.04.39.png

KeyPairName參數設置

在設置 KeyPairName 參數前,您需要確保伸縮配置所在區域已經存在創建好的秘鑰對,如果沒有創建好的秘鑰對,需訪問 秘鑰對列表頁 新建秘鑰對。秘鑰對創建界麵如下圖所示:

粘貼圖片.png

秘鑰對創建好以後,係統會返回秘鑰的私鑰部分,請妥善保管。秘鑰的公鑰部分由阿裏雲統一管理。伸縮配置參數中,請選擇您想要用來登錄實例的秘鑰對名稱,如下圖所示:

屏幕快照 2017-11-08 上午12.29.07.png

Tags參數設置

在配置伸縮配置中實例標簽參數時,您可以選用已有的標簽,也可以新建標簽。實例標簽參數目前隻支持 key、value 都不為空的場景。在設置實例標簽參數時,最多設置五對標簽,超過五對標簽伸縮配置將無法創建。伸縮配置中,配置好標簽參數以後的效果,如下圖所示:

屏幕快照 2017-11-08 上午12.36.27.png

RamRoleName參數設置

RamRoleName 參數目前在 ESS 控製台暫未開放,您可以通過調用 創建伸縮配置 API的方式來使用此參數。因為彈性伸縮服務創建出來的 ECS 實例參數會扮演 RamRoleName 對應的角色,ESS 伸縮配置中配置該參數時,您需要確保當前的 RamRole 策略中允許您的 ECS 實例來扮演該角色。如 AliyunECSImageExportDefaultRole鏡像的導出角色,該角色允許當前用戶的所有 ECS 實例來扮演這個角色,角色信息如下:

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "ecs.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

其中 ecs.aliyuncs.com 表示該角色當前用戶的所有 ECS 實例來扮演。

配置好伸縮配置以後,點擊確定按鈕創建伸縮配置,彈出如下對話框:

屏幕快照 2017-11-08 上午12.45.49.png

點擊確定按鈕,啟動伸縮配置。

驗證伸縮活動

由於伸縮組創建的時候指定了最小實例數為1,彈性伸縮服務會啟動一個伸縮任務,生產一台實例到當前伸縮組,使得當前伸縮組滿足最小實例數的限製。您可以進入伸縮活動列表頁,查看當前伸縮組對應的伸縮活動執行詳情,如下圖所示:

粘貼圖片.png

實例通過當前伸縮配置生產出來以後,您需要在本機配置伸縮配中指定的秘鑰對的私鑰,然後以 SSH Key的方式來登錄實例。不同的操作中,SSH 私鑰的配置方式不同,這裏以 Mac 係統為例,來介紹如何配置私鑰。步驟如下:

  • 找到 /Users/{username}/.ssh/ 目錄,如果找不到,需要新建。
  • /Users/{username}/.ssh/ 目錄下新建id_rsa文件,將私鑰信息拷貝進文件並保存。
  • 執行 ssh-add 命令將私鑰信息配置到係統。
  • 使用命令 ssh root@{publicIp} 登錄實例。其中 publicIp 代表實例的公網IP,可以通過查看本伸縮組的 ECS 實例列表獲取。點擊實例ID進去詳情頁查看,可以獲取到實例的公網Ip,實例的標簽等信息。

ssh 登錄成功的效果,如下圖所示:

粘貼圖片.png

查看 /root/output10.txt 文件,校驗 UserData 參數的執行結果,如下圖所示:

粘貼圖片.png

從上圖可以看出伸縮配置中設置的 KeyPairName、UserData 等參數都已生效。

上述隻是向您展示了 UserData 的使用方式,使用的 shell 腳本比較簡單。您可以根據自己的需求,定製您自己的腳本,然後將腳本內容經過 Base64 編碼以後配置到伸縮配置中,實例在被彈出來並啟動的時候,會執行您的自定義腳本。您可以通過這種方式,來實現應用的自動化擴容、縮容,應用的生命周期管理等功能。

寫在最後

隨著您的業務需求的不斷變化,ESS 不僅為您提供了在業務需求高峰或低穀時自動調節 ECS 實例數量的能力,而且為您提供了在 ECS 實例上快速安全地部署您的服務的能力。同時,ESS 還為您提供了一些管理 ECS 實例的新特性,幫助您更加高效靈活地管理您的 ECS 實例。合理地使用 ESS 彈性伸縮服務,不僅能夠有效地降低您的服務器成本,而且能夠有效地降低您的服務管理和運維成本。您可以登錄 ESS控製台 體驗 ESS 的特性,同時也可以參考 創建伸縮配置 接口來使用這些新特性。

ESS 正在快速地成長,感謝您的一路陪伴。更多特性,敬請期待。

最後更新:2017-11-12 22:34:28

  上一篇:go  揭秘2017雙11背後的網絡-雙11的網絡產品和技術概覽
  下一篇:go  JAVA基礎一