Volume EBS de assembly automatique dans l’instance Windows Amazon EC2

Est-ce que quelqu’un sait comment monter automatiquement un volume EBS ( Elastic Block Storage ) lors du démarrage d’une instance de Windows 2003 dans Elastic Compute Cloud (EC2) d’Amazon?

Installer:

  • Assurez-vous que le volume EBS est formaté et étiqueté (dans l’exemple, j’ai utilisé l’étiquette PDRIVE).
  • Configurer un mappage de lecteur avec Ec2ConfigServiceSettings.exe
  • Installer Java sur l’instance
  • Installer les outils de ligne de commande de l’API EC2
  • Installez une copie de votre certificate et de votre clé privée
  • Installer une copie de curl.exe (outil open source)

Vous pouvez utiliser l’éditeur de stratégie de groupe pour définir ce script comme votre script de démarrage. Voir http://technet.microsoft.com/en-us/library/cc739591(WS.10).aspx pour plus d’informations.

REM @echo off REM setlocal ENABLEDELAYEDEXPANSION C:\WINDOWS\system32\eventcreate /l SYSTEM /t information /id 100 /so AttachEbsBoot /d "Starting attach-ebs-boot.cmd" REM local variables REM Make sure you include the directory with curl.exe and the EC2 command line tools in the path set path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Utils;C:\ebin\ec2\bin set JAVA_HOME=c:\java set EC2_HOME=c:\ebin\ec2 set EC2_CERT= set EC2_PRIVATE_KEY= REM Please note: you should use the Ec2 Config Serive Settings application to ensure REM that your EBS volume is mapped to a particular drive letter. REM REM edit as needed set EBS_DRIVE=P: set EBS_DEVICE=xvdp REM Test to see if the drive is already attached. If it is then we're done. if exist %EBS_DRIVE%\nul (goto done) REM get the EBS volume ID from the user data and the instance ID from the meta-data for /f "delims=" %%a in ('curl http://169.254.169.254/latest/user-data') do (set EBS_VOLUME=%%a) for /f "delims=" %%b in ('curl http://169.254.169.254/latest/meta-data/instance-id') do (set INSTANCE_ID=%%b) C:\WINDOWS\system32\eventcreate /l SYSTEM /t information /id 102 /so AttachEbsBoot /d "Volume == %EBS_VOLUME%" C:\WINDOWS\system32\eventcreate /l SYSTEM /t information /id 103 /so AttachEbsBoot /d "Instance == %INSTANCE_ID%" REM attach the volume REM REM Use a series of set command to build the command line SET COMMAND_LINE=%EBS_VOLUME% SET COMMAND_LINE=%COMMAND_LINE% -i SET COMMAND_LINE=%COMMAND_LINE% %INSTANCE_ID% SET COMMAND_LINE=%COMMAND_LINE% -d SET COMMAND_LINE=%COMMAND_LINE% %EBS_DEVICE% C:\WINDOWS\system32\eventcreate /l SYSTEM /t information /id 104 /so AttachEbsBoot /d "calling ec2attvole %COMMAND_LINE%" call ec2attvol.cmd %COMMAND_LINE% :DONE C:\WINDOWS\system32\eventcreate /l SYSTEM /t information /id 101 /so AttachEbsBoot /d "Exiting attach-ebs-boot.cmd" REM Events logged in the System event log REM source === AttachEbsBoot REM REM Event 100 - Script start REM Event 101 - Script end REM Event 102 - Volume ID REM Event 103 - Instance ID REM Event 104 - Command line for ec2attvol 

J’ai trouvé le code Ruby suivant sur http://www.ioncannon.net/system-administration/199/automounting-amazon-ebs-volumes-on-ec2-instances/ avec la permission de Carson McDonald. C’est pour Linux / Unix, mais peut-être pouvez-vous ré-activer ceci pour Ruby sur Windows 2003 ou le faire servir de modèle pour le faire dans un autre langage de script.

Notez que vous pouvez transférer des éléments dans votre image en tant que données utilisateur telles que l’ID de volume ECS EBS et le nom du périphérique (par exemple, / dev / sdh dans l’exemple suivant ou celui de Windows dans votre cas). Vous pouvez accéder aux données utilisateur à partir de l’instance elle-même en tant que métadonnées, comme indiqué ci-dessous pour obtenir l’ID d’instance. Plus précisément, vous accédez à http://169.254.169.254/1.0/user-data pour accéder aux données utilisateur.

 #!/usr/bin/ruby require 'rubygems' require 'right_aws' require 'net/http' url = 'http://169.254.169.254/2008-02-01/meta-data/instance-id' instance_id = Net::HTTP.get_response(URI.parse(url)).body AMAZON_PUBLIC_KEY='your public key' AMAZON_PRIVATE_KEY='your private key' EC2_LOG_VOL='the volume id' ec2 = RightAws::Ec2.new(AMAZON_PUBLIC_KEY, AMAZON_PRIVATE_KEY) vol = ec2.attach_volume(EC2_LOG_VOL, instance_id, '/dev/sdh') puts vol # It can take a few seconds for the volume to become ready. # This is just to make sure it is ready before mounting it. sleep 20 system('mount /dev/sdh /mymountpoint')