リリース前にリソースはLockしようぜ。間違って削除したらおバカです。

はじめに

くどうです。

例えば、Azureで仮想マシンを使ってサービスをリリースするぜ!ってとき、リソースはちゃんとLockしてますか?
AWSでは、Termination Protectionを当たり前のように使います。意図しない削除を防止するためです。さすがに、意図して削除するのは悪意を持っているので・・・
lo02
上記ではEnable、つまり有効になった状態です。ボタン一つで変更が行えます。

では、Azureではどうでしょう。
できます。PowerShellやREST APIを使って・・・めんどうですな。しかもARMだけ。
でも、Azureが良いところはほぼすべてのリソースにLockをかけれます。
実際に、仮想マシンにLockをかけていきたいと思います。

参考は下記。
https://azure.microsoft.com/ja-jp/documentation/articles/resource-group-lock-resources/

Lockだぜ

操作はPowershellから行います。
対象サブスクリプションにてログインしている状態です。

最初に対象のリソースを確認します。

PS C:\Users\jkudo> Get-AzureRmResource

~~~~~~

Tags              : {}

Name              : ansible
ResourceId        : /subscriptions/6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx/resourceGroups/devrg/providers/Microsoft.Compute/virtualMachines/ansible
ResourceName      : ansible
ResourceType      : Microsoft.Compute/virtualMachines
ResourceGroupName : devrg
Location          : japaneast
SubscriptionId    : 6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx

~~~~~~

次に、Lockを行います。
必要な情報は
ResourceName : ansible
ResourceType : Microsoft.Compute/virtualMachines
ResourceGroupName : devrg

現状対応しているのは「削除不可」CanNotDelete のみ

New-AzureRmResourceLock -LockLevel CanNotDelete -LockName vmlock -ResourceName ansible -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName devrg
PS C:\Users\jkudo> New-AzureRmResourceLock -LockLevel CanNotDelete -LockName vmlock -ResourceName ansible -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName devrg

確認
Are you sure you want to create the following lock: /subscriptions/6c19861f-27c2-4010-b371-5fe8b793145b/resourceGroups/devrg/providers/Microsoft.Compute/virtualMachines/ansible/providers/Microsoft.Authorization/locks/vmlock
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y


Name                  : vmlock
ResourceId            : /subscriptions/6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx/resourceGroups/devrg/providers/Microsoft.Compute/virtualMachines/ansible/providers/Microsoft.Authorization/locks/vmlock
ResourceName          : ansible
ResourceType          : Microsoft.Compute/virtualMachines
ExtensionResourceName : vmlock
ExtensionResourceType : Microsoft.Authorization/locks
ResourceGroupName     : devrg
SubscriptionId        : 6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx
Properties            : @{Level=CanNotDelete}
LockId                : /subscriptions/6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx/resourceGroups/devrg/providers/Microsoft.Compute/virtualMachines/ansible/providers/Microsoft.Authorization/locks/vmlock

この状態で、実際に削除を行います(俺のAnsibleちゃんが消えませんように)。

lo01

ポータルから管理者権限もったユーザーで削除を行ったところ、消えませんでした。
サイズの変更も含め、その他の作業は行えます。

設定を削除する場合は Remove-AzureRmResourceLock を利用します。

PS C:\Users\jkudo> Remove-AzureRmResourceLock -LockName vmlock -ResourceName ansible -ResourceType Microsoft.Compute/virtualMachines -ResourceGroupName devrg

確認
Are you sure you want to delete the following lock: /subscriptions/6c19861f-xxxx-xxxx-xxxx-5fe8b793xxxx/resourceGroups/devrg/providers/Microsoft.Compute/virtualMachines/ansible/providers/Microsoft.Authorization/locks/vmlock
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):
True

その他に
・Set-AzureRmResourceLock
 New-AzureRmResourceLockと挙動は一緒です。

・Get-AzureRmResourceLock
 Lockされえている場合は値を返します。

AzureRmResourceLockに関するコマンドレッドは4つです。

おわりに

リリース時のLockは非常に重要です。むしろやってください。削除されて泣くのはあなたです。
現状、ポータルからの変更や確認ができません。早くできるようになってほしいですね。

ではでは

Azure,運用Azure

Posted by jkudo