Python からサービス管理を使用する

注意

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

重要

現在、Cloud Services (クラシック) は新しいお客様に対して非推奨となっており、2024 年 8 月 31 日に、すべてのお客様に対して廃止される予定です。 新しいデプロイでは、新しい Azure Resource Manager ベースのデプロイ モデル、 Azure Cloud Services (延長サポート) を使用してください。

このガイドでは、Python から一般的なサービス管理タスクをプログラムで実行する方法について説明します。 Azure SDK for PythonServiceManagementService クラスは、Azure Portal で使用できるサービス管理関連の機能の多くへのプログラムによるアクセスをサポートしています。 この機能を使用して、クラウド サービス、デプロイ、データ管理サービス、および仮想マシンの作成、更新、および削除を行うことができます。 この機能は、サービス管理へのプログラムによるアクセスが必要なアプリケーションをビルドするために役立つ場合があります。

サービス管理とは

Azure Service Management API を使うと、Azure Portal を通じて使用できるサービス管理機能の多くにプログラムでアクセスできます。 Azure SDK for Python を使用すると、クラウド サービスとストレージ アカウントを管理できます。

Service Management API を使用するには、 Azure アカウントを作成する必要があります。

概念

Azure SDK for Python は、REST API である Service Management API をラップします。 すべての API 操作は TLS 経由で実行され、X.509 v3 証明書を使用して相互認証されます。 管理サービスへのアクセスは、Azure で実行されているサービス内から行うことができます。 また、HTTPS 要求の送信と HTTPS 応答の受信の機能を持つ任意のアプリケーションからインターネット経由で直接行うこともできます。

インストール

azure-servicemanagement-legacy パッケージには、この記事で説明されているすべての機能が用意されています。このパッケージは pip を使用してインストールできます。 インストールの詳細については (たとえば、Python を初めて使用する場合)、Python と Azure SDK のインストールに関する記事を参照してください。

サービス管理に接続する

サービス管理エンドポイントに接続するには、Azure サブスクリプション ID、および有効な管理証明書が必要です。 サブスクリプション ID は Azure Portal から入手できます。

Note

Windows で実行中の OpenSSL で作成した証明書を使用できるようになりました。 Python 2.7.4 以降が必要です。 .pfx 証明書のサポートは今後削除される可能性があるため、.pfx の代わりに OpenSSL を使用することをお勧めします。

Windows、Mac または Linux での管理証明書 (OpenSSL)

OpenSSL を使用して管理証明書を作成できます。 2 つの証明書を作成する必要があります。1 つはサーバー用 (.cer ファイル)、もう 1 つはクライアント用 (.pem ファイル) です。 .pem ファイルを作成するには、次のコマンドを実行します。

openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

.cer 証明書を作成するには、次のコマンドを実行します。

openssl x509 -inform pem -in mycert.pem -outform der -out mycert.cer

Azure 証明書の詳細については、「Azure Cloud Services の証明書の概要」を参照してください。 OpenSSL のパラメーターの詳細については、https://www.openssl.org/docs/manmaster/man1/req.html のドキュメントを参照してください。

これらのファイルを作成したら、.cer ファイルを Azure にアップロードします。 Azure portal[設定] タブで、 [アップロード] を選択します。 .pem ファイルを保存した場所をメモします。

サブスクリプション ID を取得した後、証明書を作成し、.cer ファイルを Azure にアップロードして、Azure 管理エンドポイントに接続します。 サブスクリプション ID と .pem ファイルのパスを ServiceManagementService に渡すことで、接続します。

from azure import *
from azure.servicemanagement import *

subscription_id = '<your_subscription_id>'
certificate_path = '<path_to_.pem_certificate>'

sms = ServiceManagementService(subscription_id, certificate_path)

前の例では、 smsServiceManagementService オブジェクトです。 ServiceManagementService クラスは、Azure サービスを管理するときに使用する主要なクラスです。

Windows での管理証明書 (MakeCert)

makecert.exe を使用して、マシン上で自己署名管理証明書を作成できます。 管理者として Visual Studio コマンド プロンプトを開き、次のコマンドを使用して、AzureCertificate を、使用する証明書の名前に置き換えます。

makecert -sky exchange -r -n "CN=AzureCertificate" -pe -a sha1 -len 2048 -ss My "AzureCertificate.cer"

このコマンドにより、.cer ファイルが作成され、個人用証明書ストアにインストールされます。 詳細については、「Azure Cloud Services の証明書の概要」を参照してください。

証明書を作成したら、.cer ファイルを Azure にアップロードします。 Azure portal[設定] タブで、 [アップロード] を選択します。

サブスクリプション ID を取得した後、証明書を作成し、.cer ファイルを Azure にアップロードして、Azure 管理エンドポイントに接続します。 サブスクリプション ID と個人用証明書ストア内の証明書の場所を ServiceManagementService に渡すことで、接続します (再度、AzureCertificate を証明書の名前に置き換えます)。

from azure import *
from azure.servicemanagement import *

subscription_id = '<your_subscription_id>'
certificate_path = 'CURRENT_USER\\my\\AzureCertificate'

sms = ServiceManagementService(subscription_id, certificate_path)

前の例では、 smsServiceManagementService オブジェクトです。 ServiceManagementService クラスは、Azure サービスを管理するときに使用する主要なクラスです。

利用可能な場所を列挙する

ホスティング サービスに利用できる場所を列挙するには、list_locations メソッドを使用します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_locations()
for location in result:
    print(location.name)

クラウド サービスやストレージ サービスを作成するときは、有効な場所を指定する必要があります。 list_locations メソッドでは常に、現在利用可能な場所の最新のリストが返されます。 この記事の執筆時点で利用可能な場所は次のとおりです。

  • 西ヨーロッパ
  • 北ヨーロッパ
  • 東南アジア
  • 東アジア
  • 米国中部
  • 米国中北部
  • 米国中南部
  • 米国西部
  • 米国東部
  • 東日本
  • 西日本
  • ブラジル南部
  • オーストラリア東部
  • オーストラリア南東部

クラウド サービスを作成する

Azure でアプリケーションを作成して実行する場合、そのコードと構成は、総称して Azure クラウド サービスと呼ばれます。 (以前の Azure リリースでは、ホステッド サービスと呼ばれていました。) 新しいホステッド サービスを作成するには、create_hosted_service メソッドを使用します。 サービスを作成するには、ホステッド サービス名 (Azure 上で一意の名前)、ラベル (Base64 に自動的にエンコードされます)、説明、場所を渡します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myhostedservice'
label = 'myhostedservice'
desc = 'my hosted service'
location = 'West US'

sms.create_hosted_service(name, label, desc, location)

list_hosted_services メソッドを使用して、サブスクリプションのすべてのホステッド サービスを列挙できます。

result = sms.list_hosted_services()

for hosted_service in result:
    print('Service name: ' + hosted_service.service_name)
    print('Management URL: ' + hosted_service.url)
    print('Location: ' + hosted_service.hosted_service_properties.location)
    print('')

特定のホステッド サービスに関する情報を取得するには、get_hosted_service_properties メソッドにホステッド サービス名を渡します。

hosted_service = sms.get_hosted_service_properties('myhostedservice')

print('Service name: ' + hosted_service.service_name)
print('Management URL: ' + hosted_service.url)
print('Location: ' + hosted_service.hosted_service_properties.location)

クラウド サービスを作成した後、create_deployment メソッドを使用してコードをサービスにデプロイします。

クラウド サービスを削除する

クラウド サービスを削除するには、そのサービス名を delete_hosted_service メソッドに渡します。

sms.delete_hosted_service('myhostedservice')

サービスを削除する前に、そのサービスのすべてのデプロイを最初に削除する必要があります。 詳細については、「デプロイの削除」を参照してください。

デプロイを削除する

デプロイを削除するには、delete_deployment メソッドを使用します。 次の例では、v1 という名前のデプロイを削除する方法を示しています。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_deployment('myhostedservice', 'v1')

ストレージ サービスを作成する

ストレージ サービスを使用すると、Azure の BLOBテーブルキューにアクセスできます。 ストレージ サービスを作成するには、サービスの名前 (Azure 内で一意の 3 から 24 文字の小文字) が必要です。 また、説明、ラベル (最大 100 文字、Base64 に自動的にエンコードされます)、場所も必要です。 次の例では、場所を指定してストレージ サービスを作成する方法を示しています。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'mystorageaccount'
label = 'mystorageaccount'
location = 'West US'
desc = 'My storage account description.'

result = sms.create_storage_account(name, desc, label, location=location)

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

前の例では、create_storage_account 処理のステータスを取得するため、create_storage_account から返された結果を get_operation_status メソッドに渡しています。

ストレージ アカウントとそのプロパティを列挙するには、list_storage_accounts メソッドを使用します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_storage_accounts()
for account in result:
    print('Service name: ' + account.service_name)
    print('Location: ' + account.storage_service_properties.location)
    print('')

ストレージ サービスを削除する

ストレージ サービスを削除するには、そのサービス名を delete_storage_account メソッドに渡します。 ストレージ サービスを削除すると、サービスに格納されているすべてのデータ (BLOB、テーブル、キュー) が削除されます。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_storage_account('mystorageaccount')

利用可能なオペレーティング システムを列挙する

ホスティング サービスに利用できるオペレーティング システムを列挙するには、list_operating_systems メソッドを使用します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_operating_systems()

for os in result:
    print('OS: ' + os.label)
    print('Family: ' + os.family_label)
    print('Active: ' + str(os.is_active))

または、list_operating_system_families メソッドを使用することもできます。このメソッドでは、オペレーティング システムがファミリ別にグループ化されます。

result = sms.list_operating_system_families()

for family in result:
    print('Family: ' + family.label)
    for os in family.operating_systems:
        if os.is_active:
            print('OS: ' + os.label)
            print('Version: ' + os.version)
    print('')

オペレーティング システム イメージを作成する

オペレーティング システム イメージをイメージ リポジトリに追加するには、add_os_image メソッドを使用します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'mycentos'
label = 'mycentos'
os = 'Linux' # Linux or Windows
media_link = 'url_to_storage_blob_for_source_image_vhd'

result = sms.add_os_image(label, media_link, name, os)

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

利用できるオペレーティング システム イメージを列挙するには、list_os_images メソッドを使用します。 このメソッドでは、すべてのプラットフォーム イメージとユーザー イメージが対象となります。

result = sms.list_os_images()

for image in result:
    print('Name: ' + image.name)
    print('Label: ' + image.label)
    print('OS: ' + image.os)
    print('Category: ' + image.category)
    print('Description: ' + image.description)
    print('Location: ' + image.location)
    print('Media link: ' + image.media_link)
    print('')

オペレーティング システム イメージを削除する

ユーザー イメージを削除するには、delete_os_image メソッドを使用します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.delete_os_image('mycentos')

operation_result = sms.get_operation_status(result.request_id)
print('Operation status: ' + operation_result.status)

仮想マシンを作成する

仮想マシンを作成するには、最初に クラウド サービスを作成する必要があります。 その後で、create_virtual_machine_deployment メソッドを使用して、仮想マシンのデプロイを作成します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myvm'
location = 'West US'

#Set the location
sms.create_hosted_service(service_name=name,
    label=name,
    location=location)

# Name of an os image as returned by list_os_images
image_name = 'OpenLogic__OpenLogic-CentOS-62-20120531-en-us-30GB.vhd'

# Destination storage account container/blob where the VM disk
# will be created
media_link = 'url_to_target_storage_blob_for_vm_hd'

# Linux VM configuration, you can use WindowsConfigurationSet
# for a Windows VM instead
linux_config = LinuxConfigurationSet('myhostname', 'myuser', 'mypassword', True)

os_hd = OSVirtualHardDisk(image_name, media_link)

sms.create_virtual_machine_deployment(service_name=name,
    deployment_name=name,
    deployment_slot='production',
    label=name,
    role_name=name,
    system_config=linux_config,
    os_virtual_hard_disk=os_hd,
    role_size='Small')

仮想マシンを削除します

仮想マシンを削除するには、最初に delete_deployment メソッドを使用してデプロイを削除します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

sms.delete_deployment(service_name='myvm',
    deployment_name='myvm')

その後で、delete_hosted_service メソッドを使用して、クラウド サービスを削除することができます。

sms.delete_hosted_service(service_name='myvm')

キャプチャした仮想マシン イメージからの仮想マシンの作成

VM イメージをキャプチャするには、まず、capture_vm_image メソッドを呼び出します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

# replace the below three parameters with actual values
hosted_service_name = 'hs1'
deployment_name = 'dep1'
vm_name = 'vm1'

image_name = vm_name + 'image'
image = CaptureRoleAsVMImage    ('Specialized',
    image_name,
    image_name + 'label',
    image_name + 'description',
    'english',
    'mygroup')

result = sms.capture_vm_image(
        hosted_service_name,
        deployment_name,
        vm_name,
        image
    )

イメージが正常にキャプチャされたことを確認するには、list_vm_images API を使用します。 イメージが結果に表示されていることを確認します。

images = sms.list_vm_images()

キャプチャしたイメージを使用して仮想マシンを作成するために、前の手順と同様に、create_virtual_machine_deployment メソッドを使用しますが、今回は vm_image_name を渡します。

from azure import *
from azure.servicemanagement import *

sms = ServiceManagementService(subscription_id, certificate_path)

name = 'myvm'
location = 'West US'

#Set the location
sms.create_hosted_service(service_name=name,
    label=name,
    location=location)

sms.create_virtual_machine_deployment(service_name=name,
    deployment_name=name,
    deployment_slot='production',
    label=name,
    role_name=name,
    system_config=linux_config,
    os_virtual_hard_disk=None,
    role_size='Small',
    vm_image_name = image_name)

クラシック デプロイ モデルで Linux 仮想マシンをキャプチャする方法について詳しくは、Linux 仮想マシンのキャプチャに関するページをご覧ください。

クラシック デプロイ モデルで Windows 仮想マシンをキャプチャする方法について詳しくは、Windows 仮想マシンのキャプチャに関するページをご覧ください。

次のステップ

これで、サービス管理の基本を学習できました。Azure Python SDK の完全な API のリファレンス ドキュメントにアクセスして、複雑なタスクを簡単に実行することにより、Python アプリケーションを管理できます。

詳細については、 Python デベロッパー センターを参照してください。