当前位置: 首页 > news >正文

AWS入门实践-S3对象存储的基本用法

AWS S3(Simple Storage Service)是亚马逊云服务提供的一种高度可扩展、安全且经济高效的对象存储服务。它允许用户在任何位置存储和检索任意数量的数据,非常适合存储和分发静态文件、备份数据以及作为数据湖的存储层。

一、S3上传和下载文件(AWS门户)

1、创建 S3 存储桶

  1. 登录AWS控制台
    访问 https://console.aws.amazon.com/ 并使用您的AWS账户凭证登录。

  2. 打开S3服务控制台
    在AWS服务列表中,找到"存储"部分,然后选择"S3"服务。

  3. 创建存储桶
    在S3控制台中,单击"创建存储桶"按钮。

  4. 命名存储桶
    输入一个全局唯一的存储桶名称。存储桶名称必须遵循特定的命名规则,例如只能包含小写字母、数字和连字符(-)。

  5. 选择AWS区域
    选择要在其中创建存储桶的AWS区域。通常选择离您的应用程序或用户最近的区域,以获得更好的性能和更低的延迟。

  6. 配置存储桶设置(可选)
    根据您的需求,您可以配置存储桶的其他设置,例如:

    • 存储桶所有权
    • 存储桶版本控制
    • 存储桶加密
    • 对象锁定
    • 标签
    • 静态网站托管等
  7. 创建存储桶
    检查您的设置,然后单击"创建存储桶"按钮。

2、上传文件

  • 选择要上传文件的目标存储桶
  • 点击 "上传" 按钮
  • 点击 "添加文件" 或“添加文件夹”并从本地选择要上传的文件
  • 可以选择加密、元数据等高级选项(可选)
  • 点击 "上传" 开始上传文件

 

 

3、下载文件

  1. 选择包含目标文件的存储桶

    • 在 S3 控制台中,找到并选择包含您要下载文件的存储桶
  2. 选择要下载的文件

    • 在存储桶内容列表中,找到并选中您要下载的文件
    • 您可以通过文件名、前缀等条件过滤文件列表
  3. 下载文件

    • 选中文件后,点击顶部的 "下载" 按钮
    • 或者右键单击文件,选择 "下载" 选项
    • 浏览器会提示您保存文件到本地 
  4. 选择保存位置并确认下载

    • 选择要将文件保存到本地的目录路径
    • 点击 "保存" 按钮开始下载文件
  5. 等待下载完成

    • 根据文件大小,下载可能需要一些时间
    • 下载完成后,您可以在指定的本地目录中找到该文件

二、S3上传和下载文件(AWS命令行)

1、AWS命令行工具的安装

在 Windows 上安装和配置 AWS CLI 的步骤如下:

  1. 安装 AWS CLI

    • 下载 AWS CLI MSI 安装程序: https://awscli.amazonaws.com/AWSCLIV2.msi
    • 运行下载的 MSI 安装程序,按照提示进行安装。
  2. 验证 AWS CLI 安装

    打开命令提示符或 PowerShell,输入以下命令验证安装:

    aws --version
    

    如果安装成功,将显示 AWS CLI 版本。

  3. 配置 AWS 凭证

    AWS CLI 需要使用 AWS 访问密钥和秘密访问密钥进行身份验证。您可以使用以下两种方式之一来配置凭证:

    • 使用 aws configure 命令

      在命令提示符或 PowerShell 中输入:

      aws configure
      

      系统将提示您输入 AWS Access Key ID、AWS Secret Access Key、默认区域名称和默认输出格式。您可以从 AWS 管理控制台获取访问密钥和秘密访问密钥。

    • 手动创建凭证文件

      转到 %USERPROFILE%\.aws 目录(如果不存在则创建),在该目录下创建一个名为 credentials 的文件,并添加以下内容:

      [default]
      aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
      aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY
      

      将 YOUR_AWS_ACCESS_KEY_ID 和 YOUR_AWS_SECRET_ACCESS_KEY 替换为您的实际凭证。

  4. 验证配置

    您可以运行以下命令来验证配置是否正确:

    aws iam get-user
    

    如果一切配置正确,该命令将显示关于您的 AWS 用户的信息。如果出现错误,请检查您的凭证是否正确。

  5. 其他配置选项

    您还可以配置其他选项,如默认区域和输出格式。例如:

    aws configure set default.region us-west-2
    aws configure set default.output json
    

    这将把默认区域设置为 us-west-2,默认输出格式设置为 JSON。

2、AWS S3 存储桶创建

aws S3 mb s3://my-bucket

3、AWS S3 文件上传

aws s3 cp example.txt s3://my-bucket/

4、AWS S3 文件下载

aws s3 cp s3://my-bucket/example.txt .

上面命令是将S3文件下载到当前目录 

5、AWS S3 文件批量上传和下载

AWS S3 SYNC 命令用于同步本地目录或 S3 存储桶中的内容与另一个 S3 存储桶。它可以上传、更新和删除对象,以确保源和目标之间的内容保持同步。

(1). 将本地目录同步到 S3 存储桶

aws s3 sync /path/to/local/dir s3://my-bucket

这将把本地目录 /path/to/local/dir 中的所有文件和子目录上传到 S3 存储桶 my-bucket。如果存储桶中已经存在同名对象,它们将被覆盖。

(2). 将 S3 存储桶同步到本地目录

aws s3 sync s3://my-bucket /path/to/local/dir

这将把 S3 存储桶 my-bucket 中的所有对象下载到本地目录 /path/to/local/dir。如果本地目录中已经存在同名文件,它们将被覆盖。

(3). 在两个 S3 存储桶之间同步

aws s3 sync s3://source-bucket s3://destination-bucket

这将把 S3 存储桶 source-bucket 中的所有对象复制到 destination-bucket。如果目标存储桶中已经存在同名对象,它们将被覆盖。

(4). 排除某些文件或目录

您可以使用 --exclude 参数排除某些文件或目录。例如:

aws s3 sync /path/to/local/dir s3://my-bucket --exclude "*.tmp" --exclude "temp/*"

这将同步本地目录,但排除所有以 .tmp 结尾的文件和 temp 子目录中的所有文件。

(5). 删除目标中多余的对象

默认情况下,sync 命令不会删除目标中多余的对象。如果您希望在同步过程中删除目标中多余的对象,可以使用 --delete 参数:

aws s3 sync /path/to/local/dir s3://my-bucket --delete

这将同步本地目录,并删除 S3 存储桶 my-bucket 中多余的对象。

aws s3 sync 命令还支持许多其他选项,如设置 ACL、元数据、存储类和加密等。您可以使用 aws s3 sync help 获取更多信息。

三、通过签名数据共享S3上的数据

AWS S3 提供了一种通过签名 URL 或签名 Cookie 共享存储桶或对象的方法,无需提供您的 AWS 访问密钥。这种方式可以安全地向他人授予临时访问权限,而不会泄露您的凭证。

以下是通过签名共享 S3 上数据的步骤:

1. 签名 URL

签名 URL 可以提供对特定对象的临时访问权限。您可以使用 AWS CLI 或 AWS SDK 生成签名 URL。

使用 AWS CLI 生成签名 URL:

aws s3 presign s3://my-bucket/my-object --expires-in 3600

这将为 my-bucket 存储桶中的 my-object 对象生成一个签名 URL,有效期为 1 小时(3600 秒)。您可以将此 URL 共享给其他人,他们就可以在有效期内访问该对象。

2. 签名 Cookie

签名 Cookie 可以提供对整个存储桶的临时访问权限。您需要使用 AWS SDK 生成签名 Cookie。

使用 AWS SDK for Java 生成签名 Cookie:

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
String bucketName = "my-bucket";// 生成签名 Cookie
String signedCookie = s3Client.generatePresignedUrl(new GeneratePresignedUrlRequest(bucketName, null).withMethod(HttpMethod.GET).withExpiration(DateTime.now().plusHours(1))
).toString();

这将为 my-bucket 存储桶生成一个签名 Cookie,有效期为 1 小时。您可以将此 Cookie 共享给其他人,他们就可以在有效期内访问该存储桶中的所有对象。

3. 限制访问权限

您可以在生成签名 URL 或签名 Cookie 时设置一些限制,例如:

  • 过期时间: 设置访问权限的有效期。
  • IP 地址范围: 限制只有特定 IP 地址范围可以访问。
  • HTTP 方法: 限制只允许特定的 HTTP 方法(GET、PUT 等)。
  • 请求头和查询参数: 限制只有特定的请求头和查询参数才能访问。

例如,以下命令将生成一个只允许从 192.168.1.0/24 IP 范围进行 GET 请求访问的签名 URL:

aws s3 presign s3://my-bucket/my-object \--expires-in 3600 \--ip-range 192.168.1.0/24 \--allowed-method GET

通过签名 URL 或签名 Cookie 共享 S3 上的数据是一种安全且灵活的方式,可以根据您的需求设置不同的访问权限。但请记住,一旦共享了签名 URL 或签名 Cookie,任何拥有它们的人都可以在有效期内访问相应的对象或存储桶,因此请谨慎共享。

相关文章:

AWS入门实践-S3对象存储的基本用法

AWS S3(Simple Storage Service)是亚马逊云服务提供的一种高度可扩展、安全且经济高效的对象存储服务。它允许用户在任何位置存储和检索任意数量的数据,非常适合存储和分发静态文件、备份数据以及作为数据湖的存储层。 一、S3上传和下载文件(AWS门户) …...

el-tree-v2渲染树形大数据并设置默认展开

el-tree-v2无 el-tree中默认展开节点的属性,需要自行设置 default-expand-all是否默认展开所有节点 需求:首次默认展开全部节点 实现1尝试失败:增加设置了属性 :default-expand-keys"props.treeData.map(itemitem.id)"无效&…...

损失函数篇 | YOLOv8更换损失函数之MPDIoU(23年7月首发论文)

前言:Hello大家好,我是小哥谈。损失函数是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练模型时,我们希望通过不断调整模型参数,使得损失函数的值最小化,从而使得模型的预测值更加接近真实值。不同的损失函数适用于不同的问题,例如均方误差损失函数适用于回…...

【力扣】200.岛屿数量(染色法DFS深搜)

岛屿数量 题目描述 链接:力扣:200.岛屿数量 给你一个由 1(陆地)和 0(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆…...

达梦配置ODBC连接

达梦配置ODBC连接 基础环境 操作系统:Red Hat Enterprise Linux Server release 7.9 (Maipo) 数据库版本:DM Database Server 64 V8 架构:单实例1 下载ODBC包 下载网址:https://www.unixodbc.org/ unixODBC-2.3.0.tar.gz2 编译并…...

独孤思维:高客单价项目,必须来一个

01 上次和水龙聊完以后,完成了图书电商项目小报童的梳理。 而且还让我规划后端低转高产品的设计。 目前独孤,准备以图书电商项目私教作为切入点,捆绑自己的合伙人。 设计高客单价项目。 所以,独孤4月的副业规划目标&#xff…...

学习java第三十二天

Spring 会利用AutowiredAnnotationBeanPostProcessor.postProcessMergedBeanDefinition() 找出注入点并缓存, 找注入点的流程为: 遍历当前类的所有的属性字段 Field 查看字段上是否存在 Autowired、Value、Inject 中的其中任意一个,存在则认…...

力扣150. 逆波兰表达式求值

思路:又是有消消乐的感觉,只不过这里是遇到一个操作符号,就消掉两个数字合并成一个新数;所以想到用栈结构来处理;用一个栈来放当前遍历过的数字,当遍历遇到操作符时,就把前面最新入栈的两个数取…...

hololens 2 投屏 报错

使用Microsoft HoloLens投屏时,ip地址填对了,但是仍然报错,说hololens 2没有打开, 首先检查 开发人员选项 都打开,设备门户也打开 然后检查系统–体验共享,把共享都打开就可以了...

初次在 GitHub 建立仓库以及公开代码的流程 - 公开代码

初次在 GitHub 建立仓库以及公开代码的流程 - 公开代码 References 在已有仓库中添加代码并公开。 git clone 已有仓库 将已有仓库 clone 到本地的开发环境中。 strongforeverstrong:~$ mkdir github_work strongforeverstrong:~$ cd github_work/ strongforeverstrong:~/git…...

论文笔记 - :MonoLSS: Learnable Sample Selection For Monocular 3D Detection

论文笔记✍MonoLSS: Learnable Sample Selection For Monocular 3D Detection 📜 Abstract 🔨 主流做法限制 : 以前的工作以启发式的方式使用特征来学习 3D 属性,没有考虑到不适当的特征可能会产生不利影响。 🔨 本…...

LVS、HAProxy

集群:将很多个机器组织到一起,作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类:负载均衡集群:Load Balance。高可用集群:High Available。高性能集群:High Performance Com…...

开发环境->生产环境

1、数据迁移 不涉及docker # 以数据库用户导出数据 mysqldump -h 192.168.1.168 -P 3307 -u abragent -pabragebb17 abragent > abragent.sql# 以root用户导出数据 mysqldump -h 192.168.1.168 -P 3307 -u root -p8d3Ba1b abragent > abragent.sql 涉及docker …...

基于AI智能识别技术的智慧展览馆视频监管方案设计

一、建设背景 随着科技的不断进步和社会安全需求的日益增长,展览馆作为展示文化、艺术和科技成果的重要场所,其安全监控系统的智能化升级已成为当务之急。为此,旭帆科技(TSINGSEE青犀)基于视频智能分析技术推出了展览…...

Leetcode-894-所有可能的真二叉树-c++

题目详见https://leetcode.cn/problems/all-possible-full-binary-trees/ 主搞动态规划,因为这玩意儿我还不是很懂 关于节点个数为奇数偶数的证明请见官方题解方法一中的如下内容: 这里DP的一个主要思想是:对于任何一个满二叉树&#xff…...

Django DRF视图

文章目录 一、DRF类视图介绍APIViewGenericAPIView类ViewSet类ModelViewSet类重写方法 二、Request与ResponseRequestResponse 参考 一、DRF类视图介绍 在DRF框架中提供了众多的通用视图基类与扩展类,以简化视图的编写。 • View:Django默认的视图基类&…...

SQLite全文搜索引擎:实现原理、应用实践和版本差异

文章目录 一、实现原理1.1 倒排索引1.2 虚拟表 二、应用在工程上的实施方法2.1 创建FTS虚拟表2.2 插入数据2.3 全文搜索2.4 关联普通表2.5 更新和删除数据2.6 优化FTS虚拟表2.7 小结 三、FTS3、FTS4和FTS5的区别3.1 FTS33.2 FTS43.3 FTS53.4 小结 四、更新SQLite的FTS版本的步骤…...

day17-二叉树part04

110.平衡二叉树 (优先掌握递归)后序遍历 左右中 class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root) ! -1;}//递归三部曲 确定方法的参数与返回值private int getHeight(TreeNode root){//明确终止条件if(root null){r…...

书生浦语第一次课

模型的发展 从专业模型到通用模型 书生浦语大模型全链路开源体系 2023.06.07 -> InternLM千亿参数语言大模型发布 2023.07.06 -> InternLM千亿参数语言大模型全面升级,支持8K语境、26种语言。全面开源、免费商用:InternLM-7B、全链条开源工具…...

UE小:UE5.3无法创建C++工程

当您在使用Unreal Engine (UE) 构建项目时,如果遇到以下问题: Running C:/Program Files/Epic Games/UE\_5.3/Engine/Build/BatchFiles/Build.bat -projectfiles -project"C:/UEProject/Shp\_1/Shp\_1.uproject" -game -rocket -progress Usi…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...