Azure: VMのカスタムのスクリプト拡張機能をARMテンプレートで使用する際の設定方法について

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

はじめに

こんにちは!中途入社のなーがです。前回はエイリアスを設定してコマンド実行を効率化しようという内容でしたが、今回はAzure内サービスの一つであるVMのカスタムのスクリプト拡張機能をARMテンプレートで使用する際の設定方法について書こうと思います。

コードのみ知りたい方は以下から確認できます。

カスタムのスクリプト拡張機能とは

公式ドキュメントでは、以下のように記載されています。

カスタム スクリプト拡張機能は、スクリプトをダウンロードし、Azure 仮想マシン (VM) で実行します。 この拡張機能は、デプロイ後の構成、ソフトウェアのインストール、その他の構成タスクや管理タスクに使用します。 スクリプトは、Azure Storage や GitHub からダウンロードできます。また、拡張機能の実行時に Azure portal に提供することもできます。

簡単に言うと、「VM実行時に実行したいスクリプトを指定することで、自動で実行してくれる機能」です。例えば1台のVMを起動させるだけではあまりメリットが感じられませんが、Service Fabric等で使用するVMSS(Azure Virtual Machine Scale Sets)で複数台のVMを起動する際には大幅な作業時間短縮と実行忘れ等のヒューマンエラー対策になります。

スクリプト拡張機能はAzure Potalだけでなく、ARMテンプレートでも設定することが出来ます。使用した際に色々と設定で苦戦したことがあるので、その点について書ければと思います。

要件

今回設定したい内容は以下の通りです。

  • 作成するVMのOSはWindows(Linuxでも可能です)
  • VM起動時にスクリプトファイル「Test1.ps1」を実行させたい
  • スクリプトファイル「Test1.ps1」はパブリックアクセスを禁止したストレージ アカウントに保存されている

アーキテクチャ

事前準備

Azure PowerShell または Azure CLI を使用して、Azure へのサインインを行っておきます。環境変数やサブスクリプションも設定しておいてください。

ARMテンプレート作成

ARMテンプレートのresources内に下記を追加します。今回追記する箇所以外は省略しています。実際に作成される際はnameやfileUrisなどの各オプションをパラメータファイルに記載して作成することで、異なる環境の差異を気にすることなくARMテンプレートを管理できるのでおすすめです。

細かいオプションについては、公式ドキュメントを確認してください。

ちなみに、VMSSの場合はproperties.virtualMachineProfile.extensionProfile.extensionsで以下のように指定します。

実行したいスクリプトファイルが保存されているストレージ アカウントがパブリックアクセスを許可していればこのままでいいですが、今回はパブリックアクセスを禁止しているので、ファイルのパスを指定しただけではVMにダウンロードすることが出来ません。そこで、ユーザー割り当てマネージドID(以下、マネージドID)を作成してストレージアクセスロールを割り当て、ARMテンプレートでそのマネージドIDを指定します。

ユーザー割り当てマネージドIDの作成

Azure PotalまたはARMテンプレートを使用してマネージドIDを作成してください。作成方法は省略します。

マネージドIDにロールを付与

上記で作成したマネージドIDを選択し、下記の手順でロールを付与する。

Azure ロールの割り当て > ロールの割り当ての追加(プレビュー)> 下記の項目を選択 > 保存

  • スコープ:ストレージ
  • サブスクリプション:各自のサブスクリプションを選択
  • リソース:スクリプトファイル「Test1.ps1」を保存したストレージアカウント
  • 役割:ストレージ BLOB データ閲覧者

マネージドIDのオブジェクトID指定

上記で作成したマネージドIDのオブジェクト (プリンシパル) IDを以下のように追加します。また、プロパティsettingsprotectedSettingsに変更します。

VMSSの場合は以下のように指定します。

マネージドIDの割り当て

ユーザー割り当てマネージド ID を割り当てるプロパティidentityを追加します。指定するマネージドID名は変数(variables)内で宣言し、variables関数で参照するようにします。

詳しくは公式ドキュメントを確認してください。

VMSSの場合は以下のように指定します。

デプロイと確認

azure cliやAzure PowerShellでデプロイを行い、RDPで接続してスクリプトファイルが実行されているか確認してください。今回は省略します。

さいごに

今回はAzure内サービスの一つであるVMのカスタムのスクリプト拡張機能をARMテンプレートで使用する際の設定方法について書きました。公式ドキュメントは分かりにくいことが多いですが、Azureのドキュメントは比較的分かりやすいと思います。AzureやAWSなどは特にロール周りの設定が分からなくなりやすいので、これからも新しく学んだことや気づきをブログにしていきたいです。

アバター画像
About なーが 16 Articles
前職は.NETやPythonを用いた業務アプリケーション、プロトタイプAPI開発に従事。2023年中途入社。とりあえずやってみて、苦しんで覚える系エンジニア。AWS認定3冠(SAA、MLS、DAS)

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる