涛声依旧在 发表于 2024-12-11 17:22:30

Amazon S3 概念及如何集成到 .net 8 C#

Amazon S3(Simple Storage Service)是一个高度可扩展、数据可用性高、安全性强的对象存储服务。
Amazon S3 使用对象存储架构,数据以对象的形式存储在桶(buckets)中,每个对象都有一个唯一的键(key)。
 
本文重要分为两个部门:
1、Amazon S3 相关概念
2、.net 集成的代码
* 阅读提示 :鼠标悬停在 章节标题 上可见 文章目录



 
1、概念

bucket

bucket 是存储 object 的容器,可以按照业务划分出一个 bucket,一个 bucket 中存储多个 object,每个 object 都有本身的唯一标识 key。
 
bucket 类型

bucket 重要有 3 种类型,分别是 General purpose bucket,Direcotry bucket,Table bucket。

[*]General purpose bucket
创建 bucket 时的默认类型,它也是 S3 中最重要使用的类型

[*]Directory bucket
这种类型的 bucket 的 location type 限定使用 Availability Zone 大概 Local Zone
为了低延迟,可以指定你的 Amazon EC2、Amazon EKS 大概 Amazon ECS 计算实例位于同一位置 AWS 区域和可用区。

[*]Table bucket
提供一种便于大数据分析的表格式的存储方式。
支持 Apache Iceberg 格式,查询速率高于普通 S3 bucket。
无缝集成:可以和 AWS 的分析服务(像 Amazon Athena, Amazon Redshift, AWS Glue Data Catalog)以及开源查询引擎(如 Apache Spark)无缝集成
更多:
Tabular Data Storage At Scale - Amazon S3 Tables - AWS
Table buckets - Amazon Simple Storage Service
 
 
bucket 属性

下表将列出一些在设置 bucket 时需要关注的、比较常用的 bucket 属性
region这个 bucket 所属物理位置,和 AWS 账号的 region 是同等的name access读写权限相关versioning在 bucket 中答应存储一个 object 有差异的版本tag可选项,加一些标签来区分其他的 bucketdefault encryption对于存储的 object 是否加密,可以不启用;启用需要选择加密方式object lock当写入该 object 的时候是否锁定该 objectlifecycle生命周期管理,一个 object 被上传到 ticket 之后多少时间要触发什么动作,大概多久该 object 被清除掉等等设置.... 
生命周期管理的一个示例:
此处设置当一个 object 被 upload 到 bucket 后,一天之后该数据过期,但过期并不做任何处理,即并不会被删除
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011154191-2129914026.png
 
object

当进入一个指定的 bucket 后,会看到它的 object 列表
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211012240777-717218057.png
 
每一个 object 都有一个本身的 key,这是检索、找回这个 object 的唯一方式。

[*]object 可以是一个文件
[*]object 支持类似于文件夹似的对象管理方式,通过对 key 的命名方式来实现
例如
object
key
object 1
folder1/key1
object 2
folder1/key2
object 3
folder1/key3
这里实际上有 3 个object,但是在 Amazon S3 中查找这 3 个文件的时候,它会以文件目录的方式显示。
使其看起来像是一个文件夹类型的 object,但这只是 S3 网页上的出现方式,是一种做好分类以便于查阅的前端本领。
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011241411-672007802.png
 
 

[*]S3 是分布式存储
为了数据高可用性,S3 会多处备份,所以有些 object key 看似逻辑相似,但物理存储位置都是差异的。
 
 
 
安全性包管


[*]支持数据加密
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011315940-1232483905.png
 

[*]权限管理
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011527260-2121453427.png
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011546780-643414576.png
 

[*]bucket policy 访问策略
这里是 json 的格式设置哪个AWS用户可以访问该 S3 的哪个 bucket 资源,可以答应什么操作
 
 
 
监控与指标 Metric


[*]通例监控指标:bucket 大小,object 数量
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011607253-2065138927.png
 

[*]与 AWS cloud watch 集成
https://img2024.cnblogs.com/blog/1591971/202412/1591971-20241211011630334-1737896926.png
 
 
 
 
2、与 .net 8 api 项目集成

1、设置 AWS 凭证
确保本地机器 AWS 凭证已设置好,通常,凭证文件位于 ~/.aws/credentials。
 
2、包依靠
dotnet add package AWSSDK.S3 
在你的 .NET 项目中,创建一个 Amazon S3 客户端实例:
using Amazon.S3;
using Amazon.S3.Model;

var s3Client = new AmazonS3Client();
// new AmazonS3Client(config.AccessKey, config.SecretKey, RegionEndpoint.GetBySystemName(config.Region)); 
下列实例代码使用的是 3.7.9.56 版本 SDK
 
3、实现基本操作
你可以实现基本的 S3 操作,如创建 bucket、上传文件、下载文件等。

[*]创建 bucket
var putBucketRequest = new PutBucketRequest
{
    BucketName = "your-bucket-name",
    UseClientRegion = true
};

var putBucketResponse = await s3Client.PutBucketAsync(putBucketRequest); 

[*]上传文件
var putObjectRequest = new PutObjectRequest
{
    BucketName = "your-bucket-name",
    Key = "your-file-key",
    FilePath = "path/to/your/file"
};

var putObjectResponse = await s3Client.PutObjectAsync(putObjectRequest); 

[*]下载文件
var getObjectRequest = new GetObjectRequest
{
    BucketName = "your-bucket-name",
    Key = "your-file-key"
};

using (var getObjectResponse = await s3Client.GetObjectAsync(getObjectRequest))
using (var responseStream = getObjectResponse.ResponseStream)
using (var fileStream = File.Create("path/to/save/file"))
{
    await responseStream.CopyToAsync(fileStream);

 
4、处理错误和异常
确保在代码中处理可能出现的错误和异常,例如网络题目或权限题目。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Amazon S3 概念及如何集成到 .net 8 C#