1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure App ServiceのManaged InstanceでRDPやConfiguration scriptを使ってみる

1
Last updated at Posted at 2025-12-09

はじめに

記事の目的

2025/12現在、Azure App Service Managed InstanceはPublic Previewとなっています。
本記事もプレビュー状態で検証した内容となるため、画面構成や設定内容についてはGA後に変更となる可能性があります。

本記事では、Azure App Serviceに追加されたManaged Instanceを利用して、以下を検証してみたいと思います。

  • BastionによるRDP接続
  • Configuration scriptを利用したFontのインストール

Script経由でのインストールがFontなのは、インストールするCOMコンポーネントやMSIがすぐに浮かばなかったからなのですが、どうやってConfiguration Scriptを設定するのか?といった観点で読んで頂けますと幸いです。

記事が少し長くなってしまいますが、作成はAzureポータルから行っていきます。

Azure App Service Managed Instanceとは?

従来のApp Service(PaaS)の利便性を維持しながら、IaaSに近い柔軟性で利用することができる、新しいApp Serviceのオプションとなります。Azure Cloud Servicesをよりマネージドにしたような印象があります。

大きな特徴としては、以下のような点が挙げられます。

  • Configuration Scriptを利用したインストール(COMコンポーネント、MSI、フォントなど)や、レジストリ設定が可能
  • Vnet統合を行えば、Bastion経由でRDP接続が可能

依存コンポーネントのためにIaaSで運用するしかなかったケースでも、Managed Instanceを利用すれば、オートスケールなどApp Serviceの従来の恩恵を受けながら、レガシーなアプリケーションを実行可能となります!

ただし制限事項もあります。

  • App Serivces Premium V4でしか設定ができない
  • 現在のところWindows Webアプリ専用(Linuxやコンテナは非対応)

App Services Premium V4でしか利用できないのは少しつらいところですが、V3と比べて価格も10%~程度下がっており、Reserved Instanceも適用可能なので、利用シナリオによってはコストパフォーマンスを出すことができるかもしれませんね!

詳細はこちらの公式ドキュメントをご覧ください。

リソースの作成

各リソースを作成していきます。
仮想ネットワークやストレージなどは、要点のみ記載とさせていただきます。

1. Azure App Service Managed Instanceを作成する

Azureポータルから「リソースの作成」を選択して、検索欄に「Webアプリ」と入力して検索します。
二つでてきましたね…。実はまだ日本語対応されていないようで、Managed Instanceやマネージドインスタンスと入力しても表示されません(英語版では検索可能なようです)
ひとまず左側を選択します。
image.png

私の場合、左側がManaged Instanceで当たりでした 笑
Managed Instanceであることを確認し、作成を押下します。
image.png

作成画面は従来のApp Serviceとほぼ同じですので、ポイントのみ記載していきます。

  • リージョンは現在、以下の4リージョンのみ対応となります。今回は「East Asia」を選択
    image.png
  • 料金プランについてはPremium V4しか選べませんので、一番安価なものを選択
    今回は検証用ですので、ゾーン冗長も無効としました。
    image.png
  • AdvancedタブのConfiguration scriptは後ほど設定するので今回は入力なし
    image.png
  • Deploymentタブも設定なし
  • Networkingについてはサイトの起動を確認したいので、パブリックアクセスをオン。仮想ネットワーク統合は後ほど設定するのでオフ
    image.png

Reviewで問題なければ、そのまま作成します。

2. 仮想ネットワークを作成する

Bastionを利用してRDPしたいため、仮想ネットワークを作成します。

  • App Serviceのリージョンと同じEast Asiaで仮想ネットワークを作成
  • (仮想ネットワークの作成時/作成後どちらでもOK)Vnet統合用サブネットを作成(委任先にMicrosoft.Web/ServerFarmsを選択)
    • image.png
  • Bastion用のサブネットを作成
    • サブネット作成時に「サブネットの目的」から「Azure Bastion」を選択して作成できます

Vnet統合用のサブネットとBastion用のサブネットを追加し、以下のようになりました。
image.png

4. Batsionを作成する

App Service Managed InstanceへのRDPに利用するBastionを作成します。
Developerプランで作成して試したところ設定ができなかったため、SKUはBasic以上を選択してください。(今回はStandardを利用していますが、Basicで問題ないと思います)

  • Bastion作成時、先ほど作成した仮想ネットワークとBastion用サブネットを指定する
    • image.png

5. ストレージを作成する

Configuration scriptはBlob Storageに格納する必要があるため、Azure Storageを作成します。
特に特別な設定は必要ありませんが、以下のポイントをご確認ください。

  • Configuration script格納用のコンテナをあらかじめ作成
    • image.png
  • 作成時のポリシーによりますが、App Serviceよりアクセスできるようにネットワークを構成

6. マネージドIDを作成する

App ServiceからBlob Storageへのアクセスを可能とするため、マネージドIDを作成します。

  • マネージドIDの作成後、Azureロールの割り当てより「ストレージBLOBデータ閲覧者」を作成したストレージに対して設定
    • 設定画面
      • image.png
    • 設定結果
      • image.png

設定&動作確認

BastionやConfiguration scriptの設定を実施します。

1. Vnet統合の設定をする

App Serviceプランを仮想ネットワークに接続します。

  • App Serviceプランの「ネットワーク」からVnet統合を設定
    • image.png

接続を行うと下記のように設定されます。
image.png

2. Bastionの設定をする

App Serviceプランの「構成」よりBationとRDPの設定を行います。

  • Allow Remote Desktop (via Bastion)にチェックを入れる
    • image.png
  • 先ほど作成したBastionが指定されるので適用する
    • image.png

3. BastionでRDP接続する

Bastionを設定すると、App Serviceプランの「インスタンス」からサーバーに接続することができます。
image.png

App ServiceプランのサーバーにBastion経由でRDPすることができました!
IIS Managerを開くと、ホスティングされているサイトも表示されますね。
image.png

4. Configuration scriptの設定をする

次にApp Service Managed Instanceのサーバーが起動するときに適用されるコンポーネントを設定します。
今回は検証としてフォントのインストールのみを実施するため、最小構成でファイルを用意します。

公式情報としては以下のページをご参照ください。

4-1. フォントの準備

今回、検証にはこちらの「きざし」というフォントファイルを使わせていただきました。

フォントファイルをダウンロードしておきます。

4-2. スクリプトの準備

App Service Managed Instanceは、コンポーネントのインストールにPowerShellスクリプトを使用します。
ファイル名はInstall.ps1という名称で固定されているようですので、ご注意ください。
以下は今回のサンプルPowerShellスクリプトです。
フォントファイルをFonts配下にコピーし、レジストリ登録を実行します。

Install.ps1
# Install Fonts
# Font file paths
$FontFileName = "Kizashi-Regular.otf"
$FontSource = Join-Path $PSScriptRoot $FontFileName
$FontName = "Kizashi Regular(Custom Installed)"
$FontDest = Join-Path "C:\Windows\Fonts" $FontFileName

try {

    # フォントをコピー
    Copy-Item $FontSource $FontDest

    # レジストリに登録
    New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" `
        -Name $FontName `
        -PropertyType String `
        -Value $FontFileName
} catch {
    Write-Error "Failed to install ${FontFileName}: $_"
    exit 1
}

4-3. パッケージの準備

Configuration scriptはzipファイル化してパッケージを作成します。
公式ドキュメントには以下のように記載されています。
image.png

今回、config.xmlは作成しません。
以下のファイルを「FontInstall.zip」として圧縮します。

  • Install.ps1
  • Kizashi-Regular.otf

4-4. Blobコンテナへアップロードする

先ほど作成したzipファイルを、Configuration script用に用意したBlobストレージのコンテナへアップロードします。
image.png

5. マネージドIDを設定する

App ServiceプランにマネージドIDを設定し、Blob Storageへのアクセスが可能となるように構成します。

5.1 マネージドIDを設定する

App Serviceプランの「ID」から、先ほど作成したマネージドIDを追加します
image.png

さて、ここからがハマりポイントなのですが、設定しただけですとApp ServiceプランはBlob Storageへのアクセスが失敗します。そのため、Configuration scriptが実行されずにコンポーネントのインストールは行われません。
App Serivceプランのログを確認すると、以下のようなエラーが表示されます。

  • Error while running install script (FontInstall), continuing: Cannot download Install Script: PlanDefaultIdentity must be configured.
    • image.png

どうやらPlanDefaultIdentityという設定が必要なようです。
しかしこの設定、ポータル上からは設定の箇所が見当たりません(実はあったらすみません)
今回はAzure CLIから設定します。

5-2. PlanDefaultIdentityの設定を行う

ポータル上に設定項目がなかったのでドキュメントを見ていたところ、Azure CLIにそれっぽいコマンドを発見しました。

まだプレビューのコマンドなようで、Azure CLIのバージョンを最新版にしないと利用できませんでした。
image.png

2025/12現在の最新版をインストールし、以下のバージョンでは利用可能です。
※Azure CLIのバージョンアップは環境が壊れることもありますので、慎重にご検討ください。

{
  "azure-cli": "2.81.0",
  "azure-cli-core": "2.81.0",
  "azure-cli-telemetry": "1.1.0",
  "extensions": {
    "containerapp": "1.0.0b1",
    "ssh": "1.1.3"
  }
}

以下はドキュメントからの引用ですが、こちらのコマンドを実行するとPlanDefaultIdentityが設定されます。
各値は実際のリソース名に書き換えてご利用ください。

az appservice plan identity set-default --name MyAppServicePlan --resource-group MyResourceGroup --identity /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyIdentity

6. Configuration scriptを設定する

App Serviceプランの「構成」から「General settings」タブを開き、Configuration scriptを設定します。
あらかじめzipパッケージを保存しておいたBlobコンテナを指定してください。
image.png

動作確認

さて、動作確認してみましょう。
といっても今回はConfiguration scriptでフォントをインストールしただけですので、RDPしてフォントが反映されていることを確認します。

「きざし」フォントが設定されていました!
image.png

Configuration scriptはApp ServiceプランのC:\InstallScripts配下にパッケージ名で作成されたフォルダに保管されています。
こちらには実行ログも保存されますので、より複雑な手順でインストール作業を行う場合は、こちらを参照するとエラー原因などが判明するかもしれません。
image.png

今回は以下のような実行ログが出力されていました。フォントインストールのみだからか、出力されている情報はとてもシンプルでした。

Kizashi Regular(Custom Installed) : Kizashi-Regular.otf
PSPath                            : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
                                    NT\CurrentVersion\Fonts
PSParentPath                      : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
                                    NT\CurrentVersion
PSChildName                       : Fonts
PSDrive                           : HKLM
PSProvider                        : Microsoft.PowerShell.Core\Registry

まとめ

App Service Managed Instanceは、かなり興味深いアップデートだと思います。
既存の.NET FrameworkアプリやWindows依存アプリをクラウドへ移行する場合や、オンプレミスの複雑な構成(COM、レジストリ)を維持しつつクラウド化する、といったシナリオには非常にフィットしそうです。
現在はまだPublic Previewでリージョンも限定されていますが、GAされるときは展開リージョンも増えるのではないでしょうか。
もっと複雑な構成でのConfiguration script運用や、今回は利用しなかったレジストリ値の適用など、私がまだ検証できていない機能もありますので、いずれ試してみたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?