Ответ
Amazon S3 (Simple Storage Service) — это высокомасштабируемое облачное хранилище объектов от Amazon Web Services (AWS). Оно предназначено для хранения и извлечения любого объема данных из любой точки мира через веб-интерфейс или API.
Ключевые концепции S3:
- Объект (Object): Основная единица хранения в S3. Это файл и его метаданные (например,
Content-Type
, дата создания). - Бакет (Bucket): Контейнер для объектов. Имена бакетов должны быть глобально уникальными.
- Ключ (Key): Уникальный идентификатор объекта внутри бакета (аналог пути к файлу).
Основные сценарии использования в бэкенде:
- Хранение пользовательского контента: Аватары, фотографии, видео, документы.
- Статика для веб-сайтов: Хранение CSS, JavaScript, изображений и других статических ресурсов.
- Резервное копирование и архивация: Надежное хранение бэкапов баз данных, логов и других важных данных.
- Data Lakes: Использование в качестве центрального хранилища для больших данных и аналитики.
Пример работы с S3 в Go (используя AWS SDK v2):
package main
import (
"context"
"log"
"strings"
"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() {
// Загружаем конфигурацию AWS из окружения (ключи, регион)
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
log.Fatalf("не удалось загрузить конфигурацию AWS: %v", err)
}
client := s3.NewFromConfig(cfg)
bucketName := "my-unique-bucket-name"
objectKey := "my-file.txt"
content := "Hello, S3 from Go!"
// Загрузка объекта в S3
_, err = client.PutObject(context.TODO(), &s3.PutObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(objectKey),
Body: strings.NewReader(content),
})
if err != nil {
log.Fatalf("не удалось загрузить объект в S3: %v", err)
}
log.Printf("Файл '%s' успешно загружен в бакет '%s'", objectKey, bucketName)
}