kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Azureで自動処理を行うためのPaaSは何を選ぶ?

今自分が得意だからということもあるのですが、Azure Pipelinesを使って簡単なデータ流し込み処理をしています。ふと思ったのですが、ほかにもこの手の自動化で使えるPaaSがあってどういうときに使えばいいのかなと思って考えてみました。

Azure Automation

docs.microsoft.com

  • Azure インフラストラクチャの構成管理、簡単な自動化処理
  • Python, PowerShellスクリプト 5.x / 7.1(Preview)とAzモジュールで書いたスクリプトを指定した時間、指定した条件で実行する
  • 500分の無償枠あり
  • Hybrid Workerでオンプレミスも管理可能(クラウドと値段が違うのに注意)
  • ソースコードはGitHub / Azure Reposで管理&デプロイ可能
  • incoming Webhookでの実行も可能

日本ではJP1などのジョブ管理ソフトを使って「指定した時間にこのVMを再起動させる」とか「この処理を実行する」みたいなことをよくやっていますね。Azure Automationの場合、単発処理は楽ですが、「Aというジョブを実行した後にBというジョブを実行するけど、この条件の時はCというジョブを実行する」みたいな複雑な処理だとできないことはないけど、ちょっと辛いかも。特に業務的なカレンダーがあってそれを参照しながら動くとかね。あと、一応グラフィカルPowerShellワークフローというものはあるのですが、ランタイムが現在5.1のみなので、ちょっと辛い。

Runbookを使って、定期的に短時間で済むけど、手順書見ながらやらなくてはならないような処理はまずこれ検討したらいいように思います。

Azure Pipelines / GitHub Actions

よく使っています(笑)。Microsoftが運用するHosted Agentと自分で運用するself-hostedがあります。私が使うのはだいたいself-hostedのVMSSエージェントです。

self-hostedを使う理由ですがこの辺ですね。特に1番目と3番目が大きい理由です。

  • Microsoft-hostedは60分でジョブが打ち切られる
  • 仮想マシンがDS2くらいなので、2 vCore / 8GB RAMではつらいことがたまにある
  • 閉域網内で処理したい

処理はShell Script / PowerShell / 任意のプログラムなんでもいいので便利です。YAMLの試行錯誤がちょっと辛いかな。Azure Automationがローカルでテストしたスクリプトがほぼそのまま動くのと違って、参照情報が変わることが多いのがつらいかもしれないですね。

こちらも無償枠はありますが、申請式です。

docs.microsoft.com

1-2営業日で返事は来るはずです。

Microsoft Hosted agentの場合は定期的にイメージが変わるので、インストールされているソフトの変更には注意してください。node.jsとかPythonとかですね。self-hostedを使う場合、VMSSエージェントの利用が前提になると思いますが、VMイメージ作成を自動化していないと厳しいでしょうね。私は毎月OSパッチリリースのタイミングでAzure Compute Galleryに入れるイメージを作り直しています。

Azure Functions(のTimer Trigger)

docs.microsoft.com

この辺に注意ということで。実行時間を無制限にするにはPremium以上のプランにするか、Consumption planの場合は別途Container AppやAzure Batchなどにリクエストだけ投げて結果は別の方法で受け取るといった処理にする必要があるでしょうか。

こちらもAzure Automationと同様に複雑な条件分岐を実装することはできるけどコードでやるのはどうかな?というところです。Functionsなので、CI/CDもサポートされていますね。

(追記)
Logic Appsもコネクターで用意されている範囲であれば可能ですね。もちろんAzure Functionsと連携もできますが、それなら最初からFunctionsでいいじゃないかとも思います。

Azure WebJobs(2022/6/5追記)

docs.microsoft.com

すっかり忘れていましたが、Azure WebJobsもありますね。現状ほとんどFunctionsになると思いますが。

じゃあ何選ぶ?

ものによるけど、やはりAzure Automationでできるかどうか考えるかなぁ。Functionsは正直あまり考えない。Pipelinesは並列度が多くなると課金が比例するのと、イメージ作るのが面倒になりますね。

github.com

GitHub Actions / Azure Pipelinesと同じイメージを作るこのレポジトリをforkして、だいぶそぎ落としたカスタマイズ版を使っていますが、それでも1時間ちょっとはかかりますので。

ほかにこんな方法でやっているよ!とかあれば教えてください。

Azure DevOps 2022/5/4の更新

May the Fourth(4th) with you! ではないですが、Azure DevOps Sprint 203リリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

docs.microsoft.com

今回はBoardに対する機能改善が中心でしたね。親IDに関連付けられている子供のWorkItemって今まで取れなかったんだ(気づいていなかった)。プライベートプレビューなので、記事に書かれているメールアドレスにorganization名と"Cloud you enable private preview feature for Query by Parent Id?"とでも書いて送ればいいはずです。

今までBoardのカンバン上の順序はIDしかなかったので、swimlanesを使うかしかなかったのですが、ボード上で優先順位の変更ができるようになるのはいいですね。

バグとして報告されたとしても様々な事情で直さないということはありました。報告した人からしたらいやだけど、won't fixというラベルがつくともにょっとしますよね。Azure DevOpsではカスタマイズしないとできなかったこの値が標準でサポートされることになりました。まぁあればありがたいです。

Azure ArtifactsでUniversal Packageの複数organiztionでのupstreamがサポートされました。基本的には組織(会社など)で単一organizationを運用が推奨ですが、様々な事情でできないこともあります。そういう時には使えると便利ですね。

ではまた三週間後。

Translate to Japanese to Azure DevOps release not…

Git LFS 3.0以降を使う場合kerberos認証が必要

少し前から困っていたのですが(書こうと思って忘れていた)、公式からもブログが出ていたので、ご紹介。

devblogs.microsoft.com

発生条件

  • オンプレミスのAzure DevOps (Team Foundation) ServerでNTLM認証を使っている(クラウドのServiceには該当しません)
  • Git LFS 3.0以降(Git for Windowsでは2.33から3.0.1が含まれる)を使っている
  • Git LFSでファイルを管理している

私の場合、まず最初にこのissueの現象に遭遇しました。

github.com

Git LFS 3.0以降はgolangで書かれていて、golangの標準ではNTLMサポートしていない(AzureがNTLMのパッケージを出してはいる)ことがそもそもの原因のような?

Remote URLをsshにしてみたのですが、異なるエラーになるだけで、ダメでした。sshだからNTLMの影響を受けないのではと思っていたのですが、どうも違うようです。そして、submoduleがある場合(問題のあるレポジトリでは使っていたので)sshにはpipelineのエージェントに制限があるためあまり使いたくなかったのでした。

LFSで管理していたのは大きくない画像だったので、Git LFSをあきらめて、Git管理にすることで回避しました。

vlike-vlife.netlify.app

git lfs ls-files
git lfs untrack '*.png' '*.jpg' 
git rm --cached ファイルパス 
git lfs uninstall  

最後にcommit

git add .
git commit

履歴からは消さなくてもいいかなということで消していません。リモートから完全に消したい場合、再生成したほうがいいのかな?GitHubではリモートからも消したい場合リポジトリの再生成が必要になるようですね。

Azure DevOps Serverの場合、リモートリポジトリを消してもBoardsの内容は消えないので、この手順で復旧できるはずです。

  1. リモートをclone
  2. リモートレポジトリを削除
  3. 再度リモートを作成
  4. 新しいremote urlをクライアントに登録
  5. push

Azure DevOps 2022/4/20の更新

Azure DevOps Sprint 202リリースノートの翻訳を行いました。オリジナルはこちらからご覧ください。

docs.microsoft.com

監査機能がオプトインに代わって(使っている人少なかったんかな)、Azure ADで運用しているアカウントのみ使用可能になってしまいました。私がもっているAzure DevOpsも個人のMSアカウントでは確かに監査(Audit)が消えています。

左がAzure ADで動かしているAzure DevOps、右が個人用MSアカウントで動かしているAzure DevOps。すでに監査を使っている人には影響がありませんが、新規に作った環境ではオプトインしなければならないので気を付けてください。

あれ…REST APIも使えなくなるのかな。今これ使ってMSアカウントのほうではまだAPI使ってアクセスできていますね。うーん、謎(たぶんUI消しただけなのかな)。

たまにログインできない現象を聞いたことがあったのですが、どうもCAP(条件付きアクセスポリシー)を設定してIPアドレスベースで制限していた場合のみ発生していたようですね。IPv4のみ許可していた場合起きていたようなので、Azure AD管理者と相談してくださいということだそうです。

新しいBoards Hubがパブリックプレビューになったそうです。以前はjQueryベースでしたが、いろいろ変わっているようなので、興味ある人はdeveloper toolsで見ると面白いかもしれません。

久々の大きい機能templateContextがAzure Pipelinesに追加されています。でもこれ使いこなすの難しそうな…MS内部では便利に使うのでしょうけれど。今までテンプレートに渡された引数によって処理を分けたい場合、内部のスクリプトで条件分岐するとか、条件分岐を使わないといけませんでしたが、templateContextを使えば記述がより単純に見やすくなりますね。これは確かに便利そうです。

Windows Server 2016のイメージを使っている人がまだ結構いるようで、引退が少し延びました。以前は数時間単位での意図的な停止でしたが、今度は丸一日(おそらくUTC時間)で毎週どこかの平日の曜日で落とすそうなので、これに引っかからない人はいないと思います。気を付けてください。

ではまた三週間後。

Translate to Japanese to Azure DevOps release not…