EC2 Windows インスタンスでインスタンスストアボリュームを自動マッピングしてみた

EC2 Windows インスタンスでインスタンスストアボリュームを自動マッピングしてみた

2026.05.03

はじめに

テクニカルサポートの 片方 です。
今回は、EC2 Windows Server のインスタンスでインスタンスストアボリュームを自動的にマッピングするように設定してみました。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/InstanceStorage.html

EC2Launch の Ver により記述方法が異なるため、以下の Windows Server で検証しました。
また、共に m5ad.large のインスタンスタイプ (インスタンスストアボリューム有) 起動しました。

  • Windows Server 2022 (ami-0b8a31df3b5eb48b4): EC2Launch v2
  • Windows Server 2016 (ami-0a8933b0a3e5604ac): EC2Launch v1

やってみた

以下の AWS re:Post を参考に実施しました。
今回は、EC2 インスタンスの起動時に、インスタンスストアボリュームが F: ドライブとしてマッピングされるように設定します。

https://repost.aws/ja/knowledge-center/ec2-windows-configure-volume-mapping

Windows Server 2022: EC2Launch v2

該当 OS Ver (EC2Launch v2) で EC2 インスタンスを起動します。
以下の PowerShell コマンドを管理者権限で実行し、EC2Launch のバージョンと、接続されているストレージボリュームの一覧を確認します。

  • & "$env:ProgramFiles\Amazon\EC2Launch\EC2Launch.exe" version
  • & "$env:ProgramFiles\Amazon\EC2Launch\EC2Launch.exe" list-volumes
コマンド出力例
PS C:\Users\Administrator> & "$env:ProgramFiles\Amazon\EC2Launch\EC2Launch.exe" version
2.4.0
PS C:\Users\Administrator> & "$env:ProgramFiles\Amazon\EC2Launch\EC2Launch.exe" list-volumes
Disk Number:
Device Name:  xvdca
Ephemeral:  false

Disk Number:
Device Name:  xvdcb
Ephemeral:  false

Disk Number:
Device Name:  xvdck
Ephemeral:  false

Disk Number:
Device Name:  xvdcl
Ephemeral:  false

Disk Number:
Device Name:  xvdcm
Ephemeral:  false

Disk Number:
Device Name:  xvdcn
Ephemeral:  false

Disk Number:
Device Name:  xvdco
Ephemeral:  false

Disk Number:
Device Name:  xvdcp
Ephemeral:  false

Disk Number:
Device Name:  xvdcq
Ephemeral:  false

Disk Number:
Device Name:  xvdcr
Ephemeral:  false

Disk Number:
Device Name:  xvdcs
Ephemeral:  false

Disk Number:
Device Name:  xvdct
Ephemeral:  false

Disk Number:
Device Name:  xvdcc
Ephemeral:  false

Disk Number:
Device Name:  xvdcu
Ephemeral:  false

Disk Number:
Device Name:  xvdcv
Ephemeral:  false

Disk Number:
Device Name:  xvdcw
Ephemeral:  false

Disk Number:
Device Name:  xvdcx
Ephemeral:  false

Disk Number:
Device Name:  xvdcy
Ephemeral:  false

Disk Number:
Device Name:  xvdcz
Ephemeral:  false

Disk Number:
Device Name:  xvdcd
Ephemeral:  false

Disk Number:
Device Name:  xvdce
Ephemeral:  false

Disk Number:
Device Name:  xvdcf
Ephemeral:  false

Disk Number:
Device Name:  xvdcg
Ephemeral:  false

Disk Number:
Device Name:  xvdch
Ephemeral:  false

Disk Number:
Device Name:  xvdci
Ephemeral:  false

Disk Number:
Device Name:  xvdcj
Ephemeral:  false

Disk Number:  0
Device Name:  /dev/sda1
Ephemeral:  false

Disk Number:  1
Device Name:  /dev/nvme0n1
Ephemeral:  true

PS C:\Users\Administrator>

この時の検証環境では、EC2Launch が 2.4.0 であるため EC2Launch v2 が稼働中であることが確認できます。
インスタンスストアボリュームが Disk Number 1 / Device Name /dev/nvme0n1 / Ephemeral true と表示されたため、agent-config.yml の device には /dev/nvme0n1 を指定しました。なお、instance store の本数やデバイス名はインスタンスタイプによって異なるため、適宜 list-volumes の結果を確認することをお勧めします。

それでは、起動時に自動で F: ドライブへマッピングされるように、C:\ProgramData\Amazon\EC2Launch\config\agent-config.yml を開いて設定を追加します。

01

追加例
- stage: postReady
    tasks:
      - task: initializeVolume
        inputs:
          initialize: devices
          devices:
            - device: /dev/nvme0n1
              name: Temporary Storage 0
              letter: F
              partition: mbr
      - task: startSsm

この設定では、Windows Server 2022 の EC2Launch v2 に対して、起動時の postReady フェーズでインスタンスストアボリュームを自動的に F: ドライブへ割り当てるためのものです。
対象デバイスは /dev/nvme0n1 を明示指定しており、initialize: devices にすることで、指定したディスクだけを安全に処理対象にしています。ディスクが未初期化であれば MBR パーティションを作成し、NTFS でフォーマットして Temporary Storage 0 というボリューム名を付与します。既に初期化済みでもドライブレター F: は適用されるため、再起動後も同じドライブ文字で利用しやすくなります。最後に startSsm により SSM サービスを開始しています。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2launch-v2.html

全文例
version: "1.0"
config:
  - stage: boot
    tasks:
      - task: extendRootPartition

  - stage: preReady
    tasks:
      - task: activateWindows
        inputs:
          activation:
            type: amazon
      - task: setDnsSuffix
        inputs:
          suffixes:
            - $REGION.ec2-utilities.amazonaws.com
      - task: setAdminAccount
        inputs:
          password:
            type: random
      - task: setWallpaper
        inputs:
          attributes:
            - hostName
            - instanceId
            - privateIpAddress
            - publicIpAddress
            - ipv6Address
            - instanceSize
            - availabilityZone
            - architecture
          path: C:\Windows\Web\Wallpaper\Windows\img0.jpg

  - stage: postReady
    tasks:
      - task: initializeVolume
        inputs:
          initialize: devices
          devices:
            - device: /dev/nvme0n1
              name: Temporary Storage 0
              letter: F
              partition: mbr
      - task: startSsm

※ 適宜修正してください

これで設定は完了です。
対象の EC2 インスタンスを停止・起動を行い、F: ドライブに自動的にマッピングされていれば完了です。

02

または、以下の PowerShell コマンドでも確認可能です。

Get-Partition | ForEach-Object {
    $p = $_
    $v = Get-Volume -Partition $p -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        DiskNumber      = $p.DiskNumber
        PartitionNumber = $p.PartitionNumber
        DriveLetter     = $p.DriveLetter
        Label           = $v.FileSystemLabel
        FileSystem      = $v.FileSystem
        SizeGB          = [math]::Round($p.Size / 1GB, 2)
    }
} | Format-Table -AutoSize

03

成功ですね。

Windows Server 2016: EC2Launch v1

該当 OS Ver (EC2Launch v1) で EC2 インスタンスを起動します。
下記 PowerShell コマンドを管理者で実行し、EC2Launch Ver と EBS を含む接続ボリューム一覧を確認します。

  • Test-ModuleManifest -Path "C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1" | Select Version
  • Get-Volume | Select-Object DriveLetter, FileSystemLabel, FileSystem, DriveType, Size, SizeRemaining

04

EC2Launch v1 (1.4.299) で起動中であることが確認できました。
インスタンスストアボリュームはどこにもマッピングされていないことも確認できました。
それでは、起動時に自動で F: ドライブとしてマッピングされるように C:\ProgramData\Amazon\EC2-Windows\Launch\Config\DriveLetterMappingConfig.json を開き追加設定します。

DriveLetterMappingConfig.json 例
{
  "driveLetterMapping": [
    {
      "volumeName": "Temporary Storage 0",
      "driveLetter": "F"
    }
  ]
}

06
※ 適宜修正してください

EC2Launch v2 とは異なり、DriveLetterMappingConfig.json に Temporary Storage 0 → F: の対応を書くだけではなく、EC2Launch v1 の InitializeDisks.ps1 を実行して初めて設定が適用されます。さらに、起動時に毎回自動適用したい場合は InitializeDisks.ps1 -Schedule を実行してスケジュール登録します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2launch-config.html#ec2launch-mapping

Windows PowerShell を開き、以下のコマンドを使用してディスクを初期化する EC2Launch スクリプトを実行します。

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1

EC2 インスタンスが起動するたびにディスクを初期化するため、-Schedule フラグを次のように追加します。

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeDisks.ps1 -Schedule

これで、設定は終了です。対象の EC2 インスタンスを停止・起動を行います。
想定通りに、インスタンスストアボリュームが F: ドライブとしてマッピングされるか確認します。

08

または、以下の PowerShell コマンドでも確認可能です。

Get-Partition | ForEach-Object {
    $p = $_
    $v = Get-Volume -Partition $p -ErrorAction SilentlyContinue
    [PSCustomObject]@{
        DiskNumber      = $p.DiskNumber
        PartitionNumber = $p.PartitionNumber
        DriveLetter     = $p.DriveLetter
        Label           = $v.FileSystemLabel
        FileSystem      = $v.FileSystem
        SizeGB          = [math]::Round($p.Size / 1GB, 2)
    }
} | Format-Table -AutoSize

07

成功ですね!

まとめ

EC2Launch の Ver によって設定ファイルや確認コマンドが異なるため、事前に利用中の launch agent を確認することをお勧めします。
本ブログが誰かの参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

関連記事