LoginSignup
4
1

More than 5 years have passed since last update.

Alibaba Cloud SDK For Python で ECS を操作してみる

Last updated at Posted at 2018-05-13

はじめに

この記事は Alibaba Cloud で提供する SDK for Python の導入から簡単な ECS 操作までの説明になります。
Alibaba Cloud とは中国で巨大なECサイトを運営するアリババグループと日本のソフトバンクが手を組んで提供しているクラウドサービスです。

この記事の対象読者

  • Alibaba Cloud 利用ユーザ or 興味がある人
  • 運用を自動化したい人
  • Python 開発者 or 興味がある人

実行環境

  • Alibaba アカウント作成済み
  • Alibaba Cloud Elastic Compute Service(ECS) 作成済み
  • CentOS Linux release 7.4
  • Python 2.7.5

やってみる

Access Key 作成

SDK の実行には Access Key が必要です。
作成するために画面上部のAccessKeysをクリックしましょう。

1.AccessKey.png

最初に作成したメインアカウントで操作した場合、以下のようなポップアップが表示されます。

2.RAMUser.png

メインアカウントの Access Key は全ての API 操作権限を持ちます。
セキュリティリスク回避のため、スクリプトに利用するユーザには必要な権限のみ持たせましょう。
そのためには RAM ユーザの利用が必要です。

Resource Access Management(RAM) とは?

特定のリソース、権限を絞ったユーザを作成する機能です。AWS/GCP でいうところの IAM ですね。
詳細はこちらのページ を参照してください。

3.RAMUserDescription.png

RAM サービスを有効化後、画面右上の新規ユーザをクリックします。

4.UserCreate.png

ログイン名を入力し、"このユーザの Access Key を自動生成"にチェックをつけて OK を押下します。
アカウント作成成功と共に Access Key がダウンロード出来ます。

5.UserCreate2.png

作成したユーザ名をクリックし、ユーザの管理画面を開きます。

6.UserCreated.png

権限の付与

今回作成するスクリプトは ECS が対象となります。
AliyunECSFullAccess の権限を付与しましょう。

7.Auth.png

8.AuthAdd.png

作成した Access Key は Web 上のページや git へアップロードをしないように注意しましょう。不正利用される可能性があります。

SDK の導入

今回の実行環境は Alibaba Cloud 上に作成した ECS になります。
OS は CentOS7.4 を利用。Python 2.7,pip インストール済みの環境です。
SDK は pip で簡単にインストール出来ます。

# Install the core library
sudo pip install aliyun-python-sdk-core

# Install the ECS management library
sudo pip install aliyun-python-sdk-ecs

では、実際にコードを記載していきましょう。
まずは必要なモジュールを import します。

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
from aliyunsdkecs.request.v20140526 import CreateInstanceRequest
from aliyunsdkecs.request.v20140526 import StartInstanceRequest
from aliyunsdkecs.request.v20140526 import StopInstanceRequest

ASClient を初期化します。
access-key-id と access-key-secret はダウンロードした Access Key の値を入力してください。
region-id についてはこのページを参照してください。
例えば、日本リージョンなら ap-northeast-1 を記載します。

client = AcsClient(
  "<access-key-id>",
  "<access-key-secret>",
  "<region-id>"
);

リクエストを初期化し、パラメータをセットします。

#  Initialize a request and set parameters
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(10)

リクエストを投げ、実行結果を整形して表示させます。

import json
from pprint import pprint

# Print response
response = client.do_action_with_exception(request)
pprint(json.loads(response))

以下、実際に作成したコードとその実行結果です。

インスタンスの情報取得

サンプルコード

#!/usr/bin/env python
# -*- coding: utf8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest

import json
from pprint import pprint

# Initialize AcsClient instance
client = AcsClient(
  "<access-key-id>", 
  "<access-key-secret>",
  "<region-id>"
);

# Initialize a request and set parameters
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(10)

# Print response
response = client.do_action_with_exception(request)
pprint(json.loads(response))

実行結果

インスタンスの各種情報が取得出来ました。

{u'Instances': {u'Instance': [{u'AutoReleaseTime': u'',
                               u'ClusterId': u'',
                               u'Cpu': 1,
                               u'CreationTime': u'2018-05-12T14:29Z',
                               u'DedicatedHostAttribute': {u'DedicatedHostId': u'',
                                                           u'DedicatedHostName': u''},
                               u'Description': u'ECS Web Server',
                               u'DeviceAvailable': True,

  --- <出力一部省略> ---

 u'PageNumber': 1,
 u'PageSize': 10,
 u'RequestId': u'97BA90F4-097E-4E1C-A177-3F6DE1F96B1A',
 u'TotalCount': 1}

他、いくつかのサンプルコードと実行結果を記載いたします。
必要なパラメータについては事前に実行した Describe の結果を参考にすると良いでしょう。

インスタンスの作成

前述のコードとほぼ流れは一緒です。
最初は公式のドキュメント見て作成したのですが、"HTTP Status: 403 Error:InvalidResourceType"というエラーが発生。 request.set_VSwitchId で VSwitchID をセット後、エラーが出なくなりました。

サンプルコード

#!/usr/bin/env python
# -*- coding: utf8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import CreateInstanceRequest

import json
from pprint import pprint

# Initialize AcsClient instance
client = AcsClient(
  "<access-key-id>", 
  "<access-key-secret>",
  "<region-id>"
);


# Initialize a request and set parameters
request = CreateInstanceRequest.CreateInstanceRequest()
request.set_ImageId("centos_7_04_64_20G_alibase_201701015.vhd")
request.set_InstanceType("ecs.xn4.small")
request.set_VSwitchId("<VSwitchId>")
request.set_InstanceName("MyInstance")
request.set_SecurityGroupId("<SecurityGroupId>")
request.set_KeyPairName("<KeyPairName>")

# Print response
response = client.do_action_with_exception(request)
pprint(json.loads(response))

実行結果

{u'InstanceId': u'i-xxxxx',
 u'RequestId': u'xxxxx'}

インスタンスの起動

サンプルコード

#!/usr/bin/env python
# -*- coding: utf8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import StartInstanceRequest

import json
from pprint import pprint

# Initialize AcsClient instance
  "<access-key-id>", 
  "<access-key-secret>",
  "<region-id>"
);

# Initialize a request and set parameters
request = StartInstanceRequest.StartInstanceRequest()
request.set_InstanceId("<InstanceId>")

# Print response
response = client.do_action_with_exception(request)
pprint(json.loads(response))

実行結果

{u'RequestId': u'xxxxx'}

インスタンスの停止

サンプルコード

#!/usr/bin/env python
# -*- coding: utf8 -*-

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526 import StopInstanceRequest

import json
from pprint import pprint

# Initialize AcsClient instance
client = AcsClient(
  "<access-key-id>", 
  "<access-key-secret>",
  "<region-id>"
);

# Initialize a request and set parameters
request = StopInstanceRequest.StopInstanceRequest()
request.set_InstanceId("<InstanceId>")

# Print response
response = client.do_action_with_exception(request)
pprint(json.loads(response))

実行結果

{u'RequestId': u'xxxxx'}

実行結果の記録

ActionTrail を有効化することにより Alibaba Cloud のリソースに対して行われた操作の記録が確認できます。

10.ActionTrail.png

特に必要な設定も無いので、導入は簡単です。もし、もっと詳細なログ管理がしたい場合は Log Service の利用を検討してください。

2018/06/03 追記: Log Service 利用に関する記事を書きました。よろしければこちらもご参照ください。

おわりに

Alibaba Cloud を初めて触ってみましたが、中国リージョンのみに提供されているサービスがかなり多いようです。機会があればそちらで提供されているサーバレス系のサービスも利用して見たいですね。

ここまで読んでいただきありがとうございました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1