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

AWS S3 さわってみた

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

AWS S3 さわってみた

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

Avatar for Masayuki Nishikawa

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”