背景
在雲計算飛速發展的今天,使用者ECS伺服器身處的網絡環境越來越複雜,彈性網卡讓ECS伺服器完美遊走在日益複雜的網絡環境中。但是以前伺服器必須是
Stopped
狀态才可以進行彈性網卡(
ENI
)的插拔,這樣可能會影響運作在伺服器上的業務。現在很高興的向大家宣布:彈性網卡從今天開始支援熱插撥,即ECS伺服器隻要處在穩定狀态(
Running
Stopped
),就可以對彈性網卡進行插拔操作。
彈性網卡熱插拔:控制台
- 控制台操作彈性網卡的位置:進入控制台 -> 雲伺服器 ECS -> 彈性網卡。
- 建立彈性網卡:點選
按鈕,在彈窗中填寫網卡名稱,選擇專有網絡 交換機 安全組等資訊後建立彈性網卡。建立彈性網卡
【産品功能】配置網卡從此與關機無緣,彈性網卡支援熱插拔功能 - 熱挂載彈性網卡:點選彈性網卡對應的
按鈕,在彈窗中選擇要綁定執行個體。執行個體狀态隻要求為穩定狀态(綁定執行個體
Running
)。Stopped
【産品功能】配置網卡從此與關機無緣,彈性網卡支援熱插拔功能 - 熱解除安裝彈性網卡:點選彈性網卡對應的
按鈕,确定即可解綁。執行個體狀态隻要求為穩定狀态(解綁執行個體
Running
Stopped
【産品功能】配置網卡從此與關機無緣,彈性網卡支援熱插拔功能
彈性網卡熱插拔:OpenAPI
attach_eni detach_eni 分别可以根據彈性網卡ID,執行個體ID,進行彈性網卡的熱插拔。相關API參考幫助文檔:
挂載彈性網卡,
解除安裝彈性網卡。
# coding=utf-8
# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 4.7.1, you can use command 'pip show aliyun-python-sdk-ecs' to check
import json
import logging
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.CreateNetworkInterfaceRequest import CreateNetworkInterfaceRequest
from aliyunsdkecs.request.v20140526.AttachNetworkInterfaceRequest import AttachNetworkInterfaceRequest
from aliyunsdkecs.request.v20140526.DetachNetworkInterfaceRequest import DetachNetworkInterfaceRequest
from aliyunsdkecs.request.v20140526.DeleteNetworkInterfaceRequest import DeleteNetworkInterfaceRequest
# configuration the log output formatter, if you want to save the output to file,
# append ",filename='ecs_invoke.log'" after datefmt.
logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S')
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
# create eni
def create_eni(vSwitchId, securityGroupId, networkInterfaceName=None, primaryIpAddress=None, description=None,
clientToken=None):
request = CreateNetworkInterfaceRequest()
request.set_VSwitchId(vSwitchId)
request.set_SecurityGroupId(securityGroupId)
if (networkInterfaceName != None):
request.set_NetworkInterfaceName(networkInterfaceName)
if (primaryIpAddress != None):
request.set_PrimaryIpAddress(primaryIpAddress)
if (description != None):
request.set_Description(description)
if (clientToken != None):
request.set_ClientToken(clientToken)
_send_request(request)
# attach eni to instance
def attach_eni(eniId, instanceId):
request = AttachNetworkInterfaceRequest()
request.set_NetworkInterfaceId(eniId)
request.set_InstanceId(instanceId)
_send_request(request)
# detach eni from instance
def detach_eni(eniId, instanceId):
request = DetachNetworkInterfaceRequest()
request.set_NetworkInterfaceId(eniId)
request.set_InstanceId(instanceId)
_send_request(request)
# delete eni
def delete_eni(eniId):
request = DeleteNetworkInterfaceRequest()
request.set_NetworkInterfaceId(eniId)
_send_request(request)
if __name__ == '__main__':
clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-zhangjiakou')
vSwitchId = "vsw-test"
securityGroupId = "sg-test"
# create_eni(vSwitchId=vSwitchId, securityGroupId=securityGroupId)
attach_eniId = "eni-test"
attach_instanceId = "i-test"
# attach_eni(attach_eniId, attach_instanceId)
detach_eniId = "eni-test"
detach_instanceId = "i-test"
# detach_eni(detach_eniId, detach_instanceId)
delete_eniId = "eni-test"
# delete_eni(delete_eniId)
小結
現在的彈性網卡熱插拔隻要求執行個體為穩定狀态即可,改進了以前執行個體隻能為
Stopped
狀态才能插拔彈性網卡的現狀。提升了使用者體驗,現在伺服器不用關機就能輕松配置彈性網卡,更加靈活實用。