Azure のツール周りの入門セッションを日本語訳した (後編) Azure Cloud Shell, Azure PowerShell 編 ( #MSIgniteTheTour 登壇内容 )

2020 年 1 月 22 - 23 日開催の、マイクロソフト公式大型カンファレンス『[Microsoft Ignite The Tour Osaka](https://www.microsoft.com/ja-jp/ignite-the-tour/osaka?WT.mc_id=docs-ignite-machiy)』にて、
私は以下の 2 セッション登壇することになりました。

1. 『[Microsoft のクラウド Azure 入門セッション](https://qiita.com/chomado/items/032454af29e3eb6a2c57)』
2. 『[Azure のツール周りの入門セッション](https://qiita.com/chomado/items/fcb431b0cb0a0d0aaef3)』 

最初の『Azure 入門セッション』の内容については [以前の記事](https://qiita.com/chomado/items/032454af29e3eb6a2c57) で書いているので、

今回は 2 セッション目の『Azure の CLI ツール周り入門』についてお話します。

## 翻訳前のセッション (英語)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/e594682f-7506-d6d8-d999-d81020931d40.png)


[Jeremy Likness さん](https://twitter.com/jeremylikness/)によるオリジナルセッション『 **Discovering Azure Tooling and Utilities** 』はこちらです：
https://myignite.techcommunity.microsoft.com/sessions/83203?source=sessions

今回、この、アメリカの『Microsoft Ignite 2019』で発表されたセッションを、
私が日本語訳して日本の方々向けにデリバーすることになったので、
この記事に日本語での補足も含めてまとめます。

で、デモ内容とかも全部記事に落としたら、めっちゃ長くなったので、
前編と後編に記事を分けて書きます。

# もくじ

1. **Visual Studio Code** - VSCode と Azure 拡張機能 ([前回の記事](https://qiita.com/chomado/items/fcb431b0cb0a0d0aaef3))
2. **Azure Cloud Shell** - Azure Cloud Shell と Azure CLI
3. **Azure PowerShell** 
4. **ARM Templates** - Azure Resource Manager Template

# Azure Cloud Shell, Azure PowerShell 編 (この記事) もくじ

1. 2.**Azure Cloud Shell** と **Azure CLI**
    1. **Azure Cloud Shell**
        - さまざまなアクセスポイント
        - オプション
        - プリインストールされたもの
    2. **Azure Cloud Shell デモ**
        1. Azure Cloud Shell デモ 1 - Azure ポータル画面での Cloud Shell
        1. Azure Cloud Shell デモ 2 - shell.azure.com での Cloud Shell
        1. Azure Cloud Shell デモ 3 - ローカルマシン上のターミナル での Cloud Shell
        1. Azure Cloud Shell デモ 4 - Cloud Shell で動かすシェルスクリプト (リソースグループを作る)
        1. Azure Cloud Shell デモ 5 - Cloud Shell で動かすシェルスクリプト (Azure Container Instances でコンテナを作る)


2. 3.**Azure PowerShell** 
    1. PowerShell
    1. PowerShell 環境チェック
    1. Azure PowerShell デモ


3. つぎ

# 2. Azure Cloud Shell と Azure CLI


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/83b57956-3d57-7db1-401d-0b761f5dd62f.png)

Azure のリソースにコマンドラインでアクセスできるツールです。

# Azure Cloud Shell

**Azure Cloud Shell** とは、 ブラウザ上で動くシェル環境で、Azure のリソースを管理できます。

参考）**Azure Cloud Shell** の公式ドキュメント
→ [https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview](https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview?WT.mc_id=docs-StudentHackathon-machiy)

↓ Web ブラウザの中、[Azure のポータル画面](https://portal.azure.com/) からアクセスできる **Azure Cloud Shell**

![Azure Cloud Shell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/cfe69f58-0556-f32e-3ee4-ba762d4f3434.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/d08f6090-1be0-1f29-7a3f-935498539b9d.png)

## さまざまなアクセスポイント

Azure のポータル画面をはじめ、
**Azure Cloud Shell** には、さまざまなアクセスポイントがあります

* [portal.azure.com](https://portal.azure.com) 
* [shell.azure.com](https://shell.azure.com/)
* Docs.Microsoft.com 
* Azure Mobile app 
* VS Code Azure Account extension

## オプション

* Bash or PowerShell 
* Integrated Cloud Shell editor 
* Pre-configured 
* $HOME persistence across sessions

Azure Cloud Shell 自体にはお金はかかりませんが、Cloud Shell の設定などを保存しておくために Azure Storage を使うので、その分はかかります（とても安い）。


Azure Storage に設定を保存しておくので、どこからアクセスしても同じ環境で動作する、とも言えます（$HOME persistence across sessions など）

## プリインストールされたもの

**Azure Cloud Shell** には、git, MySQL など、様々な環境がプリインストールされているので便利です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7a5b8c57-b067-d499-69fb-ec1bc2789723.png)


# Azure Cloud Shell デモ


## Azure Cloud Shell デモ 1 - Azure ポータル画面での Cloud Shell

まず、Web ブラウザで、Microsoft Azure のポータルページ [portal.azure.com](https://portal.azure.com/?WT.mc_id=docs-StudentHackathon-machiy) を開きます。

画面上部に「**Cloud Shell**」を開けるボタンがあるので、そこをクリックします。

**Azure Cloud Shell** とは、Azure リソースを管理するための、Web ブラウザ上で利用できるシェル環境です。

参考）**Azure Cloud Shell** の公式ドキュメント
→ [https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview](https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview?WT.mc_id=docs-StudentHackathon-machiy)


![Azure Cloud Shell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/02571018-bb75-80b1-1d79-353d33e55edb.png)

画面上部の「**Cloud Shell**」ボタンを押すと、
Web ブラウザの中の、画面下半分に shell ウィンドウが現れます。

![Azure Cloud Shell](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/cfe69f58-0556-f32e-3ee4-ba762d4f3434.png)

ここで、Bash と PowerShell を切り替えられます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/2f811fff-99c5-51a1-6f98-d87421a2711e.png)


## Azure Cloud Shell デモ 2 - shell.azure.com での Cloud Shell

[shell.azure.com](https://shell.azure.com/) でも **Azure Cloud Shell** を扱えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/556eda70-74f6-19ae-44c6-b5184f064399.png)

## Azure Cloud Shell デモ 3 - ローカルマシン上のターミナル での Cloud Shell

ローカルマシン上のターミナルでも **Azure Cloud Shell** を扱えます。
デモでは Windows Terminal からやっていました。

Windows Terminal では、さまざまなシェルが使えて便利です。（私は入れてないけど Git Bash も入ります）

↓ローカルの PowerShell Core (node version v12)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/9f8f9699-3d6b-ce2c-4629-e70fadb73c1c.png)

↓ クラウド上の Azure Cloud Shell (node version v8)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/f8c2b6f8-48e3-8032-6e18-2257dfb5cd6d.png)


## Azure Cloud Shell デモ 4 - Cloud Shell で動かすシェルスクリプト (リソースグループを作る)

VSCode に戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/79db375a-ac3b-40b3-dbad-3a5330198b6d.png)

````bash
# リソースグループを作る
az group create --name myACIDemo --location eastus

# コンテナを作る
az container create --resource-group myACIDemo --name mycontainer --image microsoft/aci-helloworld --dns-name-label aci-demo-007

# パブリック IP アドレスを表示させる
echo "Container IP Address:"
echo $(az container list --query "[?contains(name, 'mycontainer')].[ipAddress.ip]" --output tsv)
````

これを Cloud Shell にコピペします。（デモでは Windows Terminal のやつに貼ってた）

![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/28d8c15c-618a-804a-a203-730c9f5383ed.png)

最初の一行目 `az group create --name myACIDemo --location eastus` は、リソースグループを作っています。

「myACIDemo」という名前で、リージョンはアメリカ東部に、リソースグループを作る、という意味です。

「リソースグループ」というのは、Azure 上の論理的な docker コンテナのようなものです。（詳細は[こちらの記事『Microsoft のクラウド Azure の入門講座を和訳した (後編)』](https://qiita.com/chomado/items/439eeea4b3ce318fb5a8)で）

## Azure Cloud Shell デモ 5 - Cloud Shell で動かすシェルスクリプト (Azure Container Instances でコンテナを作る)

次は `az container create --resource-group myACIDemo --name mycontainer --image microsoft/aci-helloworld --dns-name-label aci-demo-007` を実行します。

`microsoft/aci-helloworld` というハローワールド的な docker image です。

すると指定した `dns-name-label` 通りの URL のものが立ちます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/542bf2b4-ce64-8fa3-68b3-6be08f9a0cf8.png)

これをコピーして web ブラウザで確認すると、ちゃんとこの URL で web サイトが立っていることが分かります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7df0e693-af9c-23cb-6bb7-8af9d7cf9013.png)

# 3. Azure PowerShell

まず、 **PowerShell** とは、マイクロソフトが開発したコマンドシェル/スクリプト言語です。
Windows Server 2008 R2 / Windows 7 から標準で搭載された Windows 管理用の CLI ツールです。私はコマンドプロンプトの後継と理解しています。

現在は主に Windows システム管理用に使われていますが、最近はもっと広く使われるようになっています。

## PowerShell

現在現役で頑張っている PowerShell はこの 2 種類があります

1. **Windows PowerShell**
    - Windows でのみ動く、Windows システム管理用 CLI ツール
    - .NET Framework 製 (= Windows でのみ動く)
    - Windows PowerShell 5.1 が Windows 10 標準で入っている
2. **PowerShell Core**
    - Windows, Linux, macOS で動く CLI ツール
    - .NET Core 製 (= Windows, Linux, macOS で動く)
    - GitHub でオープンソースで開発されている ([github.com/PowerShell/PowerShell](https://github.com/PowerShell/PowerShell))
    - 現在の最新は PowerShell Core 6.2 (2019年3月リリース)

### PowerShell 環境チェック


↓ 私のローカルマシン (Windows 10) で動いている PowerShell 環境。6.2.3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/560ec566-7cbf-66cb-e620-a830269148e6.png)

↓ Azure Cloud Shell で動いている PowerShell 環境。同じく最新の 6.2.3。あと Azure Cloud Shell の裏側 Linux なんですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/10508ce0-deb5-5e69-87d6-1487699374da.png)

# Azure PowerShell  デモ

ローカルマシンの PowerShell からも
Azure のリソースを制御してみましょう

````powershell
# コンテナをつくる
New-AzContainerGroup -ResourceGroup myACIDemo -Name mycontainerposh -Image microsoft/aci-helloworld -DnsNameLabel aci-demo-007-posh

# Get Public IP Address
Get-AzContainerGroup | where {$_.Name -eq 'mycontainerposh'} | Select IpAddress
````

このコマンドを、ローカルマシンの Power Shell に貼り付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/5a327f1f-b78e-4542-1ed7-93cd4c7a0395.png)

前回は `aci-demo-007` という URL で発行したので、
今回はちょっと変えて `aci-demo-007-posh` としています。

↓ ちゃんとその新しい URL でデプロイが完了していて、Webサイトが動いているのが確認できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/57a2f7f1-8188-eba0-0baf-3531f7198f7b.png)

2 つ目のコマンド `Get-AzContainerGroup | where {$_.Name -eq 'mycontainerposh'} | Select IpAddress` も叩いて
パブリック IP アドレスを表示させてみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/b8971c9b-517a-0e0a-172e-fbfa4032ac96.png)

ちなみに bash 版でも echo を使って同じようなことができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24609/7f911501-17ec-e8e4-4607-55cd503e15ca.png)



# 復習しよう

この記事で書いたことは
マイクロソフト公式の無料オンライン学習サイト『 [**Microsoft Learn**](https://docs.microsoft.com/ja-jp/learn/?WT.mc_id=docs-blog-machiy) 』の
[こちらのコース](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/ygqtw4xwzwj0?WT.mc_id=docs-blog-machiy)にもよくまとまっているので、
ぜひ自主学習にどうぞ！
→ [https://docs.microsoft.com/ja-jp/users/msignite2019](https://docs.microsoft.com/ja-jp/users/msignite2019/collections/ygqtw4xwzwj0?WT.mc_id=docs-blog-machiy)