2018年9月30日日曜日

Azure サブスクリプションから登録削除する際、Remove-AzsRegistration を実行すると、オプション不足に遭遇した

機会ありまして、Azure Stack を Azure サブスクリプションから別の Azure サブスクリプションへ再登録しました。
その際に遭遇した事象を記載します。
今回の様に、一つのアカウントで複数の Azure サブスクリプションを関連づけている場合に、別の Azure サブスクリプションへ再登録し直すというのは往々にしてありそうです。
Remove-AzsRegistration にどういうオプションを指定するかは要注意ですね。

事象としては、件名の通り、
Azure サブスクリプションから登録削除する際、Remove-AzsRegistration を実行すると、オプション不足に遭遇した
ということです。

通常は、
Renew or change registration
Switch registration to a new subscription
に記載ある通り、

Remove-AzsRegistration -PrivilegedEndpointCredential $YourCloudAdminCredential -PrivilegedEndpoint $YourPrivilegedEndpoint

を実行すればよいわけです。
が、上記を実行したところ

Searching for registration resource in Azure...
************************ Error ************************
Registration resource with matching CloudId property GUIDが表示される was not found. Please ensure a registration resource exists in the provided subscription & resource group.
*********************** Ending registration action during Remove-AzsRegistration ***********************

と出ちゃいました。

Remove-AzsRegistration は、Azurestack-tools に含まれています。
なので、PowerShell のソースコードから上記エラーメッセージ出力個所を確認して、そこから前にさかのぼれば何かわかるのではと考えました。

ソースコードは、
AzureStack-Tools/Registration/RegisterWithAzure.psm1
が該当します。
現在のソースコードだと、396行目に該当メッセージを出力する個所があります。
※本ブログエントリーに記載した行番号/行数は、今後改版に伴い変わる可能性がありそうです。ご注意ください。

Log-Throw -Message "Registration resource with matching CloudId property $($stampInfo.CloudId) was not found. Please ensure a registration resource exists in the provided subscription & resource group." -CallingFunction $($PSCmdlet.MyInvocation.MyCommand.Name)

このメッセージが含まれる if 文ではなく、その前(すなわち if ($RegistrationName)から始まる)ブロックを見ます。

この if 文は条件が真だと、メッセージが出ます。
が上記エラーメッセージまで、そんなメッセージは出ていません。
if ($RegistrationName) の条件が偽になったため、上記エラーメッセージが出たと判断できます。

それと登録時に実行した
Set-AzsRegistration から生成されたログ
AzureStack.Activation.Set-AzsRegistration-YYYY-MM-DD.log
から、

"ResourceId": "/subscriptions/現在登録されているAzureサブスクリプションのGUID/resourceGroups/現在登録されているリソース名/providers/Microsoft.AzureStack/registrations/現在登録されているレジストレーション名",

という行がありますので、必ずチェックしましょう。

ということで、Remove-AzsRegistration に
-RegistrationName 現在登録されているレジストレーション名
を与えて実行したもののまた失敗。。。

Azure ポータル画面を見直しつつ、
現在のソースコードだと、356行目

$registrationResourceId = "/subscriptions/$($AzureContext.Subscription.SubscriptionId)/resourceGroups/$ResourceGroupName/providers/Microsoft.AzureStack/registrations/$registrationName"

と369行目

$registrationResourceId = "/subscriptions/$($AzureContext.Subscription.SubscriptionId)/resourceGroups/$ResourceGroupName/providers/Microsoft.AzureStack/registration

を見て、$ResourceGroupName もうまく指定されていないのではないかと思いました。

Remove-AzsRegistration に
-ResourceGroupName 現在登録されているリソース名
をさらに追加して実行したところ、うまくいきました。

最終的な PowerShell コマンドレットは、下記の通りとなりました。

Remove-AzsRegistration -PrivilegedEndpointCredential $YourCloudAdminCredential -PrivilegedEndpoint $YourPrivilegedEndpoint -ResourceGroupName "現在登録されているリソース名" -RegistrationName "現在登録されているレジストレーション名"

※ $YourPrivilegedEndpoint は、IPアドレスでも行けましたね。

0 件のコメント:

コメントを投稿