
В этой статье мы рассмотрим, как подключиться к облачному объектному хранилищу 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 и т.д.)
FTP/SFTP
К S3-бакету можно подключиться по протоколам FTP и SFTP с помощью любого FTP-клиента, чтобы работать с файлами напрямую.
Ограничения при работе по FTP/SFTP
- 15 одновременных подключений
- 1000 команд (операций) за 1 секунду
- Ограничение полосы пропускания: 250 mbps для каждого направления
Установка
Вы можете использовать любой клиент, который поддерживает протоколы FTP или SFTP, например, FileZilla. Установите его согласно инструкции на сайте выбранного вами клиента.
Подключение
Данные для подключения вы можете найти в дашборде вашего бакета.

Используйте их для подключения в вашем клиенте. Для примера возьмем FileZilla.
Для быстрого подключения укажите данные для подключения в строке быстрого соединения и нажмите кнопку “Быстрое соединение”:

Нажмите “Да” в окне подтверждения неизвестного сертификата:

Готово, можете работать с файлами в бакете:

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-nataliaGoofys
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 = ru1JavaScript (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.