簡體   English   中英

Boto3不會將快照復制到其他區域嗎?

[英]Boto3 not copying snapshot to other regions, other options?

[AWS的新手]

你好

我正在嘗試跨區域移動我的EBS卷快照副本。 我一直在嘗試使用Boto3移動快照。 我的目標是每天自動將最新快照從us-east-2區域移動到us-east-1區域。

我已經在終端中使用了aws configure命令來設置我的安全憑證並將區域設置為us-east-2

我正在使用熊貓使用以下代碼來獲取最新的快照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返回快照ID,例如snap-1234ABCD

我嘗試使用此代碼將快照從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.')

快照使用上述行在同一區域中復制。

我還嘗試通過終端中的aws configure命令切換區域,在將快照復制到同一區域時會發生相同的問題。

Boto3中有一個錯誤,該錯誤會跳過copy_snapshot()代碼中的目標參數。 在此處找到信息: https : //github.com/boto/boto3/issues/886

我曾嘗試將此代碼插入到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)

我沒有選擇權,如何在AWS中自動執行快照傳輸?

根據CopySnapshot-Amazon Elastic Compute Cloud

CopySnapshot將快照副本發送到您向其發送HTTP請求的區域端點 ,例如ec2.us-east-1.amazonaws.com (在AWS CLI中,這是通過--region參數或您的AWS配置文件)。

因此,您應該將copy_snapshot()命令發送到us-east-1 ,並且源區域設置為us-east-2

如果要移動最新快照,可以運行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM