はじめに
この記事は 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をクリックしましょう。
最初に作成したメインアカウントで操作した場合、以下のようなポップアップが表示されます。
メインアカウントの Access Key は全ての API 操作権限を持ちます。
セキュリティリスク回避のため、スクリプトに利用するユーザには必要な権限のみ持たせましょう。
そのためには RAM ユーザの利用が必要です。
Resource Access Management(RAM) とは?
特定のリソース、権限を絞ったユーザを作成する機能です。AWS/GCP でいうところの IAM ですね。
詳細はこちらのページ を参照してください。
RAM サービスを有効化後、画面右上の新規ユーザをクリックします。
ログイン名を入力し、"このユーザの Access Key を自動生成"にチェックをつけて OK を押下します。
アカウント作成成功と共に Access Key がダウンロード出来ます。
作成したユーザ名をクリックし、ユーザの管理画面を開きます。
権限の付与
今回作成するスクリプトは ECS が対象となります。
AliyunECSFullAccess の権限を付与しましょう。
作成した 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 のリソースに対して行われた操作の記録が確認できます。
特に必要な設定も無いので、導入は簡単です。もし、もっと詳細なログ管理がしたい場合は Log Service の利用を検討してください。
2018/06/03 追記: Log Service 利用に関する記事を書きました。よろしければこちらもご参照ください。
おわりに
Alibaba Cloud を初めて触ってみましたが、中国リージョンのみに提供されているサービスがかなり多いようです。機会があればそちらで提供されているサーバレス系のサービスも利用して見たいですね。
ここまで読んでいただきありがとうございました。