Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS S3 さわってみた

AWS S3 さわってみた

AWS S3いくつか機能が増えていたので、機能さわりながら以下の新しい機能の性能差分を確認してみた。
・条件付き書き込み
・S3 Express One Zone

Masayuki Nishikawa

November 20, 2024
Tweet

Other Decks in Technology

Transcript

  1. • 可用性 :3つ以上のAZにデータは保存(可用性:99.99%) • 耐久性 :年間99.999999999%(イレブン9)のデータ耐久性 • 暗号化 :サーバ側/クライアント側、どちらの暗号化にも対応 •

    セキュリティ :さまざまな機能にてアクセス制御が可能 • 低コスト :AWSのストレージサービスでは一番安価 • 整合性 :リードアフターライトの整合性を自動的に提供
  2. 1)テスト用のクライアントと、最新版のAWS CLIを準備 テスト用に“Amazon Linux 2023”をAMIから構築 構築したAmazon Linux 2023 は “aws-cli/2.15.30

    Python/3.9.16 Linux/6.1.109-118.189.amzn2023.x86_64 source/x86_64.amzn.2023” が実装されていたが、新しいs3apiには対応していなかったので、最新版の “aws-cli/2.17.56 Python/3.12.6 Linux/6.1.109-118.189.amzn2023.x86_64 exe/x86_64.amzn.2023” をインストール。 2)試験用のS3バケット作成 スタンダードなS3バケットを1つ用意
  3. 1)単純にファイルを置いてみる 2)条件を付けないで、同じファイルを置いてみる # aws s3api put-object --bucket {バケット名} --key 1G.dummy

    --body 1G.dummy { "ETag": "¥"cd573cfaace07e7949bc0c46028904ff¥"", "ServerSideEncryption": "AES256" } # aws s3 ls s3://{バケット名}/ 2024-09-23 04:38:59 1073741824 1G.dummy # aws s3api put-object --bucket {バケット名} --key 1G.dummy --body 1G.dummy { "ETag": "¥"cd573cfaace07e7949bc0c46028904ff¥"", "ServerSideEncryption": "AES256" } # aws s3 ls s3://{バケット名}/ 2024-09-23 04:40:05 1073741824 1G.dummy 上書き更新されている
  4. 3)条件付きで、同じファイルを置いてみる 4)S3からファイルを削除して、条件付きで同じファイルを置いてみる。 # aws s3api put-object --bucket {バケット名} --key 1G.dummy

    --body 1G.dummy --if-none-match "*" An error occurred (PreconditionFailed) when calling the PutObject operation: At least one of the pre-conditions you specified did not hold # aws s3api put-object --bucket {バケット名} --key 1G.dummy --body 1G.dummy --if-none-match "*" { "ETag": "¥"cd573cfaace07e7949bc0c46028904ff¥"", "ServerSideEncryption": "AES256" } # aws s3 ls s3://{バケット名}/ 2024-09-23 04:43:45 1073741824 1G.dummy アップロードできた! エラーとなりアップロードできない・・・
  5. 1)単純にs3apiでExpress one Zoneへファイルを置いてみる 2)もっとシンプルにコマンド叩いてみる # aws s3api put-object --bucket {バケット名--apne1-az1--x-s3}

    --key 1G.dummy --body 1G.dummy An error occurred (AccessDenied) when calling the CreateSession operation: Access Denied うまくいかない! # aws s3 cp ./1G.dummy s3://{バケット名--apne1-az1--x-s3}/ upload failed: ./1G.dummy to s3://{バケット名--apne1-az1--x-s3}/1G.dummy An error occurred (AccessDenied) when calling the CreateSession operation: Access Denied
  6. ・・・調べた。 どうやら、 権限が足りないらしい。 なんと、 Experess One Zone は “AmazonS3FullAccess” のポリシではNGで

    別のポリシとのこと ということで・・・ 3)ポリシの作成 とインスタンスロール へのアタッチ "Statement": [ { "Sid": "AllowAccessRegionalEndpointAPIs", "Effect": "Allow", "Action": [ "s3express:DeleteBucket", "s3express:DeleteBucketPolicy", "s3express:CreateBucket", "s3express:PutBucketPolicy", "s3express:GetBucketPolicy", "s3express:ListAllMyDirectoryBuckets" ], "Resource": "arn:aws:s3express:ap-northeast-1:{アカウントID}:bucket/{バケット名--apne1-az1--x-s3}/*" }, { "Sid": "AllowCreateSession", "Effect": "Allow", "Action": "s3express:CreateSession", "Resource": "*" } ]
  7. 1)単純にs3apiでExpress one Zoneへファイルを置いてみる 2)スタンダードS3に同じファイルを置いてみる # time -p aws s3api put-object

    --bucket {バケット名--apne1-az1--x-s3} --key 1G.dummy --body 1G.dummy { "ETag": "¥"d4328d47a03a41978c537b17796b0538¥"", "ChecksumCRC32": "W2TCsA==", "ServerSideEncryption": "AES256" } real 9.81 user 2.63 sys 0.67 できた!! 配置に “9.81s” # time -p aws s3api put-object --bucket {バケット名} --key 1G.dummy --body 1G.dummy { "ETag": "¥"cd573cfaace07e7949bc0c46028904ff¥"", "ServerSideEncryption": "AES256" } real 12.00 user 4.41 sys 2.00 配置に “12.00s” っz
  8. 3)単純にs3apiでExpress one Zoneから、ファイルを取得してみる 2)スタンダードS3で同じファイルを取得してみる # time -p aws s3api get-object

    --bucket {バケット名--apne1-az1--x-s3} --key 1G.dummy 1G.dummy { "AcceptRanges": "bytes", "LastModified": "2024-09-25T15:20:34+00:00", "ContentLength": 1073741824, "ETag": "¥"61a25df72c8f47f8843a46d7e5b3e938¥"", "ContentType": "binary/octet-stream", "ServerSideEncryption": "AES256", "Metadata": {}, "StorageClass": "EXPRESS_ONEZONE" } real 9.15 user 3.28 sys 1.28 取得に “9.81s” 配置に “14.16s” っz real 14.16 user 3.25 sys 5.15
  9. 1)Express one Zoneへ5,000件のファイルを置いてみる 2)スタンダードS3 へ5,000件のファイルを置いてみる time -p aws s3 cp

    /var/tmp/dummy/ s3:// {バケット名} / --recursive --exclude "*" --include "test*" : real 90.96 user 38.90 sys 16.98 1Mのファイルを5,000件 配置するのに“90.96s” time -p aws s3 cp /var/tmp/dummy/ s3:// {バケット名--apne1-az1--x-s3} / --recursive --exclude "*" --include "test*" : real 44.41 user 24.16 sys 7.08 1Mのファイルを5,000件 配置するのに“44.41s”
  10. 3)Express one Zoneから5,000件のファイルを取得してみる 4)スタンダードS3 から5,000件のファイルを取得してみる time -p aws s3 mv

    s3:// {バケット名} / /var/tmp/dummy/get/ --recursive : real 141.27 user 36.78 sys 10.61 1Mのファイルを5,000件 取得するのに“141.27s” time -p aws s3 mv s3:// {バケット名--apne1-az1--x-s3} / /var/tmp/dummy/get/ --recursive : real 57.82 user 35.74 sys 10.42 1Mのファイルを5,000件 取得するのに“57.82s”