Azure PowerShell に初めて挑戦する人のための手引き①【入門編】
2019-11-18
azblob://2022/11/11/eyecatch/2019-11-18-tutorial1st-for-azure-powershell-000.jpg

Cloud Technical Trainerの藤井です。

今回は Microsoft Azureで提供される以下の2つの純正のCUI( Command-Line User Interface )のうち、 「Azure PowerShell」に初めて挑戦する人に向けての手引きを解説します。 評判が良ければシリーズ化して何回かに分けて解説する予定です。

  • Azure PowerShell : Windows ユーザー向けでPowerSehllをベースにしています
  • Azure CLI : Mac OS及びLinux OSユーザー向けでPythonをベースにしています

Azure PowerShell はMicorosoft 公式サイトhttps://docs.microsoft.com/ja-jp/powershell/azure/?view=azps-3.0.0 で詳細なドキュメントが公開されているものの、以下のような問題点により初めて取り組む人にはとっつきにくいため、解説します。

  • 個々の情報はすごく細かいけど、「いつ何をすればよいか」が分かりづらい
  • 複数のコマンドを組み合わせて使うケースがあるが、個々の役割の境界が分かりづらい
  • 複数の異なるコマンドで似たようなことができるが、使い分けが分かりづらい
  • そもそも英語しか公開されていないため、英語アレルギーがある人にはつらい

Azure PowerShell(あるいはAzure CLI)を利用するメリットと意義

Azure Portal を利用する場合と比較して、CUIツールを利用する場合、業務の標準化に貢献することが期待されます。 具体的には以下のようなことが可能になります。

Azure Portalと違ってUIがめったに変更されない。

「エクセル方眼紙にAzure Portalのスクリーンショットを貼る」みたいなマニュアルを作った経験のある方にとっては、涙が出るくらいうれしい特徴です。Azure PortalはUIが頻繁に改善(改変?)されるおかげで、短期間でマニュアルの更新を繰り返す「賽の河原」状態から解放されます。

「直感的な操作」を排除できる。

Azure Portalで操作していると陥りがちな、「よくわからないままなんとなくフィーリングで設定している」というリスクを、CUIでは軽減できます。 CUIではより厳密に理解をしていることが必要になります。 「知識のないユーザーでも直感的に操作できる」という状態は、コンシューマー向けのUI/UX開発の文脈だと正義ですが、「お仕事」としてAuzreを扱う場面になると、全く逆の意味になります。

作業内容を事前に準備しやすい

「本番作業時に実行する実行するコマンドを事前に全部書き出しておいて、テスト環境でリハーサルする」
というようなことが容易になります。 Azure Portal 操作でレビューなどを含めて事前準備を厳密にやろうと思ったら、スクリーンショットを大量にとることになります。

「業務の標準化」に加えて、「Azureの最新機能を利用できる」というのもメリットです。Azureの最新機能は、Azure PowerShellで利用可能になり、数カ月程度のタイムラグを挟んでAzure Portalでも利用可能になります。

上記のような点により、Microsoft Azureの利用においてAzure PowerShell(あるいはAzure CLI )をマスターすることは、「Azure初級者を卒業し、 Azure 中級者になるための条件の一つ」であると言えます。

チュートリアル

※以下はMicrosft Azureの「サブスクリプション」に対して、「共同作成者」以上の権限のアカウントをお持ちの方が前提です。

環境構築:Azure PowerShellをインストールする

Azure PowerShell は通常のPorwerShellに対してモジュールを追加することで利用できるようになります。
詳細はMicrosoft の公式サイトに譲るものとして、ここでは概略だけお伝えします。
公式サイト:https://docs.microsoft.com/ja-jp/powershell/azure/install-az-ps?view=azps-3.0.0

  1. PwerShellを起動します。
  2. PowerShellにて以下のコマンドを実行します。
Install-Module -Name Az -AllowClobber -Scope CurrentUser

3. 途中で表示される確認メッセージで「Y」を入力し、完了まで待機します。

準備

実際にチュートリアルに入る前に、準備として以下が必要になります。

  • 準備①:Microsfot Azure へAzure PowerShellからサインインする
  • 準備②:「接続先のサブスクリプション」を選択する
  • 準備③:リソースグループを作成する

準備①:Microsfot Azure へAzure PowerShellからサインインする

Azure Portalへのサインインにおいてご利用のアカウントを使って、Azure PowerShell上でサインイン操作を実行します。

  1. PowerShellにてlogin-AzAccountのコマンドを実行します。
  2. サインイン画面が表示されるため、Azure Portalへのサインインの場合と同様にアカウントを入力します。
  3. Azure Portalへのサインインの場合と同様にパスワードを入力します。
  4. 以下のように表示されたら、OKです。

準備②:「接続先のサブスクリプション」を選択する

<注意>「準備②」の内容は事故を防ぐために必ずお読みください。特に「サブスクリプション」のアクセス権限を2つ以上(例えば本番系と開発系など)持っている方は、作業開始前に必ず、「接続先のサブスクリプション」を確認しましょう。

  1. PowerShell上にてGet-AzSubscriptionを実行することによってアカウントがアクセス権限を持っているサブスクリプションが一覧で表示されます。
  2. 上記でIdの列に表示される値を選択して以下のコマンドを実行します。
Select-AzSubscription -SubscriptionId (サブスクリプションId)

3. 以下のような形式で現在の「接続先のサブスクリプション」が表示されます。

準備③:リソースグループを作成する

準備②で選択したサブスクリプションの配下にリソースグループを作成します。リソースグループは作成するときに、「リージョン(データセンターの所在地)」を指定します。

1. PowerShell上にて「New-AzResourceGroup」 コマンドを実行します。

New-AzResourceGroup -Name "fixer-001-rg" -Location "japaneast"

各パラメーターは以下を意味します。
-Name :作成するリソースグループの名前(上の例ではfixer-001-rg)
-Location :リソースグループを作成するリージョン(上の例では東日本)

2. PowerShell上の完了のメッセージで「Provisioning State:Succeeded」が表示されればOKです。

チュートリアル(入門編)

今回の「チュートリアル(入門編)」では、比較的簡単な「ネットワークセキュリティーグループ」を題材に、以下の一連の操作を実施します。

  • チュートリアル(入門編)①:新規で作成する
  • チュートリアル(入門編)②:情報を取得する
  • チュートリアル(入門編)③:受信セキュリティ規則を追加する
  • チュートリアル(入門編)④:削除する

チュートリアル(入門編)①:新規で作成する

1. PowerShell上にて「New-AzResourceGroup」を実行します。

New-AzNetworkSecurityGroup -Name "fixer-nsg" -Location "japaneast" -ResourceGroupName "fixer-001-rg"

各パラメーターは以下を意味します。
-Name :作成するネットワークセキュリティーグループの名前(上の例では fixer-nsg )
-Location :ネットワークセキュリティーグループを作成するリージョン(上の例では東日本)
-ResourceGroupName :ネットワークセキュリティーグループを所属させるリソースグループ(上の例では 準備③で作成したfixer-001-rg )

2.PowerShell上の完了のメッセージで「Provisioning State:Succeeded」が表示されればOKです。

チュートリアル(入門編)②:情報を取得する

作成したネットワークセキュリティーグループの情報を取得します。

1. PowerShell上にて「Get-AzNetworkSecurityGroup」を実行します。

Get-AzNetworkSecurityGroup -Name "fixer-nsg" -ResourceGroupName "fixer-001-rg"

各パラメーターは以下を意味します。
-Name :対象のネットワークセキュリティーグループの名前(上の例では チュートリアル(入門編)①で作成したfixer-nsg )
-ResourceGroupName :対象のネットワークセキュリティーグループが所属するリソースグループ(上の例では チュートリアル(入門編) ①で所属させたfixer-001-rg )

2.結果として表示される内容は、 チュートリアル(入門編)① の結果として表示されるものと同じです。

チュートリアル(入門編)③:受信セキュリティ規則を追加する

作成したネットワークセキュリティーグループを対象に受信セキュリティ規則を追加します。今回追加する受信セキュリティ規則では、インターネットからHTTPSの443ポートへのアクセスを許可します。

  1. チュートリアル(入門編)② と同様に PowerShell上にて「 Get-AzNetworkSecurityGroup」を実行し、結果を変数 $nsgObject に格納します。
$nsgObject = Get-AzNetworkSecurityGroup -Name "fixer-nsg" -ResourceGroupName "fixer-001-rg"

2. PowerShell上にて「 Add-AzNetworkSecurityRuleConfig 」を実行して、結果を変数 $nsgObject に格納します。
※この段階では、端末上で変数 $nsgObjectAzureの値が更新されているだけで、Azure 上のネットワークセキュリティーグループにはまだ反映されていません。

$nsgObject = Add-AzNetworkSecurityRuleConfig -NetworkSecurityGroup $nsgObject -Direction Inbound -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 443 -Priority 100 -Protocol Tcp -Access Allow  -Name permmitInboundHttps -Description "Tech Blog"

各パラメーターは以下を意味します。
-NetworkSecurityGroup :対象のネットワークセキュリティーグループを指定します。
-Direction :受信セキュリティ規則 or 送信 セキュリティ規則 を指定します。
-SourceAddressPrefix :「ソースIPアドレス/CIDR範囲」を指定します。
-SourcePortRange :「ソースポート範囲」を指定します。
-DestinationAddressPrefix :「宛先」を指定します。
-DestinationPortRange :「宛先ポート範囲」を指定します。
-Protocol :「プロトコル」を指定します。
-Access :「アクション」について許可 or 拒否を指定します。
-Priority :「優先度」を指定します。
-Name :作成するセキュリティ規則の名前を指定します。(上の例では permmitInboundHttps )
-Description :このセキュリティ規則に関する説明を入力します。(上の例では 「Tech Blog」)

3. PowerShell上にて「Set-AzNetworkSecurityGroup」を実行して、Azure上のネットワークセキュリティーグループに受信セキュリティ規則を追加します。

Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsgObject

各パラメーターは 以下を意味します。
-NetworkSecurityGroup :対象のネットワークセキュリティーグループを指定し、かつネットワークセキュリティーグループに適用する値を保持します。

4. PowerShell上の完了のメッセージで「Provisioning State:Succeeded」が表示されればOKです。
チュートリアル(入門編)① や チュートリアル(入門編) ②の結果とは別に、より下の階層で「Security Rules」において表示されます。

チュートリアル(入門編)④:削除する

ネットワークセキュリティーグループを削除します。

1. PowerShell上にて「Remove-AzNetworkSecurityGroup」を実行します。

Remove-AzNetworkSecurityGroup  -Name "fixer-nsg" -ResourceGroupName "fixer-001-rg"   -Force 

各パラメーターは以下を意味します。
-Name :対象のネットワークセキュリティーグループの名前(下の例ではチュートリアル(入門編) ①で作成したfixer-nsg )
-ResourceGroupName :対象のネットワークセキュリティーグループが所属するリソースグループ(上の例では チュートリアル(入門編)①で所属させたfixer-001-rg )
-Force :確認メッセージの表示をスキップします

2. チュートリアル(入門編)② と同様に「Get-AzNetworkSecurityGroup」を実行すると、下図のようなエラーが返ってくることで、リソースが削除済みであることが確認できます。

解説

操作対象のネットワークセキュリティーグループを指定する時に「入力すべきデータの型」が、操作内容によって以下のように異なります。 下記のような差異は、ネットワークセキュリティグループに限らず、様々なAzureリソースをAzure PowerShellから操作する場合に一般的に存在しています。

  • 受信セキュリティ規則を追加する場合:対象のネットワークセキュリティーグループに関する情報一式を、「オブジェクト型データ」として入力する。
  • 情報を取得する場合もしくは削除する場合:対象のネットワークセキュリティーグループの名前と、所属するリソースグループの名前をそれぞれ「文字列型データ」として入力する

ネットワークセキュリティーグループに関する情報一式を格納するオブジェクト構造は「PSNetworkSecurityGroup」という名称のClassとして定義されています。 「PSNetworkSecurityGroup」 の詳細はこちらhttps://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.commands.network.models.psnetworksecuritygroup?view=azurerm-ps
以下のような方法で必要な値を格納させた状態で「PSNetworkSecurityGroup」のオブジェクトを取得できます。

a.「 New-AzNetworkSecurityGroup 」を実行した結果の値を利用する。

チュートリアル(入門編)①のように新規で作成して、そのまま連続して受信セキュリティ規則を追加する場合に選択します。

b.「Get-AzNetworkSecurityGroup」を実行した結果を利用する。

チュートリアル(入門編)②のように、作成済みのネットワークセキュリティーグループに対して、後から受信セキュリティ規則を追加する場合に選択します。


評判が良ければシリーズ化して何回かに分けて解説する予定です。
皆さんもぜひ挑戦してみてください。