首页 > 编程语言 >Amazon S3 概念及如何集成到 .net 8 C#

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

时间:2024-12-11 16:24:27浏览次数:5  
标签:S3 AWS object bucket Amazon var net

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

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

 

标签:S3,AWS,object,bucket,Amazon,var,net
From: https://www.cnblogs.com/carmen-019/p/18598416

相关文章

  • CCLinkIE 转 profinet 网关模块在工控行业的应用实例
     在工业化控制场景中,当三菱PLC控制系统与西门子PLC控制系统面临数据交换需求时,捷米特JM-PN-CCLKIE 通信网关模块成为理想的解决方案。这款由捷米科技自主研发且具备PROFINET从站功能的网关,核心使命在于搭建起CCLINKIE总线与PROFINET网络之间的桥梁。其能够在连接至PN......
  • CSS3新特性
    新增的特性有兼容性问题,ie9+才支持1.属性选择器可以根据元素特定属性来选择元素选择符简介E[att]选择具有att属性的E元素E[att="val"]选择具有att属性且属性值等于val的E元素E[att^="val"]匹配具有att属性且值以val开头的E元素E[att......
  • GitHub Actions 自动部署服务到 Amazon ECS
    概述本文将详细介绍如何使用GitHubActions实现自动化部署服务到AmazonECS(ElasticContainerService)。这个自动化流程包括构建Docker镜像、推送到ECR、创建ECS任务定义、配置负载均衡器以及更新ECS服务等步骤。前提条件AWS账号及相关权限GitHub仓库......
  • IBM QRadar配置netflow
    cisco路由器配置netflow如下:flowrecordTAC-INmatchipv4protocolmatchipv4sourceaddressmatchipv4destinationaddressmatchinterfaceinputmatchflowdirectioncollecttransporttcpflagscollectcounterpacketslongcollecttimestampsys-uptim......
  • AspNetCore全局异常处理
    在开发ASP.NETCore应用程序时,全局异常处理是一个重要的概念。它允许我们集中处理应用程序中未捕获的异常,确保应用程序的稳定性和用户体验。1.为什么需要全局异常处理全局异常处理的目的是为了:统一错误响应:确保所有错误都以统一的格式返回给客户端。避免敏感信息泄露:防止将......
  • 论文解读-Graph neural networks: A review of methods and applications
     论文介绍这篇论文是图神经网络领域的综述性质的文章,从各个论文里面凝聚和提取了很多精炼的信息和观点,值得一读。论文是2020年成稿投出去的,有点陈旧的。 GNN的介绍在introduction里面对比了GNN和CNN,表示出CNN的关键是局部连接,共享权重,和多层的使用。其中CNN操作的是常规......
  • 基于PyTorch/MXNet的高效中文/英文场景文字检测Python3包设计源码-Z5yUlJls
    基于PyTorch/MXNet的高效中文/英文场景文字检测Python3包设计源码地址CnSTD是一个高效的中文/英文场景文字检测Python3包,基于PyTorch/MXNet框架开发。该项目包含106个文件,主要为Python源码文件(63个.py),以及多种格式的资源文件,包括22个JPG图片、6个PNG图片、3个Makefile、3个YAML配......
  • Kubernetes集群巡检内容
    1.概述Kubernetes集群巡检是一种监测和评估底层系统运行状况的重要手段,旨在快速发现系统中存在的潜在风险并提供修复建议。通过对Kubernetes(K8s)集群进行定期巡检,可以有效保障集群稳定性、优化资源利用率、提升安全性,并降低运维风险,特别是在生产环境中,这种预防性措施尤为重......
  • go项目在linux中用yum命令安装telnet
    在Linux系统上,如果你使用的是基于**RedHat**(如RHEL、CentOS、Fedora等)的发行版,可以通过`yum`命令安装Telnet客户端。以下是步骤:方法1:1,先检查是否安装了telnet:rpm-qa|greptelnet2.然后检查yum列表里面有什么yumlist|greptelnet3、安装yuminstall......
  • .NET MAUI开发的安卓、iOS软件和Java开发的安卓和Swift开发的iOS的区别
    1. 开发语言和平台.NETMAUI:使用 C# 作为开发语言。通过 .NET6/7/8 平台编译并打包应用。.NETMAUI 会根据目标平台(Android或iOS)编译和运行不同的本地代码。代码是跨平台的,开发者可以使用相同的代码库为Android和iOS构建应用,只需要针对平台特定功能进行少量调......