クラウドエンジニアブログ

Azure Batch を使って CLI プログラムを動かしてみた ~知識編~

human05

古林

みなさまこんにちは。クラウドアーキテクトの卵です。

前回のブログから日が空いてしまいましたが、私は相変わらずリモートワークで仕事をしております。 弊社は Teams をフル活用しているので(宣伝)、個人的にはリモートワークでもそれほど仕事で困ることは無いのですが、もう半年以上も同僚や上司と対面していないというのは、何だか不思議な感じがします。もしかして、私がロボットや AI であっても気づかなかったりして!?



「Microsoft Azure 導入・運用支援サービス」はこちら


1. はじめに(やりたいこと)

今回、珍しく アプリ開発者っぽい(?)ブログを書くことになりました。しかも連載で。
私自身、初めて触るリソースであった&いろいろハマったところがあったので、備忘録として残したいなぁというのがこの『Azure Batch を使って CLI プログラムを動かしてみた』シリーズです。

本ブログを書くきっかけになったのが、以前作成した『とあるプログラム』を定期実行できないかなぁという話がチーム内で出たことでした。
現状、この『とあるプログラム』は不定期、かつ、Azure Portal 上の Cloud Shell で手動実行を行っています。

「定期実行できれば、何でもいいんじゃない?」と思うかもしれませんが、それではクラウドアーキテクトの卵として芸が無いんじゃない?という 無駄なプライド 思いがあり、実現性や運用性、コスト等々を考え、要件(やりたいこと)をまとめました。

< やりたいこと >
  • タイマー機能(定期実行)は必須。
  • インフラのお守りをしたくないので、IaaS 以外がいい。
  • 『とあるプログラム』が Azure CLI で記載されているので、Azure CLI で動かせるリソースがいい。(既存のプログラムをできるだけそのまま動かしたい)
  • 料金はできるだけ安い方がいいよね。

また、今回動かしたい『とあるプログラム』の特性等についても、改めてまとめました。

< 『とあるプログラム』の特性 >
  • プログラムは、複数のサブスクリプションから各リソースに合ったセキュリティチェックを行うプログラムである( 1 チェックにつき、1 コマンドを発行。同時に取得できるものはまとめている )。
  • プログラムで取得できるのはチェック判定のための情報のみである。出力された TSV を、関数が埋め込まれたエクセルに張り付けることでレポートを作成している。
  • チェックを実施するサブスクリプション数、リソース数によって、実行時間が可変する。場合によっては 1 時間以上は平気でかかる。


「Microsoft Azure 導入・運用支援サービス」はこちら


2. リソースの選定

前述した< やりたいこと >を実現する方法として、真っ先に頭に浮かんだのが 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

2.	リソースの選定1


真っ先に気になったのが、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

2.	リソースの選定2


仕方ないので VM でも立てようかな・・・と思っていた矢先、見つけたのが Azure Batch でした。



「Microsoft Azure 導入・運用支援サービス」はこちら


3. 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 内のリソース>
3.	Azure Batch の概要1



Azure Batch 内のリソースの概要を、以下の表にまとめました。

< Azure Batch 内のリソースの概要>
3.	Azure Batch の概要2


今回、並列実行は特に必要が無かったのですが、前述した< やりたいこと >や、< 『とあるプログラム』の特性 >とも概ね合致したため、学習も兼ねて Azure Batch を使ってみることにしました。



「Microsoft Azure 導入・運用支援サービス」はこちら


4. おわりに(実践編につづく)

ここまでで、『とあるプログラム』を動かすプラットフォームの選定が完了しました。
Azure CLI を動かせる PaaS プラットフォームが意外に少ないのに驚きつつも、今回< やりたいこと >は Azure Batch で実現できそうです。

Azure Batch は大規模な並列コンピューティングやハイパフォーマンス コンピューティング ( HPC ) のバッチ ジョブを Azure で効率的に実行する点が大きな特徴(売りポイント)なので、実は、今回の『とあるプログラム』を動かすだけならいささかオーバースペックな感があります。そのため、「 Azure Batch ってこんな感じで設定できるんだね」という参考程度に見ていただけたら幸いです。
(あ、コストどうしよう・・・上司に相談かな・・・)

次回は、実際に Azure Batch の環境を構築してみたいと思います。お楽しみに!



「Microsoft Azure 導入・運用支援サービス」はこちら

【総合】お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録