Azure Resource Manager で Python を使用して Azure リソース グループを管理する方法について説明します。
前提条件
Python 3.8 以降がインストールされています。 最新バージョンをインストールするには、Python.org を確認してください。
仮想環境にインストールされている Python 用の次の Azure ライブラリ パッケージ。 いずれかのパッケージをインストールするには、
pip install {package-name}
を使用します。- azure-identity
- azure-mgmt-resource
- azure-mgmt-storage
これらのパッケージの古いバージョンが既に仮想環境にインストールされている場合は、
pip install --upgrade {package-name}
での更新が必要になる可能性があります。この記事の例では、CLI ベースの認証 (
AzureCliCredential
) を使用します。 環境によっては、認証の前にまずaz login
を実行することが必要になる場合があります。Azure サブスクリプション ID を持つ環境変数。 Azure サブスクリプション ID を取得するには、次を使用します。
az account show --name 'your subscription name' --query id -o tsv
値を設定するには、環境のオプションを使用します。
リソース グループとは
リソース グループは、Azure ソリューションの関連するリソースを保持するコンテナーです。 リソース グループには、ソリューションのすべてのリソースか、グループとして管理したいリソースのみを含めることができます。 組織にとって最も有用になるように、リソースをリソース グループに追加する方法を決定します。 通常は、同じライフサイクルを共有するリソースを同じリソース グループに追加して、グループとして簡単にデプロイ、更新、および削除できるようにします。
リソース グループには、リソースについてのメタデータが格納されます。 リソース グループの場所を指定するとき、このメタデータが格納される場所を指定することになります。 コンプライアンス上の理由から、データが特定のリージョンに格納されるようにすることが必要な場合があります。
リソース グループを作成する
リソース グループを作成するには、ResourceManagementClient.resource_groups.create_or_update を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(
"exampleGroup",
{
"location": "westus"
}
)
print(f"Provisioned resource group with ID: {rg_result.id}")
リソース グループの一覧を表示する
サブスクリプションのリソース グループを一覧表示するには、ResourceManagementClient.resource_groups.list を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_list = resource_client.resource_groups.list()
for rg in rg_list:
print(rg.name)
1 つのリソース グループを取得するには、ResourceManagementClient.resource_groups.get を使用してリソース グループの名前を指定します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.get("exampleGroup")
print(f"Retrieved resource group {rg_result.name} in the {rg_result.location} region with resource ID {rg_result.id}")
リソース グループを削除する
リソース グループを削除するには、ResourceManagementClient.resource_groups.begin_delete を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.begin_delete("exampleGroup")
Azure Resource Manager によってリソースの削除の順序が決定される方法の詳細については、「Azure Resource Manager によるリソース グループの削除」を参照してください。
リソースのデプロイ
Azure リソースをデプロイするには、Python クラスを使用するか、Azure Resource Manager テンプレート (ARM テンプレート) をデプロイします。
Python クラスを使用してリソースをデプロイする
次の例では、StorageManagementClient.storage_accounts.begin_create を使用してストレージ アカウントを作成します。 ストレージ アカウントの名前は、Azure 全体で一意である必要があります。
import os
import random
from azure.identity import AzureCliCredential
from azure.mgmt.storage import StorageManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
random_postfix = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz1234567890', k=13))
storage_account_name = "demostore" + random_postfix
storage_client = StorageManagementClient(credential, subscription_id)
storage_account_result = storage_client.storage_accounts.begin_create(
"exampleGroup",
storage_account_name,
{
"location": "westus",
"sku": {
"name": "Standard_LRS"
}
}
)
ARM テンプレートを使用してリソースをデプロイする
ARM テンプレートをデプロイするには、ResourceManagementClient.deployments.begin_create_or_update を使用します。 次の例では、storage.json
という名前のローカル テンプレートが必要です。
import os
import json
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
with open("storage.json", "r") as template_file:
template_body = json.load(template_file)
rg_deployment_result = resource_client.deployments.begin_create_or_update(
"exampleGroup",
"exampleDeployment",
{
"properties": {
"template": template_body,
"parameters": {
"storagePrefix": {
"value": "demostore"
},
},
"mode": DeploymentMode.incremental
}
}
)
次の例は、デプロイする storage.json
という名前の ARM テンプレートを示しています。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storagePrefix": {
"type": "string",
"minLength": 3,
"maxLength": 11
}
},
"variables": {
"uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2022-09-01",
"name": "[variables('uniqueStorageName')]",
"location": "eastus",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2",
"properties": {
"supportsHttpsTrafficOnly": true
}
}
]
}
ARM テンプレートのデプロイの詳細については、ARM テンプレートと Azure CLI を使用したリソースのデプロイに関する記事を参照してください。
リソース グループをロックする
ロックすることによって、組織内の他のユーザーが重要なリソースを誤って削除したり変更したりするのを防ぎます。
リソース グループとそのリソースが削除されないようにするには、ManagementLockClient.management_locks.create_or_update_at_resource_group_level を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.create_or_update_at_resource_group_level(
"exampleGroup",
"lockGroup",
{
"level": "CanNotDelete"
}
)
リソース グループのロックを取得するには、ManagementLockClient.management_locks.list_at_resource_group_level を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_result = lock_client.management_locks.get_at_resource_group_level("exampleGroup", "lockGroup")
print(f"Lock {lock_result.name} applies {lock_result.level} lock")
リソース グループのロックを削除するには、ManagementLockClient.management_locks.delete_at_resource_group_level を使用します。
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ManagementLockClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
lock_client = ManagementLockClient(credential, subscription_id)
lock_client.management_locks.delete_at_resource_group_level("exampleGroup", "lockGroup")
詳細については、「Azure Resource Manager によるリソースのロック」を参照してください。
リソース グループにタグを適用する
リソース グループやリソースにタグを適用して、アセットを論理的に整理できます。 詳細については、 タグを使用した Azure リソースの整理に関するページを参照してください。
リソース グループをテンプレートにエクスポートする
ARM テンプレートの作成に役立てるために、既存のリソースからテンプレートをエクスポートできます。 詳細については、「Azure portal を使用してテンプレートをエクスポートする」を参照してください。
リソース グループへのアクセスを管理する
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure のリソースへのアクセスを管理する方法です。 詳細については、「Azure CLI を使用して Azure ロールの割り当てを追加または削除する」を参照してください。
次のステップ
- Azure Resource Manager については、「Azure Resource Manager の概要」を参照してください。
- 認証オプションの詳細については、「Azure SDK for Python を使用して Azure サービスに対して Python アプリを認証する方法」を参照してください。