
В этой статье мы рассмотрим, как подключиться к облачному объектному хранилищу S3, используя популярные клиенты и SDK.
Технические ограничения
- Максимальное количество бакетов – 100, может быть увеличено по запросу в техническую поддержку
- Максимальный размер имени бакета – 50 символов (a-z, 0-9, -)
- Максимальное количество объектов в контейнере – не ограничено
- Максимальный размер объекта – 50 ТБ
- Максимальный размер имени объекта – 1024 символов UTF-8
- Максимальный размер данных для загрузки за один запрос – 5 ГБ
- Максимальное количество сегментов при сегментированной загрузке – 10000
- Максимальное количество заголовков метаданных для объекта – 90
- Максимальный размер имени заголовка – 128 символа UTF-8
- Максимальное количество символов в значении заголовка – 1024 символов UTF-8
- Объем хранилища – не ограничено
- Максимальное количество HTTP-запросов к S3 API для аккаунта – 2000 запросов в секунду
- Максимальное количество HTTP-запросов к бакету (GET, HEAD, OPTIONS) – 2000 запросов в секунду
- Функции, направленные на взаимодействие с бакетами (например, их создание и удаление) доступны только из панели управления и не могут быть использованы в сторонних клиентах (
aws create-bucket …
в aws-cli,s3.create_bucket()
в SDK и т.д.)
AWS CLI
AWS CLI — это интерфейс командной строки для работы с сервисами AWS. Общий порядок вызова команд смотрите в официальной документации Amazon.
Установка
Для установки AWS CLI воспользуйтесь инструкцией на сайте разработчика.
Настройка
Для настройки AWS CLI в терминале введите команду aws configure
. Команда запросит значения для следующих параметров:
- AWS Access Key ID — Access Key созданного вами бакета, доступен в панели управления при выборе бакета.
- AWS Secret Access Key — Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
- Значения остальных параметров оставьте без изменений.
Конфигурационные файлы
В результате работы команда aws configure
сохранит ключи доступа.
Формат ключей доступа в .aws/credentials
:
[default]
aws_access_key_id = <идентификатор_статического_ключа>
aws_secret_access_key = <содержимое_статического_ключа>
Вы можете создать несколько профилей для разных сервисных аккаунтов, указав их данные в файле .aws/credentials
:
[default]
aws_access_key_id = <идентификатор_статического_ключа_1>
aws_secret_access_key = <содержимое_статического_ключа_1>
[<имя_профиля_2>]
aws_access_key_id = <идентификатор_статического_ключа_2>
aws_secret_access_key = <содержимое_статического_ключа_2>
...
[<имя_профиля_n>]
aws_access_key_id = <идентификатор_статического_ключа_n>
aws_secret_access_key = <содержимое_статического_ключа_n>
Где default
— профиль по умолчанию.
Чтобы при использовании S3 переключаться между разными профилями в командах AWS CLI, используется опция --profile
, например:
aws --endpoint-url=https://s3.ru1.storage.beget.cloud --profile <имя_профиля_2> s3 ls s3://<имя_бакета>
Чтобы при работе постоянно не указывать параметр --endpoint-url=https://s3.ru1.storage.beget.cloud
, вы можете добавить в файл aws/config
строку endpoint_url = https://s3.ru1.storage.beget.cloud
s3cmd
S3cmd — это консольный клиент (Linux, Mac) для сервисов, поддерживающих HTTP API Amazon S3.
Установка
Чтобы установить S3cmd, ознакомьтесь с разделом установки в репозитории S3cmd на GitHub.
Настройка
Для настройки S3cmd используйте команду s3cmd --configure
. При запросе укажите значения для следующих параметров:
- Access Key — Access Key созданного вами бакета, доступен в панели управления при выборе бакета.
- Secret Key — Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
- Default Region — введите
ru1
. - S3 Endpoint — введите
s3.ru1.storage.beget.cloud
- DNS-style bucket+hostname:port template for accessing a bucket — введите
%(bucket).s3.ru1.storage.beget.cloud
. - Значения остальных параметров оставьте без изменений.
Программа попытается установить соединение с Object Storage и получить список бакетов. В случае успеха это ПО для S3 выведет Success. Your access key and secret key worked fine :-)
.
Команда s3cmd --configure
сохранит настройки в файле ~/.s3cfg
в формате:
[default]
access_key = id
secret_key = secretKey
bucket_location = ru1
host_base = s3.ru1.storage.beget.cloud
host_bucket = %(bucket).s3.ru1.storage.beget.cloud
При необходимости эти настройки можно изменить напрямую в файле. Также можно указать настройки при запуске программы с помощью соответствующих параметров.
Cyberduck
CyberDuck — это графический клиент для работы с облачными хранилищами, в том числе совместимыми с Amazon S3 API. CyberDuck доступен для macOS и Windows, а также в виде консольного клиента для Linux.
Установка
Скачайте дистрибутив CyberDuck для вашей операционной системы и запустите его.
Подключение
- Запустите CyberDuck.
- Нажмите кнопку Новое подключение.
- Выберите тип подключения — Amazon S3.
- Укажите параметры подключения:
- Server —
s3.ru1.storage.beget.cloud
, протокол (http/https) при этом указывать не нужно - Port —
443
. - Access Key ID — Access Key созданного вами бакета, доступен в панели управления при выборе бакета.
- Secret Access Key — Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
- Server —

- Нажмите кнопку “Подключиться”
После подключения откроется бакет, созданный ранее.

Rclone
Rclone – это кроссплатформенная консольная программа для управления файлами в облачном хранилище.
Установка
Загрузите Rclone для вашей операционной системы с официальной страницы загрузки.
Настройка
Чтобы настроить Rclone, выполните следующую команду:
$ rclone config
В открывшемся диалоге нажмите n
и затем Enter
, чтобы подключить удаленное хранилище:
$ rclone config
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
Введите имя для удаленного хранилища, под которым оно будет отображаться в Rclone:
Enter name for new remote.
name> Beget
Далее необходимо выбрать тип хранилища:
Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
Выберите тип хранилища Amazon S3 Compliant Storage Providers including AWS
, в списке под номером 4:
Storage> 4
На следующем шаге необходимо выбрать провайдера S3:
Option provider.
Choose your S3 provider.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
Выберите провайдера S3 – Any other S3 compatible provider
в списке под номером 34:
provider> 34
На следующем шаге необходимо выбрать то, как будут указаны данные для подключения:
Option env_auth.
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
Only applies if access_key_id and secret_access_key is blank.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (false).
Выберите первый пункт, чтобы ввести данные для доступа к хранилищу вручную:
1 / Enter AWS credentials in the next step.
\ (false)
2 / Get AWS credentials from the environment (env vars or IAM).
\ (true)
env_auth> 1
Далее необходимо ввести реквизиты для подключения к хранилищу:
- access_key_id> – Access Key созданного вами бакета, доступен в панели управления при выборе бакета.
- secret_access_key> – Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
- region> – введите
ru1
. - endpoint> – введите
https://s3.ru1.storage.beget.cloud
. - location_constraint> – оставьте пустым.
- acl> – выберите первый пункт.
Настройка расширенной конфигурации не потребуются, выберите n
:
Edit advanced config?
y) Yes
n) No (default)
y/n>n
Проверьте корректность указанных данных и нажмите y
, если данные верны:
Configuration complete.
Options:
- type: s3
- provider: Other
- access_key_id: ACCESS_KEY
- secret_access_key: SECRET_KEY
- endpoint: https://s3.ru1.storage.beget.cloud
- acl: private
Keep this "other-storage" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
Хранилище добавлено в Rclone. Выйдите из конфигурации, нажав q
, и проверьте подключение, выполнив следующую команду:
$ rclone lsd Beget:
Если подключение успешно, отобразится список бакетов на аккаунте:
$ rclone lsd Beget:
-1 2024-11-27 16:20:08 -1 dse938ab5602-timid-natalia
Goofys
goofys — программа для Linux и macOS, позволяющая монтировать бакет Объектного хранилища через FUSE.
Установка
Загрузите goofys для вашей операционной системы с официального репозитория проекта.
Настройка
Для монтирования бакета выполните следующую команду:
goofys --endpoint=https://s3.ru1.storage.beget.cloud <имя-бакета> /mnt/s3
Укажите имя вашего бакета в соответствующем параметре. Вместо /mnt/s3
укажите необходимую точку монтирования в системе.
Для монтирования бакета при запуске системы добавьте следующую строку в файл /etc/fstab
, указав необходимый бакет и точку монтирования:
goofys#<имя-бакета> /mnt/s3 fuse _netdev,allow_other,--file-mode=0666,--dir-mode=0777,--endpoint=https://s3.ru1.storage.beget.cloud 0 0
Обновите системные демоны:
sudo systemctl daemon-reload
Выполните монтирование:
sudo mount -a
Проверьте, что хранилище примонтировано в необходимую директорию:
$ mount | grep '/mnt/s3'
dce938ab5611-timid-natalia on /mnt/s3 type fuse (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other)
MinIO Client
MinIO Client - консольный клиент, разработанный создателями MinIO-сервера
Установка
Загрузите Minio Client для вашей операционной системы с официальной страницы загрузки.
Настройка
Добавьте алиас для хранилища, выполнив следующую команду:
mc alias set <имя-алиаса> https://s3.ru1.storage.beget.cloud ACCESS_KEY SECRET_KEY
Подставьте в команду следующие данные:
- <имя-алиаса> – желаемое имя хранилища в Minio.
- ACCESS_KEY – Access Key созданного вами бакета, доступен в панели управления при выборе бакета.
- ACCESS_KEY – Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
Чтобы проверить подключение, используйте команду:
mc ls <имя-алиаса>
Если подключение успешно, будет отображен список бакетов на аккаунте:
$ mc ls <имя-алиаса>
[2024-11-27 16:20:08 UTC] 0B dse938ab5602-timid-natalia/
SDK
В качестве SDK в данном разделе будет использоваться AWS SDK. Для авторизации используется файл credentials
в директории ~/.aws
. Директорию и файл в ней необходимо создавать для пользователя, от имени которого будет запускаться код. Для создания директории и файла с помощью терминала выполните на требуемой машине следующие команды:
mkdir -p ~/.aws
touch ~/.aws/credentials
После чего откройте файл удобным вам текстовым редактором, например, vim
:
vim ~/.aws/credentials
И укажите в нем следующие данные, чтобы задать данные авторизации для бакета по умолчанию:
[default]
aws_access_key_id = <access_key_указанный_на_странице_бакета>
aws_secret_access_key = <secret_key_указанный_на_странице_бакета>
После чего сохраните и закройте файл. Затем создайте файл config
:
touch ~/.aws/config
Откройте его в текстовом редакторе и укажите в нем регион и url эндпоинта:
[default]
endpoint_url = s3.ru1.storage.beget.cloud
region = ru1
JavaScript (AWS SDK v3)
Для использования AWS SDK с Node.js:
Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду mkdir <название_директории>
:
mkdir nodeawstest
Перейдите в созданную директорию:
cd nodeawstest
Для создания стандартного package.json
выполните команду:
npm init -y
Затем установите клиент для S3:
npm i @aws-sdk/client-s3
Откройте файл package.json
удобным вам текстовым редактором и добавьте строку "type": "module"
для использования современного синтаксиса ESM. Итоговый файл будет иметь следующий вид:
{
"name": "nodeawstest",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"@aws-sdk/client-s3": "^3.651.1"
}
"type": "module"
}
Для проверки работы SDK создайте файл index.js
со следующим содержимым, скорректировав имя бакета на указанное на его странице в разделе “Облако”:
// This is used for getting user input.
import { createInterface } from "readline/promises";
import {
S3Client,
PutObjectCommand,
DeleteObjectCommand,
paginateListObjectsV2,
ListObjectsV2Command,
GetObjectCommand,
} from "@aws-sdk/client-s3";
export async function main() {
// A region and credentials can be declared explicitly. For example
// `new S3Client({ region: 'us-east-1', credentials: {...} })` would
//initialize the client with those settings. However, the SDK will
// use your local configuration and credentials if those properties
// are not defined here.
const s3Client = new S3Client({});
const bucketName = `f6bcd57c2800-whywouldyoudothat`;
// Put an object into an Amazon S3 bucket.
await s3Client.send(
new PutObjectCommand({
Bucket: bucketName,
Key: "my-first-object.txt",
Body: "Hello JavaScript SDK!",
})
);
// Read the object.
const { Body } = await s3Client.send(
new GetObjectCommand({
Bucket: bucketName,
Key: "my-first-object.txt",
})
);
console.log(await Body.transformToString());
// Confirm file listing
const prompt = createInterface({
input: process.stdin,
output: process.stdout,
});
const result = await prompt.question(`Would you like to see the contents of the bucket ${bucketName}?(y/n) `);
prompt.close();
if (result === "y") {
const command =
new ListObjectsV2Command({
Bucket: bucketName,
MaxKeys: 1,
});
try {
let isTruncated = true;
console.log("Your bucket contains the following objects:\n");
let contents = "";
while (isTruncated) {
const { Contents, IsTruncated, NextContinuationToken } =
await s3Client.send(command);
const contentsList = Contents.map((c) => ` • ${c.Key}`).join("\n");
contents += contentsList + "\n";
isTruncated = IsTruncated;
command.input.ContinuationToken = NextContinuationToken;
}
console.log(contents);
} catch (err) {
console.error(err);
}
}
}
// Call a function if this file was run directly. This allows the file
// to be runnable without running on import.
import { fileURLToPath } from "url";
if (process.argv[1] === fileURLToPath(import.meta.url)) {
main();
}
Для проверки работы скрипта выполните команду:
node index.js
Пример вывода:
node index.js
Hello JavaScript SDK!
Would you like to see the contents of the bucket f6bcd57c2800-whywouldyoudothat?(y/n) y
Your bucket contains the following objects:
• Program.cs
• Roboto-Regular.woff2
• UltiMaker-Cura-5.7.2-linux-X64.AppImage
• blep
• blep/bprof1.png
• bprof.png
• cyberpanel.png
• example.php
• index.js
• ispconfig.png
• my-first-object.txt
• object_name
• py_script.py
• s3example.go
• script/py_script.py
• style.css
• webmin.png
Другие примеры кода вы можете найти в репозитории AWS, описание методов – в официальной документации.
Python (boto3)
Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду mkdir <название_директории>
:
mkdir pyboto3
Перейдите в созданную директорию:
cd pyboto3
Для установки boto3
создайте виртуальное окружение или активируйте виртуальное окружение вашего проекта:
$ python3 -m venv .venv
...
$ source .venv/bin/activate
После чего установите boto3
:
python -m pip install boto3
Создайте скрипт main.py
со следующим содержимым, заменив название бакета на указанное на странице бакета в разделе “Облако”:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import boto3
session = boto3.session.Session()
s3 = session.client(
service_name='s3',
)
bucket_name = 'название_бакета'
# Загрузить объекты в бакет
## Из строки
s3.put_object(Bucket=bucket_name, Key='object_name', Body='TEST')
## Из файла
s3.upload_file('main.py', bucket_name, 'py_script.py')
s3.upload_file('main.py', bucket_name, 'script/py_script.py')
# Получить список объектов в бакете
for key in s3.list_objects(Bucket=bucket_name)['Contents']:
print(key['Key'])
# Удалить несколько объектов
# forDeletion = [{'Key':'object_name'}, {'Key':'script/py_script.py'}]
# response = s3.delete_objects(Bucket='bucket-name', Delete={'Objects': forDeletion})
# Получить объект
get_object_response = s3.get_object(Bucket=bucket_name,Key='py_script.py')
print(get_object_response['Body'].read())
Для проверки выполните скрипт:
python main.py
Пример вывода:
python main.py
UltiMaker-Cura-5.7.2-linux-X64.AppImage
blep
blep/bprof1.png
bprof.png
cyberpanel.png
ispconfig.png
my-first-object.txt
object_name
py_script.py
script/py_script.py
webmin.png
b"#!/usr/bin/env python\n#-*- coding: utf-8 -*-\nimport boto3\nsession = boto3.session.Session()\ns3 = session.client(\n\tservice_name='s3',\n)\nbucket_name = 'f6bcd57c2800-whywouldyoudothat'
\n\n# \xd0\x97\xd0\xb0\xd0\xb3\xd1\x80\xd1\x83\xd0\xb7\xd0\xb8\xd1\x82\xd1\x8c \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\xd1\x8b \xd0\xb2 \xd0\xb1\xd0\xb0\xd0\xba\xd0\xb5\xd1\x82\n\n##
\xd0\x98\xd0\xb7 \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb8\ns3.put_object(Bucket=bucket_name, Key='object_name', Body='TEST')\n\n## \xd0\x98\xd0\xb7 \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\x
d0\xb0\ns3.upload_file('main.py', bucket_name, 'py_script.py')\ns3.upload_file('main.py', bucket_name, 'script/py_script.py')\n\n# \xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb8\xd1\x82\xd1
\x8c \xd1\x81\xd0\xbf\xd0\xb8\xd1\x81\xd0\xbe\xd0\xba \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\xd0\xbe\xd0\xb2 \xd0\xb2 \xd0\xb1\xd0\xb0\xd0\xba\xd0\xb5\xd1\x82\xd0\xb5\nfor key in s3
.list_objects(Bucket=bucket_name)['Contents']:\n\tprint(key['Key'])\n\n# \xd0\xa3\xd0\xb4\xd0\xb0\xd0\xbb\xd0\xb8\xd1\x82\xd1\x8c \xd0\xbd\xd0\xb5\xd1\x81\xd0\xba\xd0\xbe\xd0\xbb\xd1\x8c\xd0\
xba\xd0\xbe \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\xd0\xbe\xd0\xb2\n# forDeletion = [{'Key':'object_name'}, {'Key':'script/py_script.py'}]\n# response = s3.delete_objects(Bucket='bu
cket-name', Delete={'Objects': forDeletion})\n\n# \xd0\x9f\xd0\xbe\xd0\xbb\xd1\x83\xd1\x87\xd0\xb8\xd1\x82\xd1\x8c \xd0\xbe\xd0\xb1\xd1\x8a\xd0\xb5\xd0\xba\xd1\x82\nget_object_response = s3.g
et_object(Bucket=bucket_name,Key='py_script.py')\nprint(get_object_response['Body'].read())\n"
Другие примеры кода вы можете найти в репозитории, описание методов – в официальной документации.
.NET
Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания тестового проекта воспользуемся CLI-утилитой dotnet
, создав новый консольный проект.
dotnet new console --name dotnets3
Перейдите в созданную директорию:
cd dotnets3
Для установки AWS SDK будет использоваться NuGet. Установите SDK командой:
dotnet add package AWSSDK.S3
После чего отредактируйте Program.cs
, вставив указанный ниже код и заменив название бакета на указанное на странице бакета в разделе “Облако”.
using Amazon.S3;
using Amazon.S3.Model;
const string bucketName = "название_бакета";
IAmazonS3 s3Client = new AmazonS3Client();
string fileName = "Program.cs";
var keyName = Path.GetFileName(fileName);
Console.WriteLine($"Uploading {keyName} to {bucketName}...");
await s3Client.UploadObjectFromFilePathAsync(bucketName, fileName, keyName, null);
Console.WriteLine($"Listing the objects contained in {bucketName}:");
await ListingObjectsAsync(s3Client, bucketName);
async Task ListingObjectsAsync(IAmazonS3 client, string bucketName)
{
var listObjectsV2Paginator = client.Paginators.ListObjectsV2(new ListObjectsV2Request
{
BucketName = bucketName,
});
await foreach (var response in listObjectsV2Paginator.Responses)
{
Console.WriteLine($"HttpStatusCode: {response.HttpStatusCode}");
Console.WriteLine($"Number of Keys: {response.KeyCount}");
foreach (var entry in response.S3Objects)
{
Console.WriteLine($"Key = {entry.Key} Size = {entry.Size}");
}
}
}
Для сборки и запуска программы выполните команду:
dotnet run
Пример вывода:
dotnet run
Uploading Program.cs to f6bcd57c2800-whywouldyoudothat...
Listing the objects contained in f6bcd57c2800-whywouldyoudothat:
HttpStatusCode: OK
Number of Keys: 14
Key = Program.cs Size = 1065
Key = UltiMaker-Cura-5.7.2-linux-X64.AppImage Size = 313369792
Key = blep Size = 0
Key = blep/bprof1.png Size = 410
Key = bprof.png Size = 410
Key = cyberpanel.png Size = 550288
Key = example.php Size = 839
Key = ispconfig.png Size = 236477
Key = my-first-object.txt Size = 21
Key = object_name Size = 4
Key = py_script.py Size = 964
Key = s3example.go Size = 1102
Key = script/py_script.py Size = 964
Key = webmin.png Size = 524468
Другие примеры кода и описание методов вы можете найти в официальной документации.
PHP
Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду mkdir <название_директории>
:
mkdir phps3
Перейдите в созданную директорию:
cd phps3
Для установки AWS SDK будет использоваться Composer. Установите SDK командой:
composer require aws/aws-sdk-php
После чего создайте файл example.php
со следующим содержимым, заменив имя бакета на указанное на его странице в разделе “Облако”:
<?php
require 'vendor/autoload.php';
use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client;
$bucket = 'название_бакета';
try {
$s3Client = new S3Client([
'profile' => 'default'
]);
echo 'Trying to upload example.php... ';
$upload_result = $s3Client->putObject([
'Bucket' => $bucket,
'Key' => basename(__FILE__),
'SourceFile' => __FILE__
]);
if ($upload_result->get("@metadata")['statusCode'] == 200) {
echo 'Success!' . PHP_EOL;
} else {
echo 'Something went wrong' . PHP_EOL;
}
$results = $s3Client->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
foreach ($results as $result) {
foreach ($result['Contents'] as $object) {
echo $object['Key'] . PHP_EOL;
}
}
} catch (S3Exception $e) {
echo $e->getMessage() . "\n";
}
Для запуска выполните команду:
php example.php
Пример вывода:
php example.php
Trying to upload example.php... Success!
UltiMaker-Cura-5.7.2-linux-X64.AppImage
blep
blep/bprof1.png
bprof.png
cyberpanel.png
example.php
ispconfig.png
my-first-object.txt
object_name
py_script.py
s3example.go
script/py_script.py
webmin.png
Другие примеры кода вы можете найти в репозитории AWS, описание методов – в официальной документации.
Go
Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду mkdir <название_директории>
:
mkdir gos3
Перейдите в созданную директорию:
cd gos3
Инициализируйте модуль:
go mod init example
Установите AWS SDK:
go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
go get github.com/aws/aws-sdk-go-v2/service/s3
После чего создайте файл example.go
со следующим содержимым, заменив имя бакета на указанное на его странице в разделе “Облако”:
package main
import (
"context"
"log"
"os"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
bucket := "название_бакета"
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
log.Fatal(err)
}
client := s3.NewFromConfig(cfg)
// upload the source file to the bucket
file, err := os.Open("example.go")
if err != nil {
log.Fatal(err)
} else {
defer file.Close()
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(file.Name()),
Body: file,
})
if err != nil {
log.Fatal(err)
} else {
log.Printf("File %s uploaded to %s", file.Name(), bucket)
}
}
// Listing the first page of objects in the bucket
output, err := client.ListObjectsV2(context.TODO(), &s3.ListObjectsV2Input{
Bucket: aws.String(bucket),
})
if err != nil {
log.Fatal(err)
}
log.Println("first page of file listing results:")
for _, object := range output.Contents {
log.Printf("key=%s size=%d", aws.ToString(object.Key), object.Size)
}
}
Данная программа в случае успеха загрузит исходный код в бакет и отобразит первую страницу списка файлов в бакете. Для сборки и запуска кода выполните команду:
go run .
Пример вывода:
go run .
2024/09/19 11:00:22 File example.go uploaded to f6bcd57c2800-whywouldyoudothat
2024/09/19 11:00:22 first page of file listing results:
2024/09/19 11:00:22 key=UltiMaker-Cura-5.7.2-linux-X64.AppImage size=824636440816
2024/09/19 11:00:22 key=blep size=824636441000
2024/09/19 11:00:22 key=blep/bprof1.png size=824636441208
2024/09/19 11:00:22 key=bprof.png size=824636441512
2024/09/19 11:00:22 key=cyberpanel.png size=824636441720
2024/09/19 11:00:22 key=ispconfig.png size=824636441928
2024/09/19 11:00:22 key=my-first-object.txt size=824636442104
2024/09/19 11:00:22 key=object_name size=824636442312
2024/09/19 11:00:22 key=py_script.py size=824636442520
2024/09/19 11:00:22 key=example.go size=824636442728
2024/09/19 11:00:22 key=script/py_script.py size=824636442904
2024/09/19 11:00:22 key=webmin.png size=824636443144
Другие примеры кода вы можете найти в репозитории AWS, описание методов – в официальной документации.
Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.