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、包依赖

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

<PackageReference Include="AWSSDK.S3" Version="3.7.9.56" />

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、处理错误和异常

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

Amazon S3 概念及如何集成到 .net 8 C#的更多相关文章

  1. Amazon S3 API

    一.概述 Amazon s3,全称为Amazon Simple Storage  Service.EC2和S3是Amazon最早推出的两项云服务. REST,这也是比较火的一种Web服务架构.简单来说 ...

  2. [Ting's笔记Day7]活用套件carrierwave gem:(2)利用Amazon S3架设图片服务器

    来到第7篇了!培养写作习惯真是不容易:) 在我的上一篇文章活用套件carrierwave gem:(1)在Rails实现图片上传功能,上传图片功能已经完成啦!但是目前图片仅能上传在自己的本地文件夹内孤 ...

  3. Amazon S3

    Amazon S3 是什么? Amazon S3 是亚马逊推出的一款存储服务,名为 Amazon Simple Storage Service,即亚马逊简单存储服务. 有些 S3 的概念需要了解一下: ...

  4. 使用Apache Hudi + Amazon S3 + Amazon EMR + AWS DMS构建数据湖

    1. 引入 数据湖使组织能够在更短的时间内利用多个源的数据,而不同角色用户可以以不同的方式协作和分析数据,从而实现更好.更快的决策.Amazon Simple Storage Service(amaz ...

  5. Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)

    缘起 今年(2023年) 2月的时候做了个适配Amazon S3对象存储接口的需求,由于4月份自学考试临近,一直在备考就拖着没总结记录下,开发联调过程中也出现过一些奇葩的问题,最近人刚从考试缓过来顺手 ...

  6. cosbench read异常解决办法。 Unable to verify integrity of data download. Client calculated content hash didn't match hash calculated by Amazon S3. The data may be corrupt.

    问题:cosbench read测试failed 报错如下 Cosbench v0.4.2.c4 against Ceph (Hammer) / radosgw / HAproxy's HTTP en ...

  7. [AWS S3] Hosting a Static Website on Amazon S3

    In this lesson, you will learn how to host a static website on Amazon S3. I will show you how to cre ...

  8. Amazon S3数据一致性模型

    左右Amazon S3有两种类型的数据的一致性模型的: 最后,一致性和读一致性. 有下面几种行为: 1 写一个新的object,然后開始读它.直到全部的变化都传播完(副本),你才干读到它,否则就是ke ...

  9. 实现多线程异步自动上传本地文件到 Amazon S3

    最近抽空做个小工具,使用AWSSDK 对本地文件目录监控,并自动同步上传文件到S3 的过程,使用的是多线程异步上传,针对大文件进行了分块 参考文献: https://www.codeproject.c ...

  10. Amazon S3 功能介绍

    一 .Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检 ...

随机推荐

  1. Spring 话题

    我从来不用 spring,项目再大也不会考虑 spring 那套模式.什么依赖注入控制反转,叠床架屋,对开发和运维可以说有害无益.上文 zz Spring 是一种反模式 - Inshua - 博客园 ...

  2. 在.NET Core中使用异步多线程高效率的处理大量数据的最佳实践

    目录 一.引言 二.假设场景 三.解决方案 四.示例代码 一.引言 处理大量数据是一个常见的需求,传统的同步处理方式往往效率低下,尤其是在数据量非常大的情况下.本篇将介绍一种高效的多线程异步处理大数据 ...

  3. Windows 配置多版本JDK

    @ 目录 前言 简介 一.下载并安装多个JDK版本 二.配置环境变量 2.1 点击高级系统设置 2.2 选择环境变量 2.3 配置CLASSPATH 2.4 配置JAVA_HOME 2.5 配置Pat ...

  4. [转]Vue3.0和Vue2.0的区别

    Vue3.0和Vue2.0的区别默认进行懒观察(lazy observation).在 2.x 版本里,不管数据多大,都会在一开始就为其创建观察者.当数据很大时,这可能会在页面载入时造成明显的性能压力 ...

  5. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.0版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  6. 基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等

    1.引言 在社区中,分享了很多篇基于Netty编写的IM聊天入门文章(比如<跟着源码学IM>系列.<基于Netty,从零开发IM>系列等),在这些文章中分享了各种IM通信算法原 ...

  7. Dynamic CRM插件中获取Entity属性值问题

    插件中获取Entity不同类型字段时稍有区别,一般用如下两种方式: Entity targetEntity = (Entity)context.InputParameters["Target ...

  8. 让 LLM 来评判 | 基础概念

    基础概念 这是 让 LLM 来评判 系列文章的第一篇,敬请关注系列文章: 基础概念 选择 LLM 评估模型 设计你自己的评估 prompt 评估你的评估结果 奖励模型相关内容 技巧与提示 什么是评估模 ...

  9. biancheng-Spring MVC

    MVC设计模式简介 http://c.biancheng.net/spring_mvc/ MVC 设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Control ...

  10. C#遍历获取文件夹下所有文件

    1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using ...