其他分享
首页 > 其他分享> > AWS26.使用CLI进行S3分段上传

AWS26.使用CLI进行S3分段上传

作者:互联网

使用CLI进行S3分段上传

=== 使用分段上传上传和复制对象

  • 分段上传允许您将单个对象作为一组分段上传
  • 每个部分都是对象数据的连续部分
  • 您可以按任意顺序独立上传这些对象部件
  • 如果任何部件的传输失败,您可以重新传输该部件,而不会影响其他部件
  • 上传对象的所有部分后,Amazon S3 会组装这些部分创建对象
  • 注意: 当对象大小达到 100 MB 时,应考虑使用分段上传,而不是直接上传对象

=== 何时使用分段上传

  • 如果您要通过稳定的高带宽网络上传大型对象,请使用分段上传,通过并行上传对象部分来获得多线程性能,从而最大限度地利用可用带宽
  • 如果您通过参差不齐的网络上传,请使用分段上传,通过避免上传重新启动提高对网络错误的弹性
  • 使用分段上传时,您需要重试仅上传在上传过程中中断的分段。您无需从头开始重新上传对象

=== 分段上传过程

  • 分段上传分为三个步骤
  • 分段上传启动:当您发送请求以启动分段上传时,Amazon S3 会返回带有上传 ID 的响应,该 ID 是分段上传的唯一标识符。每当上传分段、列出分段、完成上传或停止上传时,都必须包含此上传 ID。如果要提供描述正在上传的对象的任何元数据,则必须在请求中提供该元数据以启动分段上传
  • 分段上传:上传分段时,除了上传 ID 之外,您还必须指定分段编号。您可以选择 1 到 10,000 之间的任何部件号。部件号唯一标识部件及其在要上传的对象中的位置
  • 分段上传完成:当您完成分段上传时,Amazon S3 会根据分段编号升序连接各部分,从而创建一个对象。如果在启动分段上传请求中提供了任何对象元数据,Amazon S3 会将该元数据与对象相关联。成功完成请求后这些部件将不再存在**。

=== 架构图

image

== 实验步骤

=== 创建 IAM 角色

  • 导航到IAM
  • 左侧菜单中,单击角色 。单击创建角色该按钮以创建新的 IAM 角色
  • 在创建角色部分,为角色选择可信实体类型
  • AWS 服务
  • 使用案例:EC2

image

  • 单击下一步
  • 添加权限:现在,您可以看到策略列表。按名称S3fullaccess搜索权限,然后单击AmazonS3FullAccess
  • 单击下一步
  • 角色名称:输入 S3Role
  • 已成功按名称 S3Role 创建了一个 IAM 角色。
  • 注意:您可以使用其他名称创建角色,然后将其附加到 EC2 实例
  • 您已成功创建角色以访问 S3 存储桶

=== 创建 S3 存储桶

  • 请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。
  • 顶部菜单导航到 S3

image

  • 在 S3 页面上,单击创建存储桶填写存储桶详细信息
  • 桶名称:输入mys3bucket-test-abcd
  • 注意: S3 存储桶名称是全局唯一的,请选择一个可用的名称
  • AWS 区域:选择美国东部(弗吉尼亚北部)美国东部-1
  • 对于对象所有权:选择ACL 已禁用(推荐)
  • 其他设置保留为默认值。
  • 创建存储桶按钮
  • S3 存储桶已创建

image


=== 启动 EC2 实例

  • 请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。
  • 顶部菜单导航到 EC2
  • 左侧面板,单击"实例",然后单击"启动新实例"

==== (1)控制台启动实例

image

==== (2)选择系统镜像

image

==== (3)选择实例类型

image

==== (4)配置实例

  • 向下滚动到 IAM 角色,然后选择我们在上述步骤中创建的角色

image

  • 向下滚动到高级详细信息
  • 在用户数据部分下,输入以下脚本将视频文件从 S3 存储桶复制到 EC2 实例
  #!/bin/bash
  sudo su
  yum update -y
  mkdir /home/ec2-user/whizlabs/
  aws s3 cp s3://labtask69/video.mp4 /home/ec2-user/whizlabs/

==== (5)添加存储

image

==== (6)添加标签

image

==== (7) 配置安全组

  • 添加 SSH:

. 选择类型: 选择 SSH
. 协议:TCP
. 端口范围:22
. 源:选择"任何位置"

image

  • 点击下一步 审核和启动

==== (8) 审核启动

  • 检查所有选定的设置,无误点击启动
  • 选择现有密钥对,确认并单击启动实例

image


=== 在 EC2 中查看原始文件

  • SSH 进入 EC2 实例
  • SSH 进入 EC2 实例后,使用此命令查看新创建的目录 whizlabs
  • sudo -s
  • ls

image

  • 目录更改为 whizlabs
  • cd whizlabs/
  • 查看视频文件的属性详细信息
  • ls -ltr

image

  • 注意:此文件的大小为 143 MB,因此我们将使用分段功能将此文件上传到 s3

=== 拆分原始文件

  • 将文件拆分为多个块
  • 拆分命令根据该选项将大文件拆分为多个部分(块)。
  • 语法:split [options] [filename]
  • 在这里,我们将 143 MB 的文件划分为 40MB 的块
  • split -b 40M video.mp4
  • 查看分块文件
  • ls -lh

image

  • 注意:此处的"xaa"和"xad"是按字母顺序重命名的分块文件
  • 每个文件的大小为 40MB,但最后一个文件除外。区块数取决于原始文件的大小和用于对区块进行分区的字节值

=== 创建分段上传

  • 语法:aws s3api create-multipart-upload --bucket [Bucket name] --key [original file name]
  • 示例:aws s3api create-multipart-upload --bucket mys3bucket-test-abcd --key video.mp4
  • 注意:将上面的示例中存储桶名称替换为您的存储桶名称

image

注意:请复制 UploadId 并将其保存以供日后使用。


=== 上传文件块

  • 接下来,我们需要使用分段号逐个上传每个文件区块。部件号是根据文件的字母顺序分配的。
  • 语法: aws s3api upload-part --bucket [bucketname] --key [filename] --part-number [number] --body [chunk file name] --upload-id [id]
  • 示例: aws s3api upload-part --bucket mys3bucket-test-abcd --key video.mp4 --part-number 1 --body xaa --upload-id hey69rtKLfEkJpKWqJ35_M8MReFgyAncD4Q0OjIwYaJPqnSkgxAGySClidSLEaOXJ49LbM8RYySAoVhksVsW.Y1v80uZ3fK1yARrluSbACa85uqMSPLYON2n5L34k7OhytUdjdtvsqIbMoKpP17cTA--
  • 注意:请将上传 ID 替换为您的上传 ID

image

  • 注: 复制 ETag ID 和部件号以供日后使用。
  • 对每个文件块**重复上述 CLI 命令 **[将 --part-number和 --body替换为上面的值]
  • 向上箭头键返回到上一个命令。无需再次输入上传 ID,只需更改part-number和body即可
  • 每次上传区块时,请不要忘记保存 Etag 值

image


=== 创建Multipart JSON 文件

  • 创建一个包含所有part-number及其 Etag 值的文件。
  • 创建名为 list.json 的文件
  • nano list.json
  • 复制下面的 JSON 脚本并将其粘贴到 list.json 文件中。
  • 注意:根据上传每个区块后收到的ETag替换 ETag ID
{
  "Parts": [
    {
      "PartNumber": 1,
      "ETag": "\"70418ed5e552ea21deb8785359e69e28\""
    },
    {
      "PartNumber": 2,
      "ETag": "\"e0c16ead703bfcd1b36b339d9ae1901d\""
    },
    {
      "PartNumber": 3,
      "ETag": "\"56734bc19b453aab5144de4454945609\""
    },
    {
      "PartNumber": 4,
      "ETag": "\"7786233d68592caf07e93521cbd0a80e\""
    }
  ]
}

image

  • 保存文件后退出

=== 完成分段上传

  • 现在,我们将在上一步中创建的 JSON 文件的帮助下将所有文件块连接在一起
  • 语法:aws s3api complete-multipart-upload --multipart-upload [json file link] --bucket [upload bucket name] --key [original file name] --upload-id [upload id]
  • 示例:aws s3api complete-multipart-upload --multipart-upload file://list.json --bucket mys3bucket-test-abcd --key video.mp4 --upload-id hey69rtKLfEkJpKWqJ35_M8MReFgyAncD4Q0OjIwYaJPqnSkgxAGySClidSLEaOXJ49LbM8RYySAoVhksVsW.Y1v80uZ3fK1yARrluSbACa85uqMSPLYON2n5L34k7OhytUdjdtvsqIbMoKpP17cTA--
  • 注意
  • 将上面的示例替换为您的存储桶名称
  • Upload-Id 值替换为您的Upload ID

image


=== 查看 S3 存储桶中的文件

  • 请确保您位于美国东部(弗吉尼亚北部)us-east-1 区域。
  • 顶部菜单导航到 S3
  • 在 S3 控制面板上,单击存储桶名称 mys3bucket-test-abcd
  • 在存储桶中,您可以看到创建的video.mp4对象

image


标签:文件,CLI,S3,upload,AWS26,--,上传,分段
来源: https://www.cnblogs.com/ajajroom/p/16400101.html