Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
How do I use CloudFormation to map drive letters to Amazon EBS volumes in Windows?
I want to use AWS CloudFormation to map drive letters to Amazon Elastic Block Store (Amazon EBS) volumes in Windows.
Resolution
Use a custom CloudFormation script that runs during boot to map drive letters to the Amazon EBS volumes in Windows.
Complete the following steps:
-
Use the Amazon Machine Image (AMI) for Windows Server 2016 Base or later to launch a Windows instance
-
(Optional) Create a D drive manually. Then, put a data file in the D drive. For more information, see Make an Amazon EBS volume available for use on Windows.
-
Use the ShutDown with the Sysprep option to create an AMI from your instance. For more information, see Configure a Windows instance using EC2Launch.
-
Create a CloudFormation stack based on the following template.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. { "AWSTemplateFormatVersion": "2010-09-09", "Description": "AWS CloudFormation template AV Group, Launch Config for EC2", "Resources": { "DBServer": { "Type": "AWS::EC2::Instance", "Metadata" : { "AWS::CloudFormation::Init" : { "config" : { "files" : { "c:\\cfn\\cfn-hup.conf" : { "content" : { "Fn::Join" : ["", [ "[main]\n", "stack=", { "Ref" : "AWS::StackId" }, "\n", "region=", { "Ref" : "AWS::Region" }, "\n" ]]} }, "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf" : { "content": { "Fn::Join" : ["", [ "[cfn-auto-reloader-hook]\n", "triggers=post.update\n", "path=Resources.DBServer.Metadata.AWS::CloudFormation::Init\n", "action=cfn-init.exe -v -s ", { "Ref" : "AWS::StackId" }, " -r DBServer", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]} }, "c:\\cfn\\hooks.d\\drives.diskpart.txt" : { "content": { "Fn::Join" : ["", [ "select disk 2\n", "attributes disk clear readonly\n", "clean\n", "online disk\n", "convert gpt\n", "create partition primary\n", "format quick fs=ntfs label=","\"","ORATEMP","\"","\n", "assign letter=X\n", "select disk 3\n", "attributes disk clear readonly\n", "clean\n", "online disk\n", "convert gpt\n", "create partition primary\n", "format quick fs=ntfs label=","\"","ORADATA","\"","\n", "assign letter=S\n", "select disk 1\n", "online disk\n" ]]}}, "c:\\cfn\\hooks.d\\renamedrives.ps1" : { "content": { "Fn::Join" : ["", [ "diskpart /s c:\\cfn\\hooks.d\\drives.diskpart.txt\n" ]]}} }, "commands" : { "1-rename-drives" : { "command" : "powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File c:\\cfn\\hooks.d\\renamedrives.ps1", "waitAfterCompletion" : "0" }, "2-signal-success" : { "command" : { "Fn::Join" : [ "", [ "cfn-signal.exe -e %ERRORLEVEL% \"", { "Fn::Base64" : { "Ref" : "WindowsServerWaitHandle" }}, "\""]] } } }, "services" : { "windows" : { "cfn-hup" : { "enabled" : "true", "ensureRunning" : "true", "files" : ["c:\\cfn\\cfn-hup.conf", "c:\\cfn\\hooks.d\\cfn-auto-reloader.conf"] } } } } } }, "Properties": { "ImageId": "ami-01xxxxxxxxxx", "InstanceType": "m4.xlarge", "KeyName": "xxxxxxxx", "BlockDeviceMappings": [ {"DeviceName": "xvdg","Ebs":{"VolumeSize":"20"}}, {"DeviceName": "xvdm","Ebs":{"VolumeSize":"20"}} ], "Tags": [ { "Key": "Name", "Value": {"Fn::Join": ["-", ["DB",{"Ref": "AWS::StackName"}]]} }], "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "<powershell>\n", "cfn-init.exe -v -s ", { "Ref" : "AWS::StackId" }, " -r DBServer", " --region ", { "Ref" : "AWS::Region" }, "\n", "</powershell>" ]]}} } }, "WindowsServerWaitHandle" : { "Type" : "AWS::CloudFormation::WaitConditionHandle" }, "WindowsServerWaitCondition" : { "Type" : "AWS::CloudFormation::WaitCondition", "DependsOn" : "DBServer", "Properties" : { "Handle" : {"Ref" : "WindowsServerWaitHandle"}, "Timeout" : "1800" } } } }
Note: The preceding template includes a script that creates Disk 2 with drive letter X and Disk 3 with drive letter S.
The following script is part of the template shown in step 4 and is called out here for emphasis. The script configures the volume with the master boot record (MBR) partition structure. Then, the script formats the volume as an NTFS volume and assigns a drive letter.
"select disk 2\n", "attributes disk clear readonly\n", "clean\n", "online disk\n", "convert gpt\n", "create partition primary\n", "format quick fs=ntfs label=","\"","ORATEMP","\"","\n", "assign letter=X\n", "select disk 3\n", "attributes disk clear readonly\n", "clean\n", "online disk\n", "convert gpt\n", "create partition primary\n", "format quick fs=ntfs label=","\"","ORADATA","\"","\n", "assign letter=S\n", "select disk 1\n", "online disk\n"
-
Move the script to the files section of AWS::CloudFormation::Init, and then run the script that uses the command section.
Note: Disk0 is always the root volume.Windows Explorer displays the drive sequence alphabetically. To find the disk number assigned to the disk letter from your CloudFormation template, run the diskmgmt command in the Disk Management utility.
-
Deploy your instance. Then, connect to your instance using the Remote Desktop Protocol (RDP).
For this example, your instance now has four drives. Your D drive has the data file that you saved in step 1.
Drive D =====> Drive with the data file Drive S =====> This is the Disk 3 Drive X =====> This is the Disk 2

Relevant content
- asked 2 years agolg...
- asked 3 years agolg...
- Accepted Answerasked 2 years agolg...