python实现获取阿里云所有ecs服务器信息

55 篇文章 4 订阅
4 篇文章 0 订阅

概述:

        作为一名自动化运维开发来说,我们如何才能实现公司公有云上的数据自动同步到cmdb,这本身对运维团队来说是极其有意义的,不用每次人工手动去导出excel,再去编辑修改手动导入到我们得内部cmdb系统,这里用阿里云的ecs实例来举例。

准备工作:

1.查看阿里云官方openapi文档得知,想调用阿里云的接口,需要先安装阿里云的sdk工具包,安装步骤如下,本段复制来自阿里云 OpenAPI 开发者门户

  • Python 3
  • 安装 SDK 核心库 OpenAPI ,使用pip安装包依赖:
pip install alibabacloud_tea_openapi

pip install alibabacloud_ecs20140526==2.1.0

pip install aliyun-python-sdk-core

pip install aliyun-python-sdk-ecs

2.安装方式

PyPI PIP

PyPI Anaconda

3.了解获取阿里云ecs信息接口的必要参数和备选参数

请求参数阿里云 OpenAPI 开发者门户

名称类型必填描述示例值及参考API

RegionId

String

实例所属的地域ID。您可以调用DescribeRegions查看最新的阿里云地域列表。

示例值:

cn-hangzhou

推荐API:

DescribeImages

DescribeSecurityGroupAttribute

DescribeInstanceRamRole

VpcId

String

专有网络VPC ID。

示例值:

v-bp67acfmxazb4p****

推荐API:

CreateNetworkInterface

DescribeSecurityGroupAttribute

CreateVpc

VSwitchId

String

交换机ID。

示例值:

vsw-bp67acfmxazb4p****

推荐API:

CreateVSwitch

CreateNetworkInterface

ZoneId

String

可用区ID。

示例值:

cn-hangzhou-g

推荐API:

CreateNetworkInterface

DescribeInstanceAttribute

InstanceNetworkType

String

实例网络类型。取值范围:

  • classic:经典网络。
  • vpc:专有网络VPC。

示例值:

vpc

推荐API:

DescribeInstanceAttribute

SecurityGroupId

String

实例所属的安全组。

示例值:

sg-bp67acfmxazb4p****

推荐API:

CreateSecurityGroup

DescribeSecurityGroupAttribute

InstanceIds

String

实例ID。取值可以由多个实例ID组成一个JSON数组,最多支持100个ID,ID之间用半角逗号(,)隔开。

示例值:

["i-bp67acfmxazb4p****", "i-bp67acfmxazb4p****", … "i-bp67acfmxazb4p****"]

PageNumber

Integer

实例状态列表的页码。

起始值为1。

默认值为1。

示例值:

1

PageSize

Integer

分页查询时设置的每页行数。

最大值为100。

默认值为10。

示例值:

10

NextToken

String

查询凭证(Token),取值为上一次API调用返回的NextToken参数值。

示例值:

caeba0bbb2be03f84eb48b699f0a4883

MaxResults

Integer

分页查询时每页行数。最大值为100。

默认值:

  • 当不设置值或设置的值小于10时,默认值为10。
  • 当设置的值大于100时,默认值为100。

示例值:

10

InnerIpAddresses

String

经典网络类型实例的内网IP列表。当InstanceNetworkType=classic时生效,取值可以由多个IP组成一个JSON数组,最多支持100个IP,IP之间用半角逗号(,)隔开。

示例值:

["10.1.1.1", "10.1.2.1", … "10.1.10.1"]

PrivateIpAddresses

String

VPC网络类型实例的私有IP。当InstanceNetworkType=vpc时生效,取值可以由多个IP组成一个JSON数组,最多支持100个IP,IP之间用半角逗号(,)隔开。

示例值:

["172.16.1.1", "172.16.2.1", … "172.16.10.1"]

PublicIpAddresses

String

实例的公网IP列表。取值可以由多个IP组成一个JSON数组,最多支持100个IP,IP之间用半角逗号(,)隔开。

示例值:

["42.1.1.**", "42.1.2.**", … "42.1.10.**"]

推荐API:

DescribeBandwidthPackages

EipAddresses

String

实例的弹性公网IP列表。当InstanceNetworkType=vpc时该参数生效,取值可以由多个IP组成一个JSON数组,最多支持100个IP,IP之间用半角逗号(,)隔开。

示例值:

["42.1.1.**", "42.1.2.**", … "42.1.10.**"]

推荐API:

DescribeEipAddresses

InstanceChargeType

String

实例的计费方式。取值范围:

  • PostPaid:按量付费。
  • PrePaid:包年包月。

示例值:

PostPaid

推荐API:

DescribeInstanceAttribute

InternetChargeType

String

公网带宽计费方式。取值范围:

  • PayByBandwidth:按固定带宽计费。
  • PayByTraffic:按使用流量计费。
说明

按使用流量计费模式下的出入带宽峰值都是带宽上限,不作为业务承诺指标。当出现资源争抢时,带宽峰值可能会受到限制。如果您的业务需要有带宽的保障,请使用按固定带宽计费模式。

示例值:

PayByTraffic

推荐API:

DescribeInstanceAttribute

InstanceName

String

实例名称,支持使用通配符*进行模糊搜索。

示例值:

Test

推荐API:

DescribeInstanceAttribute

ImageId

String

镜像ID。

示例值:

m-bp67acfmxazb4p****

推荐API:

CreateImage

DescribeImageSupportInstanceTypes

DescribeInstanceAttribute

Status

String

实例状态。取值范围:

  • Pending:创建中。
  • Running:运行中。
  • Starting:启动中。
  • Stopping:停止中。
  • Stopped:已停止。

示例值:

Running

推荐API:

CreateNetworkInterface

DescribeInstanceAttribute

LockReason

String

资源被锁定的原因。取值范围:

  • financial:因欠费被锁定。

  • security:因安全原因被锁定。

  • Recycling:抢占式实例的待释放锁定状态。

  • dedicatedhostfinancial:因为专有宿主机欠费导致ECS实例被锁定。

  • refunded:因退款被锁定。

示例值:

security

推荐API:

DescribeReservedInstances

DescribeDedicatedHosts

DescribeInstanceAttribute

Filter.1.Key

String

查询资源时的筛选键,取值必须为CreationStartTime。同时设置Filter.1.KeyFilter.1.Value可以查询在指定时间点后创建的资源信息。

示例值:

CreationStartTime

Filter.2.Key

String

查询资源时的筛选键,取值必须为CreationEndTime。同时设置Filter.2.KeyFilter.2.Value可以查询在指定时间点前创建的资源信息。

示例值:

CreationEndTime

Filter.3.Key

String

查询资源时的筛选键,取值必须为ExpiredStartTime。同时设置Filter.3.KeyFilter.3.Value可以查询在指定时间点后到期的资源信息。

示例值:

ExpiredStartTime

Filter.4.Key

String

查询资源时的筛选键,取值必须为ExpiredEndTime。同时设置Filter.4.KeyFilter.4.Value可以查询在指定时间点前到期的资源信息。

示例值:

ExpiredEndTime

Filter.1.Value

String

查询资源时的筛选值。指定该参数时必须同时指定Filter.1.Key参数,格式为:yyyy-MM-ddTHH:mmZ,采用UTC +0时区。

示例值:

2017-12-05T22:40Z

Filter.2.Value

String

查询资源时的筛选值。指定该参数时必须同时指定Filter.2.Key参数,格式为:yyyy-MM-ddTHH:mmZ,采用UTC +0时区。

示例值:

2017-12-06T22:40Z

Filter.3.Value

String

查询资源时的筛选值。指定该参数时必须同时指定Filter.3.Key参数,格式为:yyyy-MM-ddTHH:mmZ,采用UTC +0时区。

示例值:

2017-12-07T22:40Z

Filter.4.Value

String

查询资源时的筛选值。指定该参数时必须同时指定Filter.4.Key参数,格式为:yyyy-MM-ddTHH:mmZ,采用UTC +0时区。

示例值:

2017-12-08T22:40Z

DeviceAvailable

Boolean

示例值:

false

IoOptimized

Boolean

是否是I/O优化型实例。

示例值:

true

推荐API:

DescribeInstanceAttribute

NeedSaleCycle

Boolean

示例值:

false

InstanceType

String

实例的规格。

示例值:

ecs.g5.large

推荐API:

DescribeInstanceAttribute

InstanceTypeFamily

String

实例的规格族。

示例值:

ecs.g5

推荐API:

DescribeInstanceTypes

DescribeRecommendInstanceType

DescribeImageSupportInstanceTypes

KeyPairName

String

实例使用的SSH密钥对名称。

示例值:

KeyPairNameTest

推荐API:

AttachKeyPair

DetachKeyPair

CreateKeyPair

ResourceGroupId

String

实例所在的企业资源组ID。使用该参数过滤资源时,资源数量不能超过1000个。

示例值:

rg-bp67acfmxazb4p****

推荐API:

CreateNetworkInterface

HpcClusterId

String

实例所在的HPC集群ID。

示例值:

hpc-bp67acfmxazb4p****

推荐API:

DescribeHpcClusters

RdmaIpAddresses

String

HPC实例的Rdma网络IP。

示例值:

10.10.10.102

DryRun

Boolean

是否只预检此次请求。取值范围:

  • true:发送检查请求,不会查询资源状况。检查项包括AccessKey是否有效、RAM用户的授权情况和是否填写了必需参数。如果检查不通过,则返回对应错误。如果检查通过,会返回错误码DryRunOperation。
  • false(默认值):发送正常请求,通过检查后返回2XX HTTP状态码并直接查询资源状况。

示例值:

false

HttpEndpoint

String

是否启用实例元数据的访问通道。取值范围:

  • enabled:启用。
  • disabled:禁用。

默认值为enabled。

说明

有关实例元数据的更多信息,请参见实例元数据概述

示例值:

enabled

HttpTokens

String

访问实例元数据时是否强制使用加固模式(IMDSv2)。取值范围:

  • optional:不强制使用。
  • required:强制使用。设置该取值后,普通模式无法访问实例元数据。

默认值为optional。

说明

有关访问实例元数据模式的更多信息,请参见实例元数据访问模式

示例值:

optional

HttpPutResponseHopLimit

Integer

示例值:

0

Ipv6Address

String []

为弹性网卡指定的IPv6地址。

示例值:

2408:4321:180:1701:94c7:bc38:3bfa:****

推荐API:

DescribeNetworkInterfaces

CreateNetworkInterface

Tag

Object []

标签列表

key

String

标签键。

说明

为提高兼容性,建议您使用另一个Tag.N.Key参数。

示例值:

keyTest

Key

String

实例的标签键。N的取值范围为1~20。

使用一个标签过滤资源,查询到该标签下的资源数量不能超过1000个;使用多个标签过滤资源,查询到同时绑定了多个标签的资源数量不能超过1000个。如果资源数量超过1000个,请使用ListTagResources接口进行查询。

示例值:

TestKey

Value

String

实例的标签值。N的取值范围为1~20。

示例值:

TestValue

value

String

标签值。

说明

为提高兼容性,建议您使用另一个Tag.N.Value参数。

示例值:

valueTest

AdditionalAttributes

String []

其他属性值。N的取值范围为1~20。取值范围:

  • META_OPTIONS:实例元数据。
  • DDH_CLUSTER:专有宿主机集群。
  • NETWORKPRIMARYENI_IP :主网卡辅助IP。

示例值:

META_OPTIONS

响应参数:

名称类型描述示例

NextToken

String

本次调用返回的查询凭证值。

caeba0bbb2be03f84eb48b699f0a4883

PageSize

Integer

输入时设置的每页行数。

10

PageNumber

Integer

实例列表的页码。

1

RequestId

String

请求ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE3C83E

TotalCount

Integer

查询到的实例总数。

说明

使用MaxResultsNextToken参数进行分页查询时,返回的TotalCount参数值无意义。

1

Instances

Object []

由Instances组成的数组格式,返回实例的信息。

CreationTime

String

实例创建时间。以ISO8601为标准,并使用UTC+0时间,格式为yyyy-MM-ddTHH:mmZ。更多信息,请参见ISO8601

2017-12-10T04:04Z

SerialNumber

String

实例序列号。

51d1353b-22bf-4567-a176-8b3e12e4****

Status

String

实例状态。

Running

DeploymentSetId

String

部署集ID。

ds-bp67acfmxazb4p****

KeyPairName

String

密钥对名称。

testKeyPairName

SaleCycle

String

实例计费周期。

month

SpotStrategy

String

按量实例的抢占策略。可能值:

  • NoSpot:正常按量付费实例。
  • SpotWithPriceLimit:设置上限价格的抢占式实例。
  • SpotAsPriceGo:系统自动出价,最高按量付费价格的抢占式实例。
NoSpot

DeviceAvailable

Boolean

实例是否可以挂载数据盘。

true

LocalStorageCapacity

Long

实例挂载的本地存储容量。

1000

Description

String

实例描述。

testDescription

SpotDuration

Integer

抢占式实例的保留时长,单位为小时。可能值为0~6。

  • 保留时长2~6正在邀测中,如需开通请提交工单。
  • 值为0,则为无保护期模式。
说明

当SpotStrategy值为SpotWithPriceLimit或SpotAsPriceGo时返回该参数。

1

InstanceNetworkType

String

实例网络类型。可能值:

  • classic:经典网络。
  • vpc:专有网络VPC。
vpc

InstanceName

String

实例名称。

InstanceNameTest

OSNameEn

String

实例操作系统的英文名称。

CentOS 7.4 64 bit

HpcClusterId

String

实例所属的HPC集群ID。

hpc-bp67acfmxazb4p****

SpotPriceLimit

Float

实例的每小时最高价格。支持最大3位小数,参数SpotStrategy=SpotWithPriceLimit时,该参数生效。

0.98

Memory

Integer

内存大小,单位为MiB。

16384

OSName

String

实例的操作系统名称。

CentOS 7.4 64 位

DeploymentSetGroupNo

Integer

ECS实例绑定部署集分散部署时,实例在部署集中的分组位置。

1

ImageId

String

实例运行的镜像ID。

m-bp67acfmxazb4p****

VlanId

String

实例的VLAN ID。

说明

该参数即将被弃用,为提高兼容性,请尽量使用其他参数。

10

ClusterId

String

实例所在的集群ID。

说明

该参数即将被弃用,为提高兼容性,请尽量使用其他参数。

c-bp67acfmxazb4p****

GPUSpec

String

实例规格附带的GPU类型。

NVIDIA V100

AutoReleaseTime

String

按量付费实例的自动释放时间。

2017-12-10T04:04Z

DeletionProtection

Boolean

实例释放保护属性,指定是否支持通过控制台或API(DeleteInstance)释放实例。

  • true:已开启实例释放保护。
  • false:未开启实例释放保护。
说明

该属性仅适用于按量付费实例,且只能限制手动释放操作,对系统释放操作不生效。

false

StoppedMode

String

实例停机后是否继续收费。可能值:

  • KeepCharging:停机后继续收费,为您继续保留库存资源。
  • StopCharging:停机后不收费。停机后,我们释放实例对应的资源,例如vCPU、内存和公网IP等资源。重启是否成功依赖于当前地域中是否仍有资源库存。
  • Not-applicable:本实例不支持停机不收费功能。
KeepCharging

GPUAmount

Integer

实例规格附带的GPU数量。

4

HostName

String

实例主机名。

testHostName

InstanceId

String

实例ID。

i-bp67acfmxazb4p****

InternetMaxBandwidthOut

Integer

公网出带宽最大值,单位为Mbit/s。

5

InternetMaxBandwidthIn

Integer

公网入带宽最大值,单位为Mbit/s。

50

InstanceType

String

实例规格。

ecs.g5.large

InstanceChargeType

String

实例的计费方式。可能值:

  • PrePaid:包年包月。
  • PostPaid:按量付费。
PostPaid

RegionId

String

实例所属地域ID。

cn-hangzhou

IoOptimized

Boolean

是否为I/O优化型实例。

true

StartTime

String

实例最近一次的启动时间。以ISO8601为标准,并使用UTC+0时间,格式为yyyy-MM-ddTHH:mmZ。更多信息,请参见ISO8601

2017-12-10T04:04Z

Cpu

Integer

vCPU数。

8

LocalStorageAmount

Integer

实例挂载的本地存储数量。

2

ExpiredTime

String

过期时间。以ISO8601为标准,并使用UTC+0时间,格式为yyyy-MM-ddTHH:mmZ。更多信息,请参见ISO8601

2017-12-10T04:04Z

ResourceGroupId

String

实例所属的企业资源组ID。

rg-bp67acfmxazb4p****

InternetChargeType

String

网络计费类型。可能值:

  • PayByBandwidth:按固定带宽计费。
  • PayByTraffic:按使用流量计费。
PayByTraffic

ZoneId

String

实例所属可用区。

cn-hangzhou-g

Recyclable

Boolean

实例是否可以回收。

false

ISP

String说明

该参数正在邀测中,暂未开放使用。

null

CreditSpecification

String

修改突发性能实例的运行模式。可能值:

  • Standard:标准模式。有关实例性能的更多信息,请参见什么是突发性能实例中的性能约束模式章节。
  • Unlimited:无性能约束模式,有关实例性能的更多信息,请参见什么是突发性能实例中的无性能约束模式章节。
Standard

InstanceTypeFamily

String

实例规格族。

ecs.g5

OSType

String

实例的操作系统类型,分为Windows Server和Linux两种。可能值:

  • windows。
  • linux。
linux

NetworkInterfaces

Object []

实例包含的弹性网卡集合。

Type

String

弹性网卡类型。可能值:

  • Primary:主网卡。
  • Secondary:辅助弹性网卡。
Primary

MacAddress

String

弹性网卡的MAC地址。

00:16:3e:32:b4:**

PrimaryIpAddress

String

弹性网卡主私有IP地址。

172.17.**.***

NetworkInterfaceId

String

弹性网卡的ID。

eni-2zeh9atclduxvf1z****

PrivateIpSets

Object []

PrivateIpSet组成的集合。

PrivateIpAddress

String

实例的私网IP地址。

172.17.**.**

Primary

Boolean

是否是主私网IP地址。

true

Ipv6Sets

Object []

为弹性网卡分配的IPv6地址集合。仅当请求参数AdditionalAttributes.N取值为NETWORK_PRIMARY_ENI_IP时,才会返回该参数值。

Ipv6Address

String

为弹性网卡指定的IPv6地址。

2408:4321:180:1701:94c7:bc38:3bfa:***

OperationLocks

Object []

实例的锁定原因。

LockMsg

String

实例被锁定的描述信息。

The specified instance is locked due to financial reason.

LockReason

String

锁定类型。可能值:

  • financial:因欠费被锁定。
  • security:因安全原因被锁定。
  • Recycling:抢占式实例的待释放锁定状态。
  • dedicatedhostfinancial:因为专有宿主机欠费导致ECS实例被锁定。
  • refunded:因退款被锁定。
Recycling

Tags

Object []

实例的标签集合。

TagValue

String

实例的标签值。

TestValue

TagKey

String

实例的标签键。

TestKey

RdmaIpAddress

String []

HPC实例的Rdma网络IP。

10.10.10.102

SecurityGroupIds

String []

实例所属安全组集合。

sg-bp67acfmxazb4p****

PublicIpAddress

String []

实例公网IP地址。

121.40.**.**

InnerIpAddress

String []

经典网络类型实例的内网IP地址。

10.170.**.**

VpcAttributes

Object

专有网络VPC属性。

VpcId

String

专有网络VPC ID。

vpc-2zeuphj08tt7q3brd****

NatIpAddress

String

云产品的IP,用于VPC云产品之间的网络互通。

172.17.**.**

VSwitchId

String

虚拟交换机ID。

vsw-2zeh0r1pabwtg6wcs****

PrivateIpAddress

String []

私有IP地址。

172.17.**.**

EipAddress

Object

弹性公网IP绑定信息。

IsSupportUnassociate

Boolean

是否可以解绑弹性公网IP。

true

InternetChargeType

String

弹性公网IP的计费方式。

  • PayByBandwidth:按带宽计费。

  • PayByTraffic:按流量计费。

PayByTraffic

IpAddress

String

弹性公网IP。

42.112.**.**

Bandwidth

Integer

弹性公网IP的公网带宽限速,单位为Mbit/s。

5

AllocationId

String

弹性公网IP的ID。

eip-2ze88m67qx5z****

HibernationOptions

Object说明

该参数正在邀测中,暂未开放使用。

Configured

Boolean说明

该参数正在邀测中,暂未开放使用。

false

DedicatedHostAttribute

Object

由专有宿主机集群ID(DedicatedHostClusterId)、专有宿主机ID(DedicatedHostId)和名称(DedicatedHostName)组成的宿主机属性数组。

DedicatedHostId

String

专有宿主机ID。

dh-bp67acfmxazb4p****

DedicatedHostName

String

专有宿主机名称。

testDedicatedHostName

DedicatedHostClusterId

String

专有宿主机集群ID。

dc-bp67acfmxazb4h****

EcsCapacityReservationAttr

Object

云服务器ECS的容量预留相关参数。

CapacityReservationPreference

String

容量预留偏好。

cr-bp67acfmxazb4p****

CapacityReservationId

String

容量预留ID。

cr-bp67acfmxazb4p****

DedicatedInstanceAttribute

Object

专有宿主机实例的属性。

Affinity

String

专有宿主机实例是否与专有宿主机关联。可能值:

  • default:专有宿主机实例不与专有宿主机关联。停机不收费实例重启后,可能会放置在自动资源部署池中的其它专有宿主机上。

  • host:专有宿主机实例与专有宿主机关联。停机不收费实例重启后,仍放置在原专有宿主机上。

default

Tenancy

String

实例的宿主机类型是否为专有宿主机。可能值:

  • default:实例的宿主机类型不是专有宿主机。

  • host:实例的宿主机类型为专有宿主机。

default

CpuOptions

Object

CPU配置详情。

Numa

String

分配的线程数。可能值为2。

2

CoreCount

Integer

物理CPU核心数。

2

ThreadsPerCore

Integer

CPU线程数。

4

MetadataOptions

Object

元数据选项集合。

HttpEndpoint

String

是否启用实例元数据的访问通道。可能值:

  • enabled:启用。
  • disabled:禁用。
enabled

HttpPutResponseHopLimit

Integer说明

该参数暂未开放使用。

0

HttpTokens

String

访问实例元数据时是否强制使用加固模式(IMDSv2)。可能值:

  • optional:不强制使用。
  • required:强制使用。
optional

ImageOptions

Object

镜像相关属性信息。

LoginAsNonRoot

Boolean

使用该镜像的实例是否支持使用ecs-user用户登录。可能值:

  • true:是

  • false:否

false

开发:

        通过接口文档了解到,只有区域region_id,是必填项,通过access_key,secret两项来与阿里云做认证,其他参数都是可选项,先列举下阿里云的所有区域:

内地:

 其他国家和地区:

 代码:

获取的详细数据示例(敏感信息已过滤):

在线格式化json数据网站:JSON在线 | JSON解析格式化—SO JSON在线工具

{
	'CreationTime': '2022-03-10T02:46Z',
	'SerialNumber': '11111111-18f6e2c10288',
	'Status': 'Running',
	'DeploymentSetId': '',
	'SaleCycle': '',
	'SpotStrategy': 'NoSpot',
	'DeviceAvailable': True,
	'Description': '********',
	'InstanceNetworkType': 'vpc',
	'InstanceName': '*******dadas',
	'OSNameEn': 'CentOS  7.8 64 bit',
	'SpotPriceLimit': 0.0,
	'Memory': 4096,
	'OSName': 'CentOS  7.8 64位',
	'ImageId': 'centos_7_8_x64_20G_alibase_20211130.vhd',
	'VlanId': '',
	'ClusterId': '',
	'GPUSpec': '',
	'AutoReleaseTime': '',
	'DeletionProtection': False,
	'StoppedMode': 'Not-applicable',
	'GPUAmount': 0,
	'HostName': '******',
	'InstanceId': 'i-8vd****g24wj8g***5ak',
	'InternetMaxBandwidthOut': 0,
	'InternetMaxBandwidthIn': 100,
	'InstanceType': 'ecs.s6-c1m2.large',
	'InstanceChargeType': 'PrePaid',
	'RegionId': 'cn-zhangjiakou',
	'IoOptimized': True,
	'StartTime': '2022-03-10T03:04Z',
	'Cpu': 2,
	'ExpiredTime': '2022-04-10T16:00Z',
	'ResourceGroupId': 'rg-ddsdccfwrtres',
	'InternetChargeType': 'PayByTraffic',
	'ZoneId': 'cn-zhangjiakou-c',
	'Recyclable': False,
	'CreditSpecification': '',
	'InstanceTypeFamily': 'ecs.s6',
	'OSType': 'linux',
	'NetworkInterfaces': {
		'NetworkInterface': [{
			'Type': 'Primary',
			'MacAddress': '11:11:31:11:11:7d',
			'PrimaryIpAddress': '10.10.10.10',
			'NetworkInterfaceId': 'eni-8v*******zna',
			'PrivateIpSets': {
				'PrivateIpSet': [{
					'PrivateIpAddress': '10.10.10.10',
					'Primary': True
				}]
			}
		}]
	},
	'OperationLocks': {
		'LockReason': []
	},
	'Tags': {
		'Tag': [{
			'TagValue': 'zcw',
			'TagKey': 'ops'
		}]
	},
	'SecurityGroupIds': {
		'SecurityGroupId': ['sg-8v********ts0']
	},
	'PublicIpAddress': {
		'IpAddress': []
	},
	'InnerIpAddress': {
		'IpAddress': []
	},
	'VpcAttributes': {
		'VpcId': 'vpc-8***************u',
		'NatIpAddress': '',
		'VSwitchId': 'vsw-8***********co',
		'PrivateIpAddress': {
			'IpAddress': ['10.10.10.10']
		}
	},
	'EipAddress': {
		'InternetChargeType': '',
		'IpAddress': '',
		'AllocationId': ''
	},
	'HibernationOptions': {
		'Configured': False
	},
	'DedicatedHostAttribute': {
		'DedicatedHostId': '',
		'DedicatedHostName': '',
		'DedicatedHostClusterId': ''
	},
	'EcsCapacityReservationAttr': {
		'CapacityReservationPreference': '',
		'CapacityReservationId': ''
	},
	'DedicatedInstanceAttribute': {
		'Affinity': '',
		'Tenancy': ''
	},
	'CpuOptions': {
		'Numa': '',
		'CoreCount': 1,
		'ThreadsPerCore': 2
	},
	'MetadataOptions': {
		'HttpEndpoint': '',
		'HttpTokens': ''
	}
}
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
import json


# AccessKey Id,
access_key_id = 'ALT***************P7'
# AccessKey Secret,
access_key_secret = '2****dada**88ui'
# 区域id,根据实际情况补充列表
region_id = ['cn-qingdao','cn-beijing','cn-zhangjiakou','cn-huhehaote','cn-wulanchabu','cn-hangzhou','cn-shanghai',
             'cn-shenzhen','cn-heyuan','cn-guangzhou','cn-chengdu','cn-nanjing','cn-hongkong','ap-southeast-1',
             'ap-southeast-2','ap-southeast-3','ap-southeast-5','ap-southeast-6','ap-southeast-7','ap-south-1',
             'ap-northeast-1','ap-northeast-2','us-west-1','us-east-1','eu-central-1','eu-west-1','me-east-1']


def get_ecs_data(access_key_id,access_key_secret,region_id):
    cli = client.AcsClient(access_key_id,access_key_secret,region_id)
    res = DescribeInstancesRequest.DescribeInstancesRequest()
    res.set_accept_format('json')
    res.set_PageSize(100)  ##  单页条数
    for i in range(1, 5):  ##  遍历500条数据,根据阿里云ecs实例实际情况调整
        res.set_PageNumber(i)  ## 遍历每页
        result = json.loads(cli.do_action_with_exception(res))
        ecs_info = result.get('Instances').get('Instance')
        # 遍历获取到的结果
        for info in ecs_info:
            CreationTime  = info.get('CreationTime')        ## 创建时间
            SerialNumber = info.get('SerialNumber')         ## sn序列号
            Status = info.get('Status')                     ## 实例状态
            InstanceId = info.get('InstanceId')             ## 实例id
            if info.get('Description'):
                Description = info.get('Description')
            else:
                Description = '{}'                          ## 实例描述
            InstanceName = info.get('InstanceName')         ## 实例名称
            RegionId = info.get('RegionId')                 ## 所在区域
            ZoneId = info.get('ZoneId')                     ## 网络所在区域
            InstanceType = info.get('InstanceType')         ## 实例类型
            OSNameEn = info.get('OSNameEn')                 ## 操作系统型号
            OSType = info.get('OSType')                     ## 操作系统类型
            Cpu = str(info.get('Cpu'))                      ## cpu核心数
            Memory = str(int(info.get('Memory'))/1024)      ## 内存,单位G
            ExpiredTime = info.get('ExpiredTime')           ## 实例到期时间
            PrimaryIpAddress_ = info.get('NetworkInterfaces').get('NetworkInterface')
            PrimaryIpAddress = PrimaryIpAddress_[0].get('PrimaryIpAddress')  ## 实例私网ip
            if info.get('PublicIpAddress').get('IpAddress'):
                ipAddress = info.get('PublicIpAddress').get('IpAddress')
                if ipAddress:
                    ipAddress = ipAddress[0]
            else:
                ipAddress = '{}'
            innerIpAddress = info.get('InnerIpAddress').get('IpAddress')
            if innerIpAddress:
                innerIpAddress = innerIpAddress[0]
            else:
                innerIpAddress = '{}'
            print(
                '创建时间:{}'.format(CreationTime),'序列号:{}'.format(SerialNumber),
                '运行状态:{}'.format(Status),'实例id:{}'.format(InstanceId),
                '实例描述:{}'.format(Description),'实例名称:{}'.format(InstanceName),
                '所在区域:{}'.format(RegionId),'网络所在区域:{}'.format(ZoneId),
                '实例类型:{}'.format(InstanceType),'操作系统型号:{}'.format(OSNameEn),
                '操作系统类型:{}'.format(OSType),'CPU核心数:{}'.format(Cpu),
                '内存:{}'.format(Memory),'实例到期时间:{}'.format(ExpiredTime),
                '实例私网ip:{}'.format(PrimaryIpAddress),'实例公网ip:{}'.format(ipAddress)
                  )

      

for i in region_id:
    get_ecs_data(access_key_id=access_key_id,access_key_secret=access_key_secret,region_id=i)

运行效果:

 总结:

        博主这里只获取了部分我觉得有用的信息,可以根据实际库表字段去解析json数据,这里不再去代码里写如何同步cmdb,有多种方式,可以通过原生sql插入cmdb数据库表实现,也可以通过orm方式去插入到具体cmdb库里,具体看实际业务需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值