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

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

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)无缝集成
更多:
[1] Tabular Data Storage At Scale - Amazon S3 Tables - AWS
[2] Table buckets - Amazon Simple Storage Service
 
 
bucket 属性

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

 
object

当进入一个指定的 bucket 后,会看到它的 object 列表

 
每一个 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 网页上的出现方式,是一种做好分类以便于查阅的前端本领。

 
 

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


  • 支持数据加密

 

  • 权限管理


 

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


  • 通例监控指标:bucket 大小,object 数量

 

  • 与 AWS cloud watch 集成

 
 
 
 
2、与 .net 8 api 项目集成

1、设置 AWS 凭证
确保本地机器 AWS 凭证已设置好,通常,凭证文件位于 ~/.aws/credentials。
 
2、包依靠
  1. dotnet add package AWSSDK.S3
复制代码
 
在你的 .NET 项目中,创建一个 Amazon S3 客户端实例:
  1. using Amazon.S3;
  2. using Amazon.S3.Model;
  3. var s3Client = new AmazonS3Client();
  4. // new AmazonS3Client(config.AccessKey, config.SecretKey, RegionEndpoint.GetBySystemName(config.Region));
复制代码
 
下列实例代码使用的是 3.7.9.56 版本 SDK
  1. [/code] 
  2. 3、实现基本操作
  3. 你可以实现基本的 S3 操作,如创建 bucket、上传文件、下载文件等。
  4. [list]
  5. [*]创建 bucket
  6. [/list][code]var putBucketRequest = new PutBucketRequest
  7. {
  8.     BucketName = "your-bucket-name",
  9.     UseClientRegion = true
  10. };
  11. var putBucketResponse = await s3Client.PutBucketAsync(putBucketRequest);
复制代码
 

  • 上传文件
  1. var putObjectRequest = new PutObjectRequest
  2. {
  3.     BucketName = "your-bucket-name",
  4.     Key = "your-file-key",
  5.     FilePath = "path/to/your/file"
  6. };
  7. var putObjectResponse = await s3Client.PutObjectAsync(putObjectRequest);
复制代码
 

  • 下载文件
  1. var getObjectRequest = new GetObjectRequest
  2. {
  3.     BucketName = "your-bucket-name",
  4.     Key = "your-file-key"
  5. };
  6. using (var getObjectResponse = await s3Client.GetObjectAsync(getObjectRequest))
  7. using (var responseStream = getObjectResponse.ResponseStream)
  8. using (var fileStream = File.Create("path/to/save/file"))
  9. {
  10.     await responseStream.CopyToAsync(fileStream);
  11. }
复制代码
 
 
4、处理错误和异常
确保在代码中处理可能出现的错误和异常,例如网络题目或权限题目。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表