はじめに
こんにちは!中途入社のなーがです。前回はエイリアスを設定してコマンド実行を効率化しようという内容でしたが、今回は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を以下のように追加します。また、プロパティsettingsをprotectedSettingsに変更します。
VMSSの場合は以下のように指定します。
マネージドIDの割り当て
ユーザー割り当てマネージド ID を割り当てるプロパティidentityを追加します。指定するマネージドID名は変数(variables)内で宣言し、variables関数で参照するようにします。
詳しくは公式ドキュメントを確認してください。
VMSSの場合は以下のように指定します。
デプロイと確認
azure cliやAzure PowerShellでデプロイを行い、RDPで接続してスクリプトファイルが実行されているか確認してください。今回は省略します。
さいごに
今回はAzure内サービスの一つであるVMのカスタムのスクリプト拡張機能をARMテンプレートで使用する際の設定方法について書きました。公式ドキュメントは分かりにくいことが多いですが、Azureのドキュメントは比較的分かりやすいと思います。AzureやAWSなどは特にロール周りの設定が分からなくなりやすいので、これからも新しく学んだことや気づきをブログにしていきたいです。