Как найти идентификатор тома EBS на диске в Windows на AWS EC2

У нас есть несколько экземпляров EC2, все с несколькими дисками. Становится запутанным отслеживать, какой из дисков является правильным, в консоли AWS, когда имеется много дисков вместе.

В некоторой степени этому может помочь соглашение об именах.

Но есть ли способ получить идентификатор тома (или какой-либо идентификатор) в окнах диска EBS, чтобы его можно было найти в консоли AWS?


person fungus1487    schedule 02.05.2014    source источник


Ответы (2)


Вы можете использовать AWS Tools for Powershell для запроса всех томов, подключенных к данному экземпляру. Вот пример:

# Specify your instance's ID
$instance = "i-1234abcd"

# Get a collection of all volumes attached to the instance
$volumes = @(get-ec2volume) | ? { $_.Attachments.InstanceId -eq $instance}

# Get a collection of each volume's ID property
$volumeNames = $volumes | % { $_.VolumeId}

Это вызовет командлет Get-EC2Volume, и возвращает объект Amazon.EC2.Model.Volume для каждого тома, подключенного к работающему экземпляру. Оттуда вы можете извлечь имена томов, как указано выше.

Если вы запускаете это из самого экземпляра EC2, попробуйте вместо этого получить идентификатор экземпляра из веб-службы EC2:

# Get Instance ID from the EC2 metadata web service
$instanceID = (New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
person Anthony Neace    schedule 02.05.2014

Я использую сценарий ниже. Этот сценарий будет перебирать все тома EBS и добавлять тег в EBS в соответствии с его меткой диска. Вы можете изменить его по своему усмотрению (см. Нижние блоки if-else). Вашему EC2 нужна соответствующая роль EC2 Write IAM.

Start-Transcript -Path C:\cfn\log\Tag-EBS-Volumes.ps1.txt -Append
        # Create a hash table that maps each device to a SCSI target
        $Map = @{"0" = '/dev/sda1'}
        for($x = 1; $x -le 25; $x++) {$Map.add($x.ToString(), [String]::Format("/dev/xvd{0}",[char](97 + $x)))}
        for($x = 78; $x -le 102; $x++) {$Map.add($x.ToString(), [String]::Format("/dev/xvdc{0}",[char](19 + $x)))}

    Try {
        # Use the metadata service to discover which instance the script is running on
        $InstanceId = (Invoke-WebRequest '169.254.169.254/latest/meta-data/instance-id').Content
        $AvailabilityZone = (Invoke-WebRequest '169.254.169.254/latest/meta-data/placement/availability-zone').Content
        $Region = $AvailabilityZone.Substring(0, $AvailabilityZone.Length -1)

        # Get the list of volumes attached to this instance
        $BlockDeviceMappings = (Get-EC2Instance -Region $Region -Instance $InstanceId).Instances.BlockDeviceMappings
    }
    Catch
    {
        Write-Host "Could not access the AWS API, are your credentials loaded?"  -ForegroundColor Yellow
    }

    Get-WmiObject -Class Win32_DiskDrive | %{
        $Drive = $_
        # Find the partitions for this drive
        Get-WmiObject -Class Win32_DiskDriveToDiskPartition |  Where-Object {$_.Antecedent -eq $Drive.Path.Path} | %{
            $D2P = $_
            # Get details about each partition
            $Partition = Get-WmiObject -Class Win32_DiskPartition |  Where-Object {$_.Path.Path -eq $D2P.Dependent}
            # Find the drive that this partition is linked to
            $Disk = Get-WmiObject -Class Win32_LogicalDiskToPartition | Where-Object {$_.Antecedent -in $D2P.Dependent} | %{
                $L2P = $_
                # Get the drive letter for this partition, if there is one
                Get-WmiObject -Class Win32_LogicalDisk | Where-Object {$_.Path.Path -in $L2P.Dependent}
            }

            $BlockDeviceMapping = $BlockDeviceMappings | Where-Object { $_.DeviceName -eq $Map[$Drive.SCSITargetId.ToString()] }

             If( $Disk.VolumeName -eq "") {
                $tagvalue= "$env:COMPUTERNAME-Root"
             }  ElseIf ($Disk.VolumeName -eq "ABC" )
             {
                $tagvalue= "$env:COMPUTERNAME-ABC"
             }ElseIf ($Disk.VolumeName -eq "DEF" )
             {
                $tagvalue= "$env:COMPUTERNAME-DEF"
             }Else
             {
                $tagvalue= ""
             }

             New-EC2Tag -Resources $BlockDeviceMapping.Ebs.VolumeId -Tags @{ Key = "Name"; Value = $tagvalue } # Add volume name tag that matches VolumeId
        }
    }
person ExploringApple    schedule 18.01.2018