Настройка подключения к S3 при помощи клиентов AWS CLI, S3cmd, Cyberduck, Rclone, Goofys, MinIO Client, SDK и FTP/SFTP

Клиенты для S3 Storage

В этой статье мы рассмотрим, как подключиться к облачному объектному хранилищу 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. Установите его согласно инструкции на сайте выбранного вами клиента.

Подключение

Данные для подключения вы можете найти в дашборде вашего бакета.

s3 доступы

Используйте их для подключения в вашем клиенте. Для примера возьмем FileZilla.

Для быстрого подключения укажите данные для подключения в строке быстрого соединения и нажмите кнопку “Быстрое соединение”:

filezilla fast connect

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

filezilla сертификат

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

filezilla connected

AWS CLI

AWS CLI — это интерфейс командной строки для работы с сервисами AWS. Общий порядок вызова команд смотрите в официальной документации Amazon.

Установка

Для установки AWS CLI воспользуйтесь инструкцией на сайте разработчика.

Настройка

Для настройки AWS CLI в терминале введите команду aws configure. Команда запросит значения для следующих параметров:

  • AWS Access Key IDAccess Key созданного вами бакета, доступен в панели управления при выборе бакета.
  • AWS Secret Access KeySecret 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 KeyAccess Key созданного вами бакета, доступен в панели управления при выборе бакета.
  • Secret KeySecret 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 для вашей операционной системы и запустите его.

Подключение

  1. Запустите CyberDuck.
  2. Нажмите кнопку Новое подключение.
  3. Выберите тип подключения — Amazon S3.
  4. Укажите параметры подключения:
    1. Servers3.ru1.storage.beget.cloud, протокол (http/https) при этом указывать не нужно
    2. Port443.
    3. Access Key IDAccess Key созданного вами бакета, доступен в панели управления при выборе бакета.
    4. Secret Access Key — Secret Key созданного вами бакета, доступен в панели управления при выборе бакета.
Настройка подключения Amazon s3
  1. Нажмите кнопку “Подключиться

После подключения откроется бакет, созданный ранее.

S3 amazon бакет

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 для вашей операционной системы с официального репозитория проекта.

Настройка

Обратите внимание!
Для того чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Для монтирования бакета выполните следующую команду:

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_KEYSecret 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)

Обратите внимание!
Для того, чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Для использования 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)

Обратите внимание!
Для того, чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду 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

Обратите внимание!
Для того, чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания тестового проекта воспользуемся 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

Обратите внимание!
Для того, чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду 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

Обратите внимание!
Для того, чтобы подключение происходило корректно, необходимо настроить авторизацию. Процесс описан в начале раздела SDK.

Создайте директорию проекта либо перейдите в директорию уже существующего. Для создания директории используйте команду 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.

26
5615