Last Updated:

Azure Container InstancesのGAにちなんだ実験

azure

コンテナインスタンスが遂にGAした。そして、非常にパワーアップしたのと、さらに楽しみな話がアナウンスされている。

Azure Container Instances now generally available

ここでは折角なので色々試してみようと思う。

リージョンが増えた

これまでのリージョンに加え、現在アナウンスされているContainer Instancesが使えるリージョンは以下の6つだ。

西ヨーロッパ、北ヨーロッパ、米国西部、米国東部、米国西部2、東南アジア
West US, West US 2, East US, West Europe, North Europe, and Southeast Asia.

素朴な疑問として、日本から使うとどのくらいレイテンシーがあるのだろうか。 気になったので確かめてみる。

実験

それぞれの地域にNginxを立ててデフォルトページを返すようにしてリプライの速度を5回計測する。

手順は以下の通りだ。

  1. 各リージョンにリソースグループを作成する
  2. コンテナインスタンスでNginxを立ち上げる
  3. 払い出されたIPへリクエストを送る

インスタンスの作成はAzure Cloud Shellから行った。(以下、その一部)

yuya@Azure:~$ az group create -n pakuecitest2 -l northeurope
Location     Name
-----------  ------------
northeurope  pakuecitest2
yuya@Azure:~$ az container create -g pakuecitest2 -n nginx --image nginx --ports 80 --ip-address Public
Name    ResourceGroup    ProvisioningState    Image    IP:ports           CPU/Memory       OsType    Location
------  ---------------  -------------------  -------  -----------------  ---------------  --------  -----------
nginx   pakuecitest2     Creating             nginx    52.169.231.120:80  1.0 core/1.5 gb  Linux     northeurope

レスポンスの計測に使ったコマンドはこちら

curl -kL 'http://52.169.231.120/' -o /dev/null -w "%{time_total}" 2> /dev/null

結果

1、自宅からのアクセス結果

ヨーロッパ西部ヨーロッパ北部米国西部米国西部2米国東部東南アジア
0.6414130.5888100.2417320.2644240.3279770.244405
0.5700140.6496610.2371680.2519970.3281690.243815
0.6555850.5788690.2360890.2556450.3286080.248554
0.5787650.6173740.2525130.2466920.3366120.247462
0.5427670.5527330.2360310.2576070.3264280.238773

2、東日本に作ったLinuxVMからのアクセス結果

ヨーロッパ西部ヨーロッパ北部米国西部米国西部2米国東部東南アジア
0.4890.4830.2170.2100.3080.140
0.4900.4840.2180.2110.3160.140
0.4890.4840.2170.2120.3070.140
0.4860.4840.2180.2130.3070.141
0.4910.4850.2170.2120.3060.140

3、Cloud Shellからのアクセス結果

ヨーロッパ西部ヨーロッパ北部米国西部米国西部2米国東部東南アジア
0.3770.3950.4210.3400.4460.004
0.3780.3820.4190.3410.4580.005
0.3770.3840.4220.3400.4590.005
0.3750.3660.4210.3410.4410.066
0.3780.3780.3840.3400.4380.005

考察

1は自宅からのアクセスなので公衆回線からそれぞれのインスタンスへのアクセスという意味合いになる。
2はAzureの東日本リージョンからであるため、Microsoftが提供しているプライベートなネットワークを経由してのアクセスとなる。
3はCloud Shellを使っているため、Azure上のどこかで起動しているコンテナからのアクセスということになる。

2と3はAzureのネットワークを利用するがリージョンが異なるため、結果から透けて見えるものがあるだろうと予想した。

3の東南アジアへのアクセスが異常に早いことについては、ここで使っていたCloud Shellは東南アジアで起動していたと予想する。つまり、近いと早いというのが証明されたという意味ではこれも重要な実績と言えるだろう。

結果について感じるところとしては

  1. Azure上からのアクセスは非常に安定しており、かつ公衆回線経由よりも早い
  2. 日本のリージョンから他を使うのであれば、東南アジアと米国西部2箇所は使いやすい
  3. デモで使うなら東南アジアが良さそう

といったところだろうか。

とても地味だし、ある程度予想ができる結果ではあるものの、こういった実験をちゃんとやっておくことは重要だと個人的には考えている。

Container Instancesのコマンドについて

先ほどの実験で使ったCloud Shellは非常に便利なツールだ。 最初から様々なツールがインストールされており常に最新版が使えるので環境構築の手間が省ける。

このツール内ではAzure CLIが利用できる。コマンドラインでも使い方を見られるが、公式ドキュメントはこちら。

https://docs.microsoft.com/en-us/cli/azure/container?view=azure-cli-latest

・・・今更だが、execというコマンドがあることに気が付いた。

execコマンドは何ができるのか

このGAのタイミングで気が付いたのだが、az container execというコマンドがある。

これはどんなことができるのかを確認するため簡単に実験してみよう。

実験

まず普通に1つコンテナをCloud Shellを用いて作成する。

$ az group create -n pakuecitest -l southeastasia

次にコンテナーグループを作成する

$ az container create -g pakucitest -n mynginx --image nginx --ports 80 --ip-address Public

これでコンテナが起動した。パブリックIPアドレスへアクセスすると、Nginxのデフォルトindexが表示される。

次に、execコマンドを実行する。execコマンドは起動中のコンテナに対して、指定したコマンドを実行することができる。

$ az container exec -g pakucitest -n mynginx --exec-command "/bin/bash"

このコマンドを実行するとコンテナ内でbashが起動し、出力が表示される。

root@caas-4d119bc80a6e4b05b31d0cd8e2512c75-600751872-8vxj7:/#

コマンドプロンプトが変化していれば、コマンドはコンテナ内で実行されることになる。NginxコンテナはViなどのエディタが入っていないので、ここではechoコマンドを使ってデフォルトのindexを書き換える。

#  cd /usr/share/html
#  mv index.html index.html.old
#  echo "changed." > index.html

これで書き換わっているはずなので、先ほどと同じくコンテナのパブリックIPにアクセスして見る。

いかがだろうか。execコマンドを使うと起動しているコンテナで別のコマンドを実行することができる。 ドキュメントを見たところ、最も一般的なユースケースはshellの呼び出しとなっているので、コンテナ内に何か手を入れたいときに使える手段が増えたことを押さえておきたい。

気になる言葉の数々

Corey SandersによるContainer Instances GAの記事にはとても気になる一言が散りばめられている。

we now have multiple providers, including VMware, AWS and Hyper.sh, collaborating closely with us.

個人的にはHyper.shは初めて知った時、まさに求めていたサービスだと感じた。Azure Container Instancesの成長を見るとまさにHyper.shで行えることが出来つつあり、あとはMacでのコマンドとの親和性くらいという印象だ。

We have many exciting features including VNET integration planned later this year. 

ということで、今後VNETとの統合が行われる。IPの払い出しにPublicと指定しているくらいなので、この辺りは予定通りといった感じではある。VNETに接続でき、かつローカルIPを使えるのは夢が広がる。コンテナを利用したタスクランナーとしての使い方や強力にisolateされた個別の実行環境としての特徴をクローズドな世界で使えるとなると非常に強力だ。

どうやらまだまだコンテナ関連は仕込みがあるようなので、楽しみにしておこう。