云存储指南

存储类型对比

类型AWS / GCP / Azure访问方式最适合
对象存储S3 / GCS / Azure BlobHTTP GET/PUT 按 key 访问图片、视频、备份、数据湖、静态网站
块存储EBS / Persistent Disk / Azure Disk挂载为文件系统(ext4/NTFS)虚拟机磁盘、数据库、高 IOPS 负载
文件存储(NFS)EFS / Filestore / Azure FilesPOSIX 文件系统,共享挂载共享配置、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 }