Amazon EBSのボリュームを自動でattachしてマウントしたい – cyberarchitect
を参考にさせて頂き試してみましたがエラーが…。><
『Client.InvalidVolume.NotFound: The volume ‘vol-XXXXXXXX’ does not exist.』
リージョンの設定が足りないようだったので。
Scripts to automatically attach and mount an EBS Volume at Boot Time
のスクリプトを改造して、ec2-attach-volume コマンドに –region のオプションを追加した。
# diff -Nur mount_ebs_volume.py_org mount_ebs_volume.py > mount_ebs_volume_add_region.patch
# cat mount_ebs_volume_add_region.patch
--- mount_ebs_volume.py_org 2011-09-27 16:04:22.028387625 +0900
+++ mount_ebs_volume.py 2011-09-28 13:14:12.100673654 +0900
@@ -31,7 +31,7 @@
def mount():
logging.info('Attempting to attach volume [%s] to instance [%s] as [%s]' % (volume_name, instance_id, device_name))
- cmd = 'ec2-attach-volume -C %s -K %s %s -i %s -d %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name)
+ cmd = 'ec2-attach-volume -C %s -K %s %s -i %s -d %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name, ec2conf['REGION'])
for i in range(0, 20):
p = Popen(cmd, shell=True,stdout=PIPE);
@@ -49,7 +49,7 @@
logging.info('Volume [%s] attaching to device [%s] in attempt #%d' % (_volume_id, _device_id, i))
# wait for fully attached
- cmd = 'ec2-describe-volumes -C %s -K %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'])
+ cmd = 'ec2-describe-volumes -C %s -K %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], ec2conf['REGION'])
for n in range(0, 20):
logging.debug('Running ec2-describe-volumes for the %dth time' % n)
p = Popen(cmd, shell=True,stdout=PIPE);
@@ -79,13 +79,21 @@
def unmount():
logging.info('Attempting to detach volume [%s] from instance [%s] as [%s]' % (volume_name, instance_id, device_name))
- cmd = 'ec2-detach-volume -C %s -K %s %s -i %s -d %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name)
+ cmd = 'umount %s ' % (device_name)
+ p = Popen(cmd, shell=True,stdout=PIPE);
+ exitcode = p.wait() & 0xff; # exit code is in the high byte
+ logging.debug('umount returned status code %d' % exitcode)
+ if exitcode == 0:
+ logging.info('Successfully unmount volume [%s] as [%s]' % (volume_name, device_name))
+
+ cmd = 'ec2-detach-volume -C %s -K %s %s -i %s -d %s --region %s' % (ec2conf['CERT'], ec2conf['PRIVKEY'], volume_name, instance_id, device_name, ec2conf['REGION'])
p = Popen(cmd, shell=True,stdout=PIPE);
exitcode = p.wait() & 0xff; # exit code is in the high byte
logging.debug('ec2-detach-volume returned status code %d' % exitcode)
if exitcode == 0:
logging.info('Successfully detached volume [%s] from instance [%s] as [%s]' % (volume_name, instance_id, device_name))
+
# arguments
if len(sys.argv) < 5:
@@ -119,9 +127,9 @@
logger.setLevel(logging.INFO)
# setup environment
-os.putenv('PATH', '/root/ec2-api-tools/bin/:' + os.getenv('PATH'))
-os.putenv('EC2_HOME', '/root/ec2-api-tools/')
-os.putenv('JAVA_HOME', '/usr/lib/jvm/java-6-sun')
+os.putenv('PATH', '/opt/aws/bin/:' + os.getenv('PATH'))
+os.putenv('EC2_HOME', '/opt/aws/apitools/ec2/')
+os.putenv('JAVA_HOME', '/usr/lib/jvm/jre/')
# EC2 conf
ec2conf = shellVars2Dict('/root/.ec2cred')
※ ec2-detach-volume するときに unmount しないとうまくいかなかったのでそれも追加した。
.ec2cred に
REGION=ap-northeast-1
を追加した。
# diff -Nur .ec2cred_org .ec2cred
--- .ec2cred_org 2011-09-27 08:40:53.000000000 +0900 +++ .ec2cred 2011-09-27 16:17:53.789461128 +0900 @@ -1,4 +1,5 @@ -CERT=/root/cert-XXX.pem -PRIVKEY=/root/pk-XXX.pem -AWSACCOUNTID=XXXX-XXXX-XXXX +CERT=/root/cert-XXXAAA.pem +PRIVKEY=/root/pk-XXXAAA.pem +AWSACCOUNTID=XXXX-XXXX-XXXX +REGION=ap-northeast-1
これでOKになりました。










