ClooudShell とは
ブラウザーベースのシェル環境
ユーザー視点では、気軽に使える Azure 用ブラウザベースのコマンドラインツールですが、裏側では色々なことが行われています。
Cloud Shell は、起動時にコンピューター(Ubuntu 16.04 LTS)をプロビジョニングし、そこがコマンドの実行環境となり、$HOME の情報は 5GB のイメージファイルとして、アカウントストレージの File Share に保管されています。
CloudShell のイメージ図
イメージがつきやすいよう書いてみました。だいたいこんな感じかなと思います。
Azure Cloud Shell の概要
Azure Cloud Shell の概要 ではこのように紹介されています。
- Cloud Shell は、ユーザーごとにセッション単位で一時的に提供されるホスト上で実行されます。
- Cloud Shell は、無操作状態で 20 分経過するとタイムアウトとなります。
- Cloud Shell では、Azure ファイル共有がマウントされている必要があります。
- Cloud Shell では、Bash と PowerShell に対して同じ Azure ファイル共有が使用されます。
- Cloud Shell には、ユーザー アカウントごとに 1 台のマシンが割り当てられます。
- Cloud Shell はファイル共有に保持されている 5 GB のイメージを使用して $HOME を永続化します。
- Bash では、標準の Linux ユーザーとしてアクセス許可が設定されます。
ふむふむ。この辺は軽く流していきましょう。
早速、使ってみる。
画面右上のここをぽちっと、
BASH か POWERSHELL どっちか聞かれ、BASH を選択
ストレージアカウントを作れと言われ、
East US リージョンに、cloudshell というストレージアカウントで、sample という File Share を新規作成します。
しかし、ストレージアカウントの cloudshell は Azure の予約語のため使用できないということで、clooudshellkoizumi という名前に変更しました。
もう一度、create storage を実行すると、、、出来たようです。
Your cloud drive has been created in:
Subscription Id: 71e0001a-0944-4a79-a3ec-5db6b44ab936
Resource group: koizumi
Storage account: cloudshellkoizumi # "cloudshell" は予約語で使用不可
File share: sample
Initializing your account for Cloud Shell...\
Requesting a Cloud Shell.Succeeded.
Connecting terminal...
Welcome to Azure Cloud Shell
Type "az" to use Azure CLI
Type "help" to learn about Cloud Shell
atsushi_koizumi@Azure:~$
マウントしている
df コマンドを実行してみると、先ほど作成したストレージアカウントをマウントしているのが分かります。
atsushi_koizumi@Azure:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 50758760 18050508 32691868 36% /
tmpfs 2008536 0 2008536 0% /dev
tmpfs 2008536 0 2008536 0% /sys/fs/cgroup
/dev/sda1 50758760 18050508 32691868 36% /home
shm 65536 8 65528 1% /dev/shm
//cloudshellkoizumi.file.core.windows.net/sample 6291456 5242880 1048576 84% /usr/csuser/clouddrive
tmpfs 2008536 0 2008536 0% /sys/firmware
/dev/loop0 5095040 20552 4795960 1% /home/atsushi_koizumi
CloudhShell が File Share をマウントしている仕組みを理解
CloudShell はストレージアカウントをマウントしている
ストレージアカウントの File Share は、SMB 3.0 のプロトコルでファイル共有する機能を提供するサービスです。
SMB は、TCP ポート 445 経由で通信します。相手方のコンピュータが Ubuntu なら cifs-utils のパッケージが使われます。詳細はこちら。
CkoudShell はこの File Share を使って、実行環境 $HOME のイメージファイルを保持しています。
CloudShell の実行環境を見てみると
atsushi_koizumi@Azure:~$ ls -al
total 32
drwxr-xr-x 3 atsushi_koizumi atsushi_koizumi 4096 Jun 30 01:37 .
drwxrwxrwx 3 root root 4096 Jun 30 01:37 ..
drwx------ 5 atsushi_koizumi atsushi_koizumi 4096 Jun 29 13:17 .azure
-rw------- 1 atsushi_koizumi atsushi_koizumi 668 Jun 30 01:38 .bash_history
-rw-r--r-- 1 atsushi_koizumi atsushi_koizumi 220 Aug 31 2015 .bash_logout
-rw-r--r-- 1 atsushi_koizumi atsushi_koizumi 3966 Jun 29 13:17 .bashrc
lrwxrwxrwx 1 atsushi_koizumi atsushi_koizumi 22 Jun 30 01:37 clouddrive -> /usr/csuser/clouddrive
-rw-r--r-- 1 atsushi_koizumi atsushi_koizumi 655 Jul 12 2019 .profile
-rw-r--r-- 1 atsushi_koizumi atsushi_koizumi 42 Jun 29 13:17 .tmux.conf
atsushi_koizumi@Azure:~$ ls -al clouddrive/
total 4
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 .
drwxr-xr-x 3 root root 4096 Jun 30 01:26 ..
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 .cloudconsole
atsushi_koizumi@Azure:~$ ls -al clouddrive/.cloudconsole/
total 5242880
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 .
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 ..
-rwxrwxrwx 1 atsushi_koizumi atsushi_koizumi 5368709120 Jun 29 17:02 acc_atsushi_koizumi.img
このように、イメージファイルが格納されています。
ストレージアカウント側を見てみると
ストレージアカウント cloudshellkoizumi の sample という File Share に acc_atsushi_koizumi.img がありますね。
試しにファイルアップロード
試しにこの File Share の sample にファイルをアップロードするとどうなるでしょうか。
CloudShell で確認してみます。
atsushi_koizumi@Azure:~$ ls -al clouddrive/
total 13
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 .
drwxr-xr-x 3 root root 4096 Jun 30 01:26 ..
-rwxrwxrwx 1 atsushi_koizumi atsushi_koizumi 8217 Jun 30 03:20 azure-cloudshell-04.png
drwxrwxrwx 2 atsushi_koizumi atsushi_koizumi 0 Jun 29 13:17 .cloudconsole
ちゃんと反映されてますね。
CloudShell で何ができる?
個人的に嬉しい機能は以下です。
- Bash
- Azure CLI
- git
- terraform
- docker
- mysql
- psql
- sqlcmd
- python
- go
これらは最初からインストールされていますので、すぐに作業を始められるように作られています。
もちろん、bash 環境(Ubuntu)であれば、apt も実行可能なのでバージョンが気に入らなければ最新版を入れることも可能です。
詳しくはこちら「Azure Cloud Shell の機能とツール」を見て頂くのが早いと思います。
CloudShell めちゃくちゃ便利ですね
自分のPCに何もインストールしなくても、Chrom 等のブラウザさえあれば何でもできます。
CloudShell を使えば resource も作れます。AWS ClI で resource に変更を加えることも出来ます。そのまま作った resource に ssh でログインすることも出来ます。
git と terraform と CloudShell を使えば、全てクラウド上で resource のコード管理も出来てしまいます。
さらに、エディターで VSCode を利用している私としては CloudShell の拡張機能があることも大きなメリットです。VSCode は Microsoft 製ですからね。
しばらくは、Azure 漬けの日々になりそうです。
Icons made by Flat Icons from www.flaticon.com
StorageAccountCloudShell