AzureAutomationを利用して、Azuremediaserviceのストリーミングエンドポイントの起動を自動化しました。
powershellコマンドレットにストリーミングエンドポイントの起動/停止が用意されておらず少し手こずったため備忘録も兼ねて投稿いたします。コマンドレットが用意されていない動作を自動化する際の一助となればと思います。
・課題
Azureリソースに対する操作を自動化する際に、Automationを利用可能ですが、一部の動作はまだpowershellのコマンドレットが用意されいません。(CLIではすでにコマンド化されていたりするなどまちまちです)
・解決策
今回はrestapiを使用しました。Azureのサービスはまずrestapiとしてリリースされます。ポータル上での操作もpowershell/CLIもこのapiをラッピングしたものに過ぎないのでrestapiを利用すれば事実上全ての操作をAutomationで行えます。
1.マネージドIDの作成、ロールの付与
今回の方法ではAutomationアカウントのマネージドIDを使用して認証を行うため、事前にマネージドキー作成しておきます。作成後マネージドIDに対して対象となるリソースを操作するために必要なロールを割り当てる必要があります。詳しくはこちらをご参照ください。
2.powershhellのRUNBOOKを作成する
Connect-AzAccount -IdentityとすることでAutomationアカウントのマネージドIDを使用してログインできます。
try
{
"Logging in to Azure..."
Connect-AzAccount -Identity
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
1.マネージドIDの作成、ロールの付与
今回の方法ではAutomationアカウントのマネージドIDを使用して認証を行うため、事前にマネージドキー作成しておきます。作成後マネージドIDに対して対象となるリソースを操作するために必要なロールを割り当てる必要があります。詳しくはこちらをご参照ください。
2.powershhellのRUNBOOKを作成する
Connect-AzAccount -IdentityとすることでAutomationアカウントのマネージドIDを使用してログインできます。
try
{
"Logging in to Azure..."
Connect-AzAccount -Identity
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
try
{
"Logging in to Azure..."
Connect-AzAccount -Identity
}
catch {
Write-Error -Message $_.Exception
throw $_.Exception
}
※事前にAutomationアカウントに対して対象リソースの操作に必要な権限を付与しておく必要があります。
$accesstoken = Get-AzAccessToken -TenantId "{TenantId}"
するとGet-AzAccessTokenコマンドでアクセトークンを取得できます。テナントIDは Get-AzTenant コマンドで取得できます。詳しくはこちら
tokenが手に入ったので、tokenをAuthorizationヘッダーに渡せばapiを呼び出せます。
必要な項目を埋めた上でinvoke-webrequestコマンドでリクエストを送信します。
$token = "Bearer " + $accesstoken.Token
$header = @{
"Authorization" = $token;
"Content-Type" = "application/json"
}
$uri = "https://management.azure.com/subscriptions/{suscriptionkey}/resourceGroups/{resourcegroupNmae}/providers/Microsoft.Media/mediaservices/{AcountName}/streamingEndpoints/default/start?api-version=2022-08-01"
$postRequest = @{
Uri = $uri
Headers = $header
Method = 'POST'
ContentType = 'application/json'
}
$response = Invoke-WebRequest @postRequest
同様のやり方でAzureリソースに関する全ての操作をオートで実行できると思います。