云存储指南
存储类型对比
| 类型 | AWS / GCP / Azure | 访问方式 | 最适合 |
|---|---|---|---|
| 对象存储 | S3 / GCS / Azure Blob | HTTP GET/PUT 按 key 访问 | 图片、视频、备份、数据湖、静态网站 |
| 块存储 | EBS / Persistent Disk / Azure Disk | 挂载为文件系统(ext4/NTFS) | 虚拟机磁盘、数据库、高 IOPS 负载 |
| 文件存储(NFS) | EFS / Filestore / Azure Files | POSIX 文件系统,共享挂载 | 共享配置、CMS 文件、遗留应用迁移 |
| 归档存储 | S3 Glacier / 云归档 | 异步取回(几小时) | 合规存档、冷备份、长期保留 |
S3 CLI 常用命令
# 创建存储桶
aws s3 mb s3://my-bucket --region ap-east-1
# 上传 / 下载
aws s3 cp file.jpg s3://my-bucket/images/file.jpg
aws s3 cp s3://my-bucket/images/file.jpg ./file.jpg
aws s3 sync ./local-folder s3://my-bucket/folder/ --delete
# 列出 / 删除
aws s3 ls s3://my-bucket/ --recursive --human-readable
aws s3 rm s3://my-bucket/old-file.txt
# 预签名 URL(有时效的临时访问链接)
aws s3 presign s3://my-bucket/private-doc.pdf --expires-in 3600
# 开启版本控制
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration Status=Enabled
# 阻止公开访问(最佳实践)
aws s3api put-public-access-block \
--bucket my-bucket \
--public-access-block-configuration \
"BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
预签名 URL 模式(Go)
// 生成预签名上传 URL(让浏览器直接上传到 S3)
func GeneratePresignedUploadURL(bucket, key string) (string, error) {
client := s3.NewPresignClient(s3Client)
req, err := client.PresignPutObject(context.Background(),
&s3.PutObjectInput{
Bucket: &bucket,
Key: &key,
ContentType: aws.String("image/jpeg"),
},
s3.WithPresignExpires(15*time.Minute),
)
if err != nil {
return "", err
}
return req.URL, nil
}