すべてのプロダクト
Search
ドキュメントセンター

:ECSインスタンスの照会

最終更新日:Aug 29, 2024

ECSコンソールを使用するか、API操作を呼び出すことで、Elastic Compute Service (ECS) インスタンスを管理できます。 Alibaba Cloudは、APIをカプセル化するために複数の言語でSDKを提供します。 このトピックでは、API操作を使用してPythonでECSインスタンスをクエリする方法について説明します。

背景情報

ECSインスタンスのクエリに使用されるサンプルコードの詳細については、このトピックの「サンプルコード」をご参照ください。 サンプルコードの説明については、このトピックの次のセクションを参照してください。

RAMユーザーを作成し、そのAccessKeyペアを取得する

API操作を使用してECSインスタンスを管理する場合は、AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアが必要です。 クラウドサービスのセキュリティを確保するには、RAM (Resource Access Management) ユーザーを作成し、RAMユーザーのAccessKeyペアを生成し、RAMユーザーを使用してAPI操作を使用してECSインスタンスを管理します。

次の操作を実行して、RAMユーザーを作成し、そのAccessKeyペアを取得します。

  1. RAMユーザーを作成します。 詳細については、「RAMユーザーの作成」をご参照ください。

  2. RAMユーザーのAccessKeyペアを作成します。 詳細については、「AccessKeyペアの作成」をご参照ください。

  3. AliyunECSFullAccessポリシーをユーザーにアタッチして、RAMユーザーにECSへのフルアクセスを付与します。 詳細については、「RAMユーザーへの権限付与」をご参照ください。

Python用ECS SDKのインストール

Pythonのランタイム環境を準備していることを確認します。 このトピックでは、Python 2.7以降を使用します。

次のコマンドを実行して、SDK for Pythonをインストールします。

pip install aliyun-python-sdk-ecs

権限がないことを確認された場合は、次のsudoコマンドを実行してインストールを続行します。

sudo pip install aliyun-python-sdk-ecs

このトピックでは、SDK for Python 2.1.2を使用します。

サンプルコード

次のコードは、ECSインスタンスのクエリ方法の例を示しています。 実際のニーズに基づいてコードを変更できます。

#  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 greater than 2.1.2, you can use command 'pip show aliyun-python-sdk-ecs' to check
import json
import logging
import os
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# 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')

# Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are configured in the code runtime. 
# If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code shows how to use environment variables to obtain an AccessKey pair and use the AccessKey pair to call API operations. The sample code is for reference only. We recommend that you use Security Token Service (STS) tokens, which provide higher security.
# Replace <RegionId> with the actual region ID. You can call the DescribeRegions operation to query the most recent region list. 
clt = client.AcsClient(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], '<RegionId>')

# sample api to list aliyun open api.
def hello_aliyun_regions():
    request = DescribeRegionsRequest()
    response = _send_request(request)
    if response is not None:
        region_list = response.get('Regions').get('Region')
        assert response is not None
        assert region_list is not None
        result = map(_print_region_id, region_list)
        logging.info("region list: %s", list(result))

# output the instance owned in current region.
def list_instances():
    request = DescribeInstancesRequest()
    request.set_accept_format('json')
    # The following code provides an example on how to configure request parameters to perform a paged query. In this example, set_PageNumber is set to 1 and set_PageSize is set to 2. 
    request.set_PageNumber(1)
    request.set_PageSize(2)
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        result = map(_print_instance_id, instance_list)
        logging.info("current region include instance %s", list(result))

def _print_instance_id(item):
    instance_id = item.get('InstanceId')
    return instance_id

def _print_region_id(item):
    region_id = item.get("RegionId")
    return region_id

# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action_with_exception(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)

if __name__ == '__main__':
    logging.info("Hello Aliyun OpenApi!")
    hello_aliyun_regions()
    list_instances()

現在のアカウントでサポートされているリージョンのリストを照会する

hello_ecs_api.pyという名前のファイルを作成します。 SDK for Pythonを使用する前に、RAMユーザーのAlibaba Cloud AccessKey IDとAccessKeyシークレットを使用してAcsClientオブジェクトをインスタンス化します。

説明

AccessKey IDとAccessKeyシークレットを使用すると、RAMユーザーはAlibaba CloudのECS APIに完全な権限でアクセスできます。 AccessKeyペアは機密を保持する必要があります。

import json
import logging
import os
from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
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')
# Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables are configured in the code runtime. 
# If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code shows how to use environment variables to obtain an AccessKey pair and use the AccessKey pair to call API operations. The sample code is for reference only. We recommend that you use STS tokens, which provide higher security.
# Replace <RegionId> with the actual region ID. You can call the DescribeRegions operation to query the most recent region list. 
clt = client.AcsClient(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], '<RegionId>')

AcsClientオブジェクトがインスタンス化されたら、現在のアカウントでサポートされているリージョンのリストを照会します。 詳細については、「DescribeRegions」をご参照ください。

def hello_aliyun_regions():
    request = DescribeRegionsRequest()
    response = _send_request(request)
    region_list = response.get('Regions').get('Region')
    assert response is not None
    assert region_list is not None
    result = map(_print_region_id, region_list)
    logging.info("region list: %s", list(result))
def _print_region_id(item):
    region_id = item.get("RegionId")
    return region_id
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action_with_exception(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)
hello_aliyun_regions()

コマンドラインでpython hello_ecs_api.pyコマンドを実行して、現在のアカウントでサポートされているリージョンのリストを取得します。 レスポンス例:

region list: ['cn-qingdao', 'cn-beijing', 'cn-zhangjiakou', 'cn-huhehaote', 'cn-wulanchabu', 'cn-hangzhou', 'cn-shanghai', 'cn-shenzhen', 'cn-heyuan', 'cn-guangzhou', 'cn-chengdu', 'cn-hongkong', 'ap-northeast-1', 'ap-southeast-1', 'ap-southeast-3', 'ap-southeast-5', 'us-east-1', 'us-west-1', 'eu-west-1']

特定のリージョンのECSインスタンスの照会

インスタンスリストを照会するプロセスは、リージョンリストを照会するプロセスと同様である。 入力パラメーターをDescribeInstancesRequestに置き換え、関連するパラメーターを再設定します。 詳細については、「DescribeInstances」をご参照ください。

def list_instances():
    request = DescribeInstancesRequest()
    request.set_accept_format('json')
    # The following code provides an example on how to configure request parameters to perform a paged query. In this example, set_PageNumber is set to 1 and set_PageSize is set to 2. 
    request.set_PageNumber(1)
    request.set_PageSize(2)
    response = _send_request(request)
    if response is not None:
        instance_list = response.get('Instances').get('Instance')
        result = map(_print_instance_id, instance_list)
        logging.info("current region include instance %s", list(result))
def _print_instance_id(item):
    instance_id = item.get('InstanceId')
    return instance_id
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action_with_exception(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)
list_instances()

レスポンス例:

current region include instance ['i-bp165p6xk2tmdhj0****', 'i-bp1a01zbqmsun5odo****'']

リソースクエリのAPI操作の詳細については、「関数別のAPI操作の一覧」をご参照ください。 たとえば、ディスクのリストを照会するには、入力パラメーターをDescribeDisksRequestに置き換えてDescribeDisks操作を呼び出し、関連するパラメーターを再設定します。