[Azure] クラウドシェルでサブスクリプションを切り替える手順(Azure CLI, PowerShell)

Azureクラウドシェルではテナント内のサブスクリプションが全て表示されているため、複数のサブスクリプションがある場合は、最初に操作対象のサブスクリプションを設定する必要があります。

# Azure CLI(Bash)手順

サブスクリプションの確認：

```bash
$ az account list --output table
Name                CloudName    SubscriptionId              State    IsDefault
------------------  -----------  --------------------------  -------  -----------
SubscriptionName1   AzureCloud   977dxxxx-xxxxxxxx-xxxx1f6b  Enabled  True
SubscriptionName2   AzureCloud   35baxxxx-xxxxxxxx-xxxx3594  Enabled  False
SubscriptionName3   AzureCloud   1088xxxx-xxxxxxxx-xxxx3906  Enabled  False
SubscriptionName4   AzureCloud   669cxxxx-xxxxxxxx-xxxx2717  Enabled  False
SubscriptionName5   AzureCloud   2e61xxxx-xxxxxxxx-xxxx55bc  Enabled  False
```

サブスクリプションの設定：サブスクリプションIDまたはサブスクリプション名を指定します。

```bash
$ az account set --subscription 669cxxxx-xxxxxxxx-xxxx2717
※出力なし※
```

結果はもう一度listコマンドを実行して確認します（IsDefaultが変わっていることを確認）。

```bash
$ az account list --output table
Name                CloudName    SubscriptionId              State    IsDefault
------------------  -----------  --------------------------  -------  -----------
SubscriptionName1   AzureCloud   977dxxxx-xxxxxxxx-xxxx1f6b  Enabled  False
SubscriptionName2   AzureCloud   35baxxxx-xxxxxxxx-xxxx3594  Enabled  False
SubscriptionName3   AzureCloud   1088xxxx-xxxxxxxx-xxxx3906  Enabled  False
SubscriptionName4   AzureCloud   669cxxxx-xxxxxxxx-xxxx2717  Enabled  True
SubscriptionName5   AzureCloud   2e61xxxx-xxxxxxxx-xxxx55bc  Enabled  False
```

# PowerShell手順

サブスクリプションの確認：

```powershell
PS> Get-AzSubscription
Name                Id                         TenantId                   State
----                --                         --------                   -----
SubscriptionName1   977dxxxx-xxxxxxxx-xxxx1f6b 66c6xxxx-xxxxxxxx-xxxx48e4 Enabled
SubscriptionName2   1d26xxxx-xxxxxxxx-xxxx6a22 66c6xxxx-xxxxxxxx-xxxx48e4 Enabled
SubscriptionName3   2e61xxxx-xxxxxxxx-xxxx55bc 66c6xxxx-xxxxxxxx-xxxx48e4 Enabled
SubscriptionName4   59b3xxxx-xxxxxxxx-xxxx89aa 66c6xxxx-xxxxxxxx-xxxx48e4 Enabled
SubscriptionName5   669cxxxx-xxxxxxxx-xxxx2717 66c6xxxx-xxxxxxxx-xxxx48e4 Enabled
```

サブスクリプションの設定：サブスクリプションIDまたはサブスクリプション名を指定します。

```powershell
PS> Select-AzSubscription -Subscription 59b3xxxx-xxxxxxxx-xxxx89aa | Set-AzContext
Name                            Account     SubscriptionName    Environment   TenantId
----                            -------     ----------------    -----------   --------
SubscriptionName4 (59b3xxxx-xx… MSI@10342   SubscriptionName4   AzureCloud    59b3xxxx-xxxx…
```

対象サブスクリプションの確認(Get-AzContext)

```powershell
PS> Get-AzContext
Name                            Account     SubscriptionName    Environment   TenantId
----                            -------     ----------------    -----------   --------
SubscriptionName4 (59b3xxxx-xx… MSI@10342   SubscriptionName4   AzureCloud    59b3xxxx-xxxx…
```

# その他

サインイン手順(Azureクラウドシェルでは起動時にサインイン済みのため、通常は実行の必要はありません。)

Azure CLI(Bash):

```bash
$ az login

※テナント指定する場合
$ az login --tenant <ID or Name>
```

PowerShell：

```powershell
PS> Connect-AzAccount

※サブスクリプション指定する場合
PS> Connect-AzAccount -Subscription <ID or Name>

※テナント指定する場合
PS> Connect-AzAccount -Tenant <ID or Name>
```

# 参考資料

- [Use multiple Azure subscriptions](https://docs.microsoft.com/ja-jp/powershell/azure/manage-subscriptions-azureps?view=azps-6.5.0)
- [Set-AzContext](https://docs.microsoft.com/en-us/powershell/module/az.accounts/set-azcontext?view=azps-6.5.0)
- [Azure CLI を使用して Azure サブスクリプションを管理する方法](https://docs.microsoft.com/ja-jp/cli/azure/manage-azure-subscriptions-azure-cli)