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

樸實無華發表於2017-11-12

彈性伸縮(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 例項啟動的時候自動地執行您定義好的指令碼。

示例1

定義一個 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

示例2

定義一個 shell 指令碼,來實現在ECS啟動時配置 DNS、yum、NTP等。

指令碼的內容如下:

  #!/bin/sh
  # Modify DNS
  echo "nameserver 8.8.8.8" | tee /etc/resolv.conf
  # Modify yum repo and update
  rm -rf /etc/yum.repos.d/*
  touch myrepo.repo
  echo "[base]" | tee /etc/yum.repos.d/myrepo.repo
  echo "name=myrepo" | tee -a /etc/yum.repos.d/myrepo.repo
  echo "baseurl=http://mirror.centos.org/centos" | tee -a /etc/yum.repos.d/myrepo.repo
  echo "gpgcheck=0" | tee -a /etc/yum.repos.d/myrepo.repo
  echo "enabled=1" | tee -a /etc/yum.repos.d/myrepo.repo
  yum update -y
  # Modify NTP Server
  echo "server ntp1.aliyun.com" | tee /etc/ntp.conf
  systemctl restart ntpd.service

示例啟動以後可登入進行驗證:

00_17_21__08_02_2018.jpg

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 正在快速地成長,感謝您的一路陪伴。更多特性,敬請期待。


相關文章