Hejdaの見る夢

一人前のエンジニアを目指して頑張ったこととかをつらつら書くブログ

プレビュー版 Azure Spot VMs を使ってみた🎉🎉

サマリ

  • Azure Spot VMs が新しくプレビューに追加されました。
  • 既に試用することが可能です。
  • 用途によっては、積極的に使っていきたい機能です。

経緯

2019/12/04 に @ThomasMaurer さんによって、以下のツイートがありました。

内容を簡単にまとめると以下のようです。

  • Azure Spot VMs というサービスがプレビューになったこと。
  • 上記のサービスは条件付きではあるけれど、 Azure VM をかなり割安で使用することが出来ること。
  • プレビューであるけれど、東京リージョンでも使えること。

関連するドキュメントは今のところ、以下の 3 点が公式ドキュメントとして見つけることが出来ました。

Azure Spot VMs とはいったい何か?

以下の特徴があります。

  • Azure VM を従来の金額から大幅に値下げした価格で使用することが出来ます。
  • VMスケールセット(VMSS)に対応しています。

とのことです。

これだけでも、インフラや SRE といった分野のエンジニアからすると、喉から手が出るほど欲しい機能です。

使用条件

VM のサイズの制限があり、以下の VM サイズでは Spot VM は使用出来ません。

実際に使ってみましょう

公式でチュートリアルが整備されています。

Azure portal

Azure CLI

Azure PowerShell

ARM テンプレート

Azure portal と Azure CLI を実際に試してみたいと思います。

試すだけであれば簡単で、登録などは不要なのですぐに試すことが出来ます。

Azure portal から試してみる

Azure portal >> Virtual mashines >> create virtual machine と選択すれば既に選べる状態になっています。

f:id:nari_kyu:20191207163308p:plain

また、Azure Spot instance を選ばなかった場合は Eviction type および、 Eviction policy の項が無くなるようです。

その後、諸々の設定を行い、最後に Create することで VM は起動します。

f:id:nari_kyu:20191207163441p:plain

いつもの VM となんら変わらないですね! 👏👏

Azure CLI から試してみる

Azure portal 上の Azure Cloud Shell から実行します。

それ以外の環境から実行する場合は、az コマンドのインストールや Azure への認証などが必要になります。

  • リソースグループの作成
    • 先ほど作成した spot-vm-test を使います。
    • 新しく作成する場合は下記のコマンドで作成出来ます。
az group create -n spot-vm-test-cli -l japaneast

### location を知りたい場合は以下のコマンドで確認が出来ます。
az account list-locations

ドキュメントに習って、 Azure CLIVM を作成していきます。

  • 環境変数を用います。
    • 試される場合は、この変数を好きな値に変更してください。
export _rg_name='spot-vm-test'
export _vm_name='spot-vm-test-cli'
  • az コマンドを用いて、 Spot VMs を作成します。
az vm create \
    --resource-group ${_rg_name} \
    --name ${_vm_name} \
    --image UbuntuLTS \
    --admin-username azureuser \
    --generate-ssh-keys \
    --priority Spot \
    --max-price -
  • 実際の Azure Cloud Shell の様子です。

f:id:nari_kyu:20191207165446p:plain

  • Spot VMs を作成した際に設定したログインユーザ名と、標準出力に秘密鍵(と公開鍵)の PATH および、 パブリック IP アドレス が出力されているので、その情報を元に SSH ログインしてみます。

f:id:nari_kyu:20191207170558p:plain

こちらも無事 SSH 出来ました!! 👏👏

ちなみに この VM は Spot VMs か否か を判断したい場合にどこを見ればいいか、現時点では分かりませんでした。

こちらは分かり次第、追記したいと思います😉

リソースの削除

作成した VM はいくら Spot VMs とはいえ課金が発生してしまうので、不要なったらリソースグループごと消してしまいましょう。

f:id:nari_kyu:20191207175239p:plain

まとめ

プレビュー版なので仕様変更がある可能性が高いですが、それを差し引いてもすぐにでも積極的に使っていきたい機能です。

個人的な思い

※ ここから下は完全に個人的な感想です。

このサービスはすべてのリージョンで使用出来ることや、ほぼすべて VM サイズで使用出来ることもすごいのですが、個人的には VM スケールセット(VMSS) に対応してるというのがとても意味が大きいと考えています。

昨今は PaaS を代表としたインフラを考慮しない設計が注目を浴びていますが、要件によっては VM を扱わなくてはならず、VMスケールセット を構築している環境も多いと思います。

Azure Spot VMs は 中断できるワークロードに最適 とあるように、ユーザ側の意図しないタイミングで落ちる可能性があります。

これが逆に良くて、この条件を加味した VM に依存しないアークテクチャ設計 を求められることになり、結果的にインフラレイヤーにおけるカオスエンジニアリングを意識したアーキテクチャを考えざるを得ない状況になると予想します。

結果として DevOps や SRE といった基盤よりのエンジニアの腕の見せどころとなり、よりクラウドネイティブな設計をさざるを得なくなります。

さらに個人的な願いとしては AKS の Node に使いたいと思っていて、何か貢献出来ればいいなぁと思いつつ、 CLI および Terraform の実装待ちというステータスです😊