[英]Boto3 not copying snapshot to other regions, other options?
[Very new to AWS] [AWS的新手]
Hi, 你好
I am trying to move my EBS volume snapshot copies across regions. 我正在尝试跨区域移动我的EBS卷快照副本。 I have been trying to use Boto3 to move the snapshots.
我一直在尝试使用Boto3移动快照。 My objective is to move the latest snapshot from
us-east-2
region to us-east-1
region automatically on a daily basis. 我的目标是每天自动将最新快照从
us-east-2
区域移动到us-east-1
区域。
I have used aws configure
command in terminal to setup my security credentials and set region to us-east-2
. 我已经在终端中使用了
aws configure
命令来设置我的安全凭证并将区域设置为us-east-2
。
I am using pandas to acquire the most recent snapshot-id using this code: 我正在使用熊猫使用以下代码来获取最新的快照ID:
import boto3
import pandas as pd
from pandas.io.json.normalize import nested_to_record
import boto.ec2
client = boto3.client('ec2')
aws_api_response = client.describe_snapshots(OwnerIds=['self'])
flat = nested_to_record(aws_api_response)
df = pd.DataFrame.from_dict(flat)
df= df['Snapshots'].apply(pd.Series)
insert_snap = df.loc[df['StartTime'] == max(df['StartTime']),'SnapshotId']
insert_snap = insert_snap.reset_index(drop=True)
insert_snap
returns a snapshot id something like snap-1234ABCD
insert_snap
返回快照ID,例如snap-1234ABCD
I am try to use this code to move the snap shot from us-east-2
to u s-east-1
: 我尝试使用此代码将快照从
us-east-2
移至us s-east-1
:
client.copy_snapshot(SourceSnapshotId='%s' %insert_snap[0],
SourceRegion='us-east-2',
DestinationRegion='us-east-1',
Description='This is my copied snapshot.')
The snapshot is copying in the same region using the above line. 快照使用上述行在同一区域中复制。
I have also tried switching regions through aws configure
command in terminal, with the same issue occurring where snapshot is being copied in the same region. 我还尝试通过终端中的
aws configure
命令切换区域,在将快照复制到同一区域时会发生相同的问题。
There is a bug in Boto3 that is skipping the destination parameter in the copy_snapshot()
code. Boto3中有一个错误,该错误会跳过
copy_snapshot()
代码中的目标参数。 Information found here: https://github.com/boto/boto3/issues/886 在此处找到信息: https : //github.com/boto/boto3/issues/886
I have tried inserting this code with into the lambda manager but keep getting error "errorMessage": "Unable to import module 'lambda_function'"
: 我曾尝试将此代码插入到lambda管理器中,但
"errorMessage": "Unable to import module 'lambda_function'"
收到错误"errorMessage": "Unable to import module 'lambda_function'"
:
region = 'us-east-2'
ec = boto3.client('ec2',region_name=region)
def lambda_handler(event, context):
response=ec.copy_snapshot(SourceSnapshotId='snap-xxx',
SourceRegion=region,
DestinationRegion='us-east-1',
Description='copied from Ohio')
print (response)
I am out of options, what I can do to automate the transfer of snapshots in aws? 我没有选择权,如何在AWS中自动执行快照传输?
As per CopySnapshot - Amazon Elastic Compute Cloud : 根据CopySnapshot-Amazon Elastic Compute Cloud :
CopySnapshot sends the snapshot copy to the regional endpoint that you send the HTTP request to , such as
ec2.us-east-1.amazonaws.com
(in the AWS CLI, this is specified with the --region parameter or the default region in your AWS configuration file).CopySnapshot将快照副本发送到您向其发送HTTP请求的区域端点 ,例如
ec2.us-east-1.amazonaws.com
(在AWS CLI中,这是通过--region参数或您的AWS配置文件)。
Therefore, you should send the copy_snapshot()
command to us-east-1
, with the Source Region set to us-east-2
. 因此,您应该将
copy_snapshot()
命令发送到us-east-1
,并且源区域设置为us-east-2
。
If you wish to move the most recent snapshot, you could run: 如果要移动最新快照,可以运行:
import boto3
SOURCE_REGION = 'us-east-2'
DESTINATION_REGION = 'us-east-1'
# Connect to EC2 in Source region
source_client = boto3.client('ec2', region_name=SOURCE_REGION)
# Get a list of all snapshots, then sort them
snapshots = source_client.describe_snapshots(OwnerIds=['self'])
snapshots_sorted = sorted([(s['SnapshotId'], s['StartTime']) for s in snapshots['Snapshots']], key=lambda k: k[1])
latest_snapshot = snapshots_sorted[-1][0]
print ('Latest Snapshot ID is ' + latest_snapshot)
# Connect to EC2 in Destination region
destination_client = boto3.client('ec2', region_name=DESTINATION_REGION)
# Copy the snapshot
response = destination_client.copy_snapshot(
SourceSnapshotId=latest_snapshot,
SourceRegion=SOURCE_REGION,
Description='This is my copied snapshot'
)
print ('Copied Snapshot ID is ' + response['SnapshotId'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.