Azure リソース (例: VM の開始/停止) を自動化したいと考えています。現在、Automation Account Runbook を使用しており、正常に動作していますが、次のようなフレームワークを実装する必要があります。
1) Azure バケットに新しいオブジェクト (Excel シート) を入れるたびに Runbook をトリガーします。2) 入力変数の Excel シートを読む
以下はランブックのコードです
上記のフレームワークに合ったランブックをトリガーする最良の方法を誰か教えてください
""" Azure Automation のドキュメント: https://aka.ms/azure-automation-python-documentation Azure Python SDK のドキュメント: https://aka.ms/azure-python-sdk """ azure から os をインポートします。 mgmt.compute インポート ComputeManagementClient インポート azure.mgmt.resource インポート オートメーションアセット
def get_automation_runas_credential(runas_connection): OpenSSL から import crypto import binascii from msrestazure import azure_active_directory import adal
# Get the Azure Automation RunAs service principal certificate
cert = automationassets.get_automation_certificate("AzureRunAsCertificate")
pks12_cert = crypto.load_pkcs12(cert)
pem_pkey = crypto.dump_privatekey(crypto.FILETYPE_PEM,pks12_cert.get_privatekey())
# Get run as connection information for the Azure Automation service principal
application_id = runas_connection["ApplicationId"]
thumbprint = runas_connection["CertificateThumbprint"]
tenant_id = runas_connection["TenantId"]
# Authenticate with service principal certificate
resource ="https://management.core.windows.net/"
authority_url = ("https://login.microsoftonline.com/"+tenant_id)
context = adal.AuthenticationContext(authority_url)
return azure_active_directory.AdalAuthentication(
lambda: context.acquire_token_with_client_certificate(
resource,
application_id,
pem_pkey,
thumbprint)
)
Azure Automation RunAs サービス プリンシパルを使用して Azure に対して認証する
runas_connection = Automationassets.get_automation_connection("AzureRunAsConnection") azure_credential = get_automation_runas_credential(runas_connection)
RunAs 資格情報を使用してコンピューティング管理クライアントを初期化し、操作するサブスクリプションを指定します。
compute_client = ComputeManagementClient( azure_credential, str(runas_connection["SubscriptionId"]) )
print('\nStart VM') async_vm_start = compute_client.virtual_machines.start(
'resource1', 'vm1') async_vm_start.wait() ''' print('\nStop VM') async_vm_stop=compute_client.virtual_machines.power_off(resource_group_name, vm_name) async_vm_stop.wait()'''