Когда вы скачиваете объект из бакета с версионированием, вы получаете его текущую версию.
Однако в некоторых ситуациях, — например, когда нужно восстановить данные из резервной копии на конкретную дату — может возникнуть необходимость скачать одну из предыдущих версий. Для этого в запросе на скачивание нужно указать ее идентификатор.
Импортирует boto3 — официальный AWS SDK для Python.
Создает сессию для подключения к Object Storage.
Определяет имя бакета, имя и идентификатор версии объекта, которую нужно скачать, а также путь в локальной файловой системе, по которому версия будет сохранена.
#Определяем имя бакета, ключ объекта, идентификатор версии и путь в локальной файловой системе
10
bucket_name ='bucket'
11
key ='object.txt'
12
version_id ='00062849C90079F6'
13
local_path ='folder/object.txt'
14
#Скачиваем версию
15
try:
16
s3.download_file(
17
Bucket=bucket_name,
18
Key=key,
19
VersionId=version_id,
20
Filename=local_path
21
)
22
#Выводим сообщение об успешном скачивании версии
23
print(f'Object {key}, version {version_id} successfully downloaded to {local_path}')
24
except botocore.exceptions.ClientError as e:
25
if e.response['Error']['Code']=='404':
26
print(f'Object {key}, version {version_id} not found') # Если версия с указанным идентификатором не найдена, сообщаем об этом
27
else:
28
print(f'Error downloading object: {e}')
29
exceptExceptionas e:
30
print(f'Error downloading object: {e}')
Приведенный код на Go:
Импортирует необходимые пакеты, в том числе AWS SDK для Go.
Получает из аргументов командной строки имя бакета, ключ объекта, идентификатор версии и путь в локальной файловой системе, по которому нужно сохранить объект.
Подгружает конфигурацию из ~/aws/*.
Создает клиент для подключения к Object Storage.
Создает локальный файл для скачивания версии объекта.
Скачивает указанную версию объекта и сохраняет в созданный файл.
go
1
package main
2
3
import (
4
"context"
5
"flag"
6
"fmt"
7
"io"
8
"log"
9
"os"
10
11
"github.com/aws/aws-sdk-go-v2/aws"
12
"github.com/aws/aws-sdk-go-v2/config"
13
"github.com/aws/aws-sdk-go-v2/service/s3"
14
)
15
16
funcmain() {
17
// Получаем имя бакета, ключ объекта, локальный путь и идентификатор версии из аргументов командной строки
18
bucketName:=flag.String("b", "", "The name of the bucket")
19
objectKey:=flag.String("k", "", "Key of the object to download")
20
file:=flag.String("f", "", "The local path to save the downloaded object")
21
versionID:=flag.String("v", "", "The version ID of the object to download")
22
flag.Parse()
23
24
if*bucketName=="" {
25
fmt.Println("You must supply the name of a bucket (-b BUCKET)")
26
return
27
}
28
29
if*objectKey=="" {
30
fmt.Println("You must supply the object key (-k KEY)")
31
return
32
}
33
34
if*file=="" {
35
fmt.Println("You must supply the local file path (-f PATH)")
36
return
37
}
38
39
if*versionID=="" {
40
fmt.Println("You must supply the version ID of the object (-v VERSION_ID)")