サイトアイコン 協栄情報ブログ

FSxをNドライブとして使う際に直面した課題と、SmbGlobalMappingによる解決方法

はじめに

こんにちは、松山です。
Amazon FSx for Windows File Server を利用し、EC2 からドライブレターを割り当てて利用するケースは多いと思います。今回案件の環境では、FSx を Nドライブとしてマウントし、その中に格納したスクリプトを JP1から定期的に実行していました。

ところが、この運用には思わぬ落とし穴がありました。


課題

スクリプトのコード中では N:\script\xxx.bat のように ドライブレター指定 をしていました。

しかし、Windows での通常のネットワークドライブ (net use) マッピングは ユーザーごと/セッションごと に有効となるため、以下のような問題が発生しました。


失敗した試み

課題解決に向けて、いくつか方法を試しましたがうまくいきませんでした。

  1. ログオンスクリプト/スタートアップスクリプトで net use

    • Windows の仕様上、マッピングは「ユーザーセッション」に紐付くため、サービス(Session 0)からは見えませんでした。
  2. /persistent:yes オプションの利用

    • 再ログイン後にマッピングは復元されますが、あくまでそのユーザーだけ。JP1 サービスからは依然として不可視でした。
  3. UACの EnableLinkedConnections レジストリ設定

    • 管理者権限のプロセスでネットワークドライブを見えるようにする設定ですが、こちらも対象は「同一ユーザーセッション内」に限定されるため、サービスには効果なし。
  4. UNCパスへの書き換え

    • 最も堅実ですが、既存スクリプトが大量にあり短期的には難しかったため、即効性のある解決策にはなりませんでした。

解決方法:SmbGlobalMapping の活用

Windows Server 2019 以降では PowerShell の New-SmbGlobalMapping コマンドレットが利用できます。これにより、全セッションから利用可能なグローバルマッピング を作成できます。

手順例

# 既存のNドライブマッピングを削除
net use N: /delete 2>$null
Remove-SmbMapping -LocalPath N: -Force -ErrorAction SilentlyContinue

# サービス実行用アカウントの資格情報を指定
$cred = Get-Credential 'DOMAIN\svc_jp1'

# グローバルマッピングを作成
New-SmbGlobalMapping `
  -RemotePath \\fsx-fileserver.domain.local\share `
  -LocalPath N: `
  -Credential $cred `
  -Persistent $true

これにより、JP1 がサービスとして実行される環境(Session 0)からも N: ドライブを利用可能となりました。

確認

Get-SmbGlobalMapping

出力に N: が表示されればOKです。


注意点


まとめ


今後は可能な範囲で UNC パスへリファクタリングしつつ、短期的には SmbGlobalMapping を運用に組み込むのが現実的な解となりました。

モバイルバージョンを終了