天翼云服务器最佳实践-云主机自定义元数据 | ||||||||||||||||||||||||||||||
产品推荐: 1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>; 2、高防物理服务器20核/16G/50M/500G防御仅350元,点击抢购>>> 3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>> 4、阿里云服务器2核2G3M仅99元/年、2核4G5M仅199元/年,新老同享,点击抢购>>> 5、腾讯云服务器2核2G4M仅99元/年、新老同享,点击抢购>>> 云主机的元数据(metadata)是描述云主机信息的数据,包含了天翼云系统中的默认元数据信息与用户自定义的元数据信息。在云主机内部,通过内网可以方便地查看该部分信息,并基于元数据信息配置或管理云主机。 云主机默认元数据云主机创建过后,天翼云云主机会含有默认的元数据,以下为多可用区类型资源池下默认的元数据:
云主机自定义元数据除了上述云主机元数据项,用户也可以增加相应的自定义元数据项。在云主机openapi元数据管理中,api对云主机操作的就是该部分元数据内容。
元数据的使用查看默认元数据通过console云主机列表界面选择对应云主机进行远程登录。 请求查询元数据的内网地址为 我们可以根据上述默认元数据的表格,对所需元数据进行查看,我们可以使用curl命令进行查看,命令组成为: 示例shell脚本: #!/usr/bin/bash echo "======================instance metadata======================" echo "instance owner account id: " $(curl -s 169.254.169.254/meta-data/owner-account-id) echo "instance id: " $(curl -s 169.254.169.254/meta-data/instance-id) echo "instance id: " $(curl -s 169.254.169.254/meta-data/instance-id) 效果: 云主机元数据openapi的使用目前,天翼云提供的元数据openapi提供对云主机自定义元数据进行操作与查看的能力,主要分为创建、更新、查询和删除。通过python示例文档 与openapi对应的文档,可以写出对应的openapi请求。 1、创建自定义元数据 首先,我们通过openapi创建元数据openapi文档来创建自定义元数据({”test1“: "123", "test2": "abc"})。 # 按照创建云数据的openapi文档填写相关参数 create_metadata_params = { "regionID": huadong1_region_id, "azName": huadong1_az1, "instanceID": huadong1_instance, "metadata": { "test1": "123", "test2": "abc" } } # 这里省略post方法的定义,该方法的实现请参考天翼云官网文档中的 url = "https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/create" res_metadata_create = post(url, params=create_metadata_params) 调用结果: { "returnObj": { "instanceID": "c44de03e-300b-7237-1827-b51aeaff3ccd", "metadata": { "test1": "123", "test2": "abc" } }, "details": "", "message": "SUCCESS", "description": "成功", "statusCode": 800 } 通过之前的方式,使用自定义元数据项来查询自定义的元数据信息(test2.sh脚本如下): #!/usr/bin/bash echo "======================instance metadata======================" echo "user-defined metadata: " $(curl -s 169.254.169.254/spec-meta-data) echo "test1: " $(curl -s 169.254.169.254/meta-data/instance/specs/test1) echo "test2: " $(curl -s 169.254.169.254/meta-data/instance/specs/test2) 结果: 2、查询自定义元数据 同时,我们也可以调用openapi接口来查询自定义元数据。 res_metadata_details = get("https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/details", params=dict(regionID=huadong1_region_id, azName=huadong1_az1, instanceID=huadong1_instance)) 调用结果: { "returnObj": { "metadata": { "test1": "123", "test2": "abc" } }, "message": "SUCCESS", "description": "成功", "statusCode": 800 } 3、更新自定义元数据 调用更新元数据接口: # 按照创建云数据的openapi文档填写相关参数 update_metadata_params = { "regionID": huadong1_region_id, "azName": huadong1_az1, "instanceID": huadong1_instance, "metadata": { "test1": "789" } } # 这里省略post方法的定义,该方法的实现请参考天翼云官网文档中的 url = "https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/update" res_metadata_update = post(url, params=update_metadata_params) 在云主机内部进行curl查看情况: *覆盖方式更新(isForce=true) # 按照创建云数据的openapi文档填写相关参数 update_metadata_params = { "regionID": huadong1_region_id, "azName": huadong1_az1, "instanceID": huadong1_instance, "isForce": True, "metadata": { "test3": "IGs9" } } # 这里省略post方法的定义,该方法的实现请参考天翼云官网文档中的 url = "https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/update" res_metadata_update = post(url, params=update_metadata_params) 在云主机内部进行curl查看情况: 4、删除自定义元数据 调用删除接口; res_metadata_delete = post("https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/delete", params=dict(regionID=huadong1_region_id, azName=huadong1_az1, instanceID=huadong1_instance)) 在云主机内部进行curl查看情况: 示例:通过元数据配置云主机的python环境
首先,console界面远程登录云主机,进入远程界面后,查看当前python包信息: 我们需要将关键的包的版本信息写入。 这里我们以部分包为例,执行openapi创建云主机的自定义元数据: # 按照创建云数据的openapi文档填写相关参数 create_metadata_params = { "regionID": huadong1_region_id, "azName": huadong1_az1, "instanceID": huadong1_instance, "metadta": { "requeirements": { "requests": "2.27.1", "numpy": "1.16.6", "matplotlib": "2.2.5" } } } # 这里省略post方法的定义,该方法的实现请参考天翼云官网文档中的[python示例文档](https://www.ctyun.cn/document/10026730/10044097) url = "https://ctecs-global.ctapi.ctyun.cn/v4/ecs/metadata/create" res_metadata_create = post(url, params=create_metadata_params) 执行结果: { "returnObj": { "instanceID": "c44de03e-300b-7237-1827-b51aeaff3ccd", "metadata": { "requeirements": { "requests": "2.27.1", "numpy": "1.16.6", "matplotlib": "2.2.5" } } }, "details": "", "message": "SUCCESS", "description": "成功", "statusCode": 800 } 在创建过元数据后,我们可以在云主机内使用相关脚本,对python进行相应的配置。 python示例脚本(test.py): import json import subprocess HOST = "169.254.169.254" URL = HOST + "/spec-meta-data" FILE_REQUEIRE = "requirements.txt" def send_command(command): command_ls = command.split() process = subprocess.Popen(command_ls, stdout=subprocess.PIPE) output, err = process.communicate() return output.decode("utf-8") if __name__ == "__main__": res = send_command("curl -s %s" % URL) metadata = json.loads(res) requeire_info = metadata.get("requeirements") with open(FILE_REQUEIRE, "w") as f: for k, v in requeire_info.items(): write_info = "%s==%s" % (str(k), str(v)) f.writelines(write_line) tsinghua_image = "https://pypi.tuna.tsinghua.edu.cn/simple" # 清华镜像站 send_command("pip install -r %s -i %s" % (FILE_REQUEIRE, tsinghua_image)) 执行结果: 可以看到,云主机的python环境中已经下载了对应的python包。在云主机出现问题时,后续也可以根据对应的python包信息进行相应的再次部署。 |