みなさまこんにちは。クラウドアーキテクトの卵です。
前回のブログから日が空いてしまいましたが、私は相変わらずリモートワークで仕事をしております。
弊社は Teams をフル活用しているので(宣伝)、個人的にはリモートワークでもそれほど仕事で困ることは無いのですが、もう半年以上も同僚や上司と対面していないというのは、何だか不思議な感じがします。もしかして、私がロボットや AI であっても気づかなかったりして!?
今回、珍しく アプリ開発者っぽい(?)ブログを書くことになりました。しかも連載で。
私自身、初めて触るリソースであった&いろいろハマったところがあったので、備忘録として残したいなぁというのがこの『Azure Batch を使って CLI プログラムを動かしてみた』シリーズです。
本ブログを書くきっかけになったのが、以前作成した『とあるプログラム』を定期実行できないかなぁという話がチーム内で出たことでした。
現状、この『とあるプログラム』は不定期、かつ、Azure Portal 上の Cloud Shell で手動実行を行っています。
「定期実行できれば、何でもいいんじゃない?」と思うかもしれませんが、それではクラウドアーキテクトの卵として芸が無いんじゃない?という 無駄なプライド 思いがあり、実現性や運用性、コスト等々を考え、要件(やりたいこと)をまとめました。
また、今回動かしたい『とあるプログラム』の特性等についても、改めてまとめました。
前述した< やりたいこと >を実現する方法として、真っ先に頭に浮かんだのが Azure Functions でした。
【参考:Azure Functions の概要】
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-overview
Azure Functions だとインフラ部分を気にする必要が無いため、今流行りの FaaS が実現できそうです。価格モデルも一番お手軽な従量課金制のプランがあり、使い方によってはコストを安価に抑えられそうです。
また、前述した< やりたいこと >の必須事項であるタイマー機能(定期実行)も、Azure Functions ではタイマートリガーをサポートしているため、要件は満たせそうです。
【参考:Azure でタイマーによってトリガーされる関数を作成する】
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-create-scheduled-function
プラットフォームは Azure Functions にしようかなぁと思いつつ、もう少し調べてみると、以下のサイトに類似サービスとの比較がありました。
【参考:バッチサーバー、Azure functions、LogicApps、Flowの違い】
https://prius.hateblo.jp/entry/2018/06/30/092446
真っ先に気になったのが、Azure Functions は時間制限があるという点でした。
従量課金版(consumption)では、最大 10 分の時間制限があるため、前述した< 『とあるプログラム』の特性 >にある、” チェックを実施するサブスクリプション数、リソース数によって、実行時間が可変する。場合によっては 1 時間以上は平気でかかる。” 部分に引っ掛かってしまいます。
では、従量課金版(consumption)ではなく、Premium プランか App Service プランなら時間制限も無くてイケる!と思ったのですが・・・。
【参考:Function App タイムアウト期間】
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-scale#function-app-timeout-duration
そもそも Azure Functions では Azure CLI に対応していないようです。前述した< やりたいこと >にある ” 『とあるプログラム』が Azure CLI で記載されているので、Azure CLI で動かせるリソースがいい。(既存のプログラムをできるだけそのまま動かしたい) ” を満たせないことに気づきました・・・。
【参考:特徴】
https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-overview#features
仕方ないので VM でも立てようかな・・・と思っていた矢先、見つけたのが Azure Batch でした。
Azure Batch は大規模な並列コンピューティングやハイ パフォーマンス コンピューティング (HPC) のアプリケーションをクラウドで効率的に実行するためのプラットフォーム サービスです。 大量のコンピューティングを要する作業を仮想マシンの管理されたプールで実行するようにスケジュールを設定し、ジョブのニーズに合わせてコンピューティング リソースを自動的にスケールできます。
【参考:Azure Batch とは】
https://docs.microsoft.com/ja-jp/azure/batch/batch-technical-overview
Azure Batch は Microsoft が提供するサービスとしてのプラットフォーム ( PaaS ) です。Azure Batch の裏側( Azure 内部)では仮想マシンが 1 台以上立っており、並列コンピューティングが可能となっています。
Azure Batch は、いくつかのリソースによって構成されています。
Azure Batch 内のリソース構成は下図のようになっています。
Azure Batch 内のリソースの概要を、以下の表にまとめました。
今回、並列実行は特に必要が無かったのですが、前述した< やりたいこと >や、< 『とあるプログラム』の特性 >とも概ね合致したため、学習も兼ねて Azure Batch を使ってみることにしました。
ここまでで、『とあるプログラム』を動かすプラットフォームの選定が完了しました。
Azure CLI を動かせる PaaS プラットフォームが意外に少ないのに驚きつつも、今回< やりたいこと >は Azure Batch で実現できそうです。
Azure Batch は大規模な並列コンピューティングやハイパフォーマンス コンピューティング ( HPC ) のバッチ ジョブを Azure で効率的に実行する点が大きな特徴(売りポイント)なので、実は、今回の『とあるプログラム』を動かすだけならいささかオーバースペックな感があります。そのため、「 Azure Batch ってこんな感じで設定できるんだね」という参考程度に見ていただけたら幸いです。
(あ、コストどうしよう・・・上司に相談かな・・・)
次回は、実際に Azure Batch の環境を構築してみたいと思います。お楽しみに!