2014-05-02 4 views
2

Nous avons plusieurs instances EC2, toutes avec plusieurs lecteurs. Il devient confus de surveiller quel lecteur est le bon dans la console AWS quand il y a beaucoup de disques ensemble.Comment trouver l'ID de volume EBS du lecteur sous Windows sur AWS EC2

La convention de dénomination peut aider dans une certaine mesure.

Mais existe-t-il un moyen d'obtenir l'ID de volume (ou un identificateur) dans les fenêtres d'un disque EBS afin qu'il puisse être trouvé dans la console AWS?

Répondre

1

Vous pouvez utiliser AWS Tools for Powershell pour rechercher tous les volumes attachés à une instance donnée. Voici un exemple:

# 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} 

Cela invoquera l'applet de commande Get-EC2Volume, et retourne un objet Amazon.EC2.Model.Volume pour chaque volume qui est attaché à l'instance en cours d'exécution. De là, vous pouvez extraire les noms de volume comme ci-dessus.

Si vous utilisez ce de l'instance EC2 lui-même, essayez de tirer l'ID d'instance du lieu de service Web 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") 
0

J'utilise ci-dessous script. Ce script parcourra tous les volumes EBS et ajoutera une balise à EBS en fonction de son étiquette de disque. Vous pouvez le modifier selon vos besoins (voir les blocs if-else en bas). Votre EC2 avait besoin du rôle IAM Write EC2 approprié.

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 
     } 
    } 
Questions connexes