迁移到另一个库后,Boto Python库仍认为它位于原始EC2数据中心中

par*_*oid 3 python migration amazon-ec2 boto amazon-web-services

我已将Debian Amazon EC2服务器(实际上已复制)从北弗吉尼亚州迁移到了VPC内的爱尔兰数据中心。

我一直在使用此python脚本在夜间进行自动EBS快照备份,但是由于我已经迁移了服务器,因此无法正常工作。

新卷未被识别为现有卷,但是即使服务器位于爱尔兰,它也可以为北弗吉尼亚州的旧卷创建快照。

我收到此错误:

root@ip-10-0-0-100:~# python /srv/bin/manage_snapshots.py vol-fac935ae 14 "Test Backup"
Traceback (most recent call last):
  File "/srv/bin/manage_snapshots.py", line 36, in <module>
    volumes = conn.get_all_volumes([vol_id])
  File "/usr/local/lib/python2.7/dist-packages/boto/ec2/connection.py", line 2099, in get_all_volumes
    [('item', Volume)], verb='POST')
  File "/usr/local/lib/python2.7/dist-packages/boto/connection.py", line 1131, in get_list
    raise self.ResponseError(response.status, response.reason, body)
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>InvalidVolume.NotFound</Code><Message>The volume 'vol-fac935ae' does not exist.</Message></Error></Errors><RequestID>30ba36b6-2f07-4c5f-b307-36865cb7ef44</RequestID></Response>
Run Code Online (Sandbox Code Playgroud)

假设问题出在boto配置中,我如何得知服务器现在在爱尔兰?

我已经在~/.profile

# set AWS region
export EC2_URL=https://ec2.eu-west-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

但是我认为这仅适用于命令行ec2-api-tools。

gar*_*aat 5

您可以通过编程找到EC2实例位于哪个区域,如下所示:

import boto.utils
data = boto.utils.get_instance_identity()
region_name = data['document']['region']
Run Code Online (Sandbox Code Playgroud)

一旦知道了区域,就可以像下面这样连接到脚本中的正确区域:

import boto.ec2
conn = boto.ec2.connect_to_region(region_name)
Run Code Online (Sandbox Code Playgroud)

这应该使您的脚本能够在任何区域的任何实例上运行。