ECS:「s3curl.pl」スクリプトを使用して基本的なS3操作を実行する方法

Summary: 「s3curl」スクリプトを使用してECS 3.xで基本的なS3操作を実行する方法。

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions

設定手順

構成するには、次の情報を収集します。 s3curl.plが使用するJava Runtime Environmentへのパスを定義します。
  • 調査しているバケットのオブジェクト ユーザー:
    • UIにログインし>>バケットの管理>**ネームスペースの選択**>バケットの所有者列を書き留めます。  
  • オブジェクト ユーザーの共有シークレット:
    • UIにログインし>上から>ユーザー>>編集**ユーザーを管理します ユーザーの共有シークレットを書き留めます。
  • ECSノードのデータIPアドレスまたはパブリックIPアドレス:
    • ECS CLIにログインし、次のコマンドを実行します。 getrackinfo -n
クライアントにネットワークが分離されている場合は、上記のコマンドから データREPL のIPが表示されます。ノードのデータIPを書き留めます。
Example:
Node ID       Network          Ip Address        Netmask            Gateway            VLAN
5            repl              10.###.##.##4     255.255.252.0      -                  -
5            data              10.###.##.##2     255.255.252.0      -
ネットワーク分離がない場合は、ノードのパブリックIPアドレスを getrackinfoが使用するJava Runtime Environmentへのパスを定義します。
Example:
provo:/usr/share/s3curl # getrackinfo
Node private      Node              Public                                  RMM
Ip Address        Id       Status   Mac                 Ip Address          Mac                 Ip Address          Node Name
===============   ======   ======   =================   =================   =================   =================   =========
192.###.###.1     1        MA       00:1e:67:f1:85:10   10.##.##.##7        00:1e:67:bc:c5:53   10.##.##.##3        provo-red
192.###.###.2     2        SA       00:1e:67:ab:e6:d8   10.##.##.##8        00:1e:67:6a:08:8c   10.##.##.##4        sandy-red

手順:

  1. ディレクトリーに移動します /usr/share/s3curl をクリックして、以下のファイルを確認します。
provo:/usr/share/s3curl #
provo:/usr/share/s3curl # ls -lrt .s3curl
-rw------- 1 root root 2095 Mar  6 16:14 .s3curl
  1. ファイルが存在しない場合は、次の内容で作成します。["sample_user" が使用されます。
@endpoints = ECS data / public ip address gotten above.

%awsSecretAccessKeys = (
sample_user => {
id => '<Object User>',
key => '<Shared Secret>',
},
@endpoints = ('<node1_ip>','<node2_ip>','<node3_ip>','<node4_ip>',)
); 
  1. このファイルには、以下のように複数のユーザーを追加することができます。
%awsSecretAccessKeys = (
<sample_user> => {
id => '<object user>',
key => '<Shared Secret>',
},
<sample_user2> => {
id => '<object user>',
key => '<Shared Secret>',
},
@endpoints = ('<node1_ip>','<node2_ip>','<node3_ip>','<node4_ip>',)
);
  1. ファイルの権限を変更する。
# sudo chmod 755 s3curl.pl

# sudo chmod 600 .s3curl


ユーザー インターフェイス アプリケーションを起動するために s3curl.pl 構成後

  1. ユーザー認証をテストし、そのユーザーが所有するバケットを一覧表示します。」bucket_1」はバケットの名前です。
  • --id = 以前に設定された ID .s3curl ファイル"sample_user
  • 9020 = S3への接続に使用するTCPポート
# provo:/usr/share/s3curl # perl s3curl.pl --id <user ID> -- http://<hostname or IP>:9020 | xmllint --format -
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user -- http://10.##.##.##7:9020 | xmllint --format -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   421  100   421    0     0  21803      0 --:--:-- --:--:-- --:--:-- 22157
<?xml version="1.0" encloding="UTF-8" standalone="yes"?>
<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01">  
  <Owner>
    <ID>sample_user</ID>
    <DisplayName>sample_user</DisplayName>  
  </Owner>
  <Buckets>
    <Bucket> 
      <Name>bucket_1</Name>
      <CreationDate>2017-02-21T08:32:05.651Z</CreationDate>
      <ServerSideEncryptionEnabled>false</ServerSideEncryptionEnabled>
    </Bucket>
  </Buckets>
  <IsTruncated>false</IsTruncated>
</ListAllMyBucketsResult>
  1. 特定のバケットの内容を一覧表示します。
  • S3のキーはファイルを参照します。
注:S3のファイル構造はフラットラインであり、ディレクトリーは存在しません。
  • s3curl.pl ディレクトリ内の最初の 1000 ファイルのみを表示します。
# perl s3curl.pl --id <user id> -- http://<hostname or IP>:9020/<bucket> | xmllint --format - | grep Key
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user -- http://10.##.##.##7:9020/bucket_1 | xmllint --format - | grep Key
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1128  100  1128    0     0  29386      0 --:--:-- --:--:-- --:--:-- 29684
  <MaxKeys>1000</MaxKeys>
    <Key>2017 - emea schedule obj storage.xlsx</Key>
    <Key>_$folder$</Key>
    <Key>dir1/dir2/dir3/test_new_name.txt</Key>
  1. バケット内の特定のキーまたはファイルの検索。
  • プレフィックス検索方法を使用して、ファイル名の先頭が判明したら、特定のファイルを検索します。
  • バケット名「?prefix=<search_string>
# perl s3curl.pl --id <user id> -- http://<hostname or IP>:9020/<bucket>?prefix=dir1/dir2/ | xmllint --format - | grep Key
provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user -- http://10.##.##.##7:9020/bucket_1?prefix=dir1/dir2/ | xmllint --format - | grep Key
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   599  100   599    0     0  20309      0 --:--:-- --:--:-- --:--:-- 19966
  <MaxKeys>1000</MaxKeys>
    <Key>dir1/dir2/dir3/test_new_name.txt</Key>
  1. バケット内の特定のキーまたはファイルの読み取り。
注:キーまたはバケットの名前にスペースが含まれている場合は、文字列「%20」をクエリーしながら、URLでクエリを実行します。
 
provo:/usr/share/s3curl # cat test1.txt
Goodbye World

provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user -- http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt
Goodbye World
  1. 特定のキーまたはファイルをバケットに書き込む。
provo:/usr/share/s3curl # cat test1.txt
Goodbye World

provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user --put=test1.txt http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt
  1. バケット内の特定のキーまたはファイルのメタデータを読み取ります。
  • HTTP/1.1 200 OK --> リクエストに対する特定のHTTPレスポンス
  • x-amz-request-id --> request_id ECSログで追跡可能
  • ETag --> ファイルのMD5SUM
  • Content-Length --> オブジェクトのサイズまたはバイト数
# perl s3curl.pl --id <user ID> --head http://<hostname or IP>:9020/<bucket>/<path1>/<path2>/<object>
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user --head http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt
HTTP/1.1 200 OK
Date: Wed, 08 Mar 2017 16:25:52 GMT
Server: ViPR/1.0
x-amz-request-id: 0a3c23ed:15aa813368d:10e1:1
x-amz-id-2: 83769c2fcf5f8907b60b588a251bcc492d86d5829dfc2c8bee2504f0c527f256
ETag: "54aea9f06281a5df11d06f105c6fb039"
Last-Modified: Wed, 08 Mar 2017 16:08:02 GMT
x-emc-mtime: 1488989282859
Content-Encoding: identity
Content-Type: application/octet-stream
Content-Length: 14
  1. ユーザーの新しいバケットを作成するには、次の手順を実行します。
# perl s3curl.pl --id <user ID> --createBucket -- http://<hostname or IP>:9020/<new bucket name>
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user --createBucket -- http://10.##.##.##7:9020/new_bucket_name

New Bucket can be seen below.
# provo:/usr/share/s3curl # perl s3curl.pl --id <user> -- http:/<hostname or IP>:9020 | xmllint --format - | grep -A1 '<Bucket>'
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user -- http://10.##.##.##7:9020 | xmllint --format - | grep -A1 '<Bucket>'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   583  100   583    0     0  31712      0 --:--:-- --:--:-- --:--:-- 32388
    <Bucket>
      <Name>new_bucket_name</Name>
--
    <Bucket>
      <Name>some_old_bucket</Name>
  1. バケット内の特定のキーまたはファイルをECSノードにダウンロードする。
# perl s3curl.pl --id <user ID> -- http://<hostname or IP>:9020/<bucket>/<path1>/<object> -o download2.txt
provo:/usr/share/s3curl # perl s3curl.pl --id sample_user -- http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt -o download2.txt
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    14  100    14    0     0   1360      0 --:--:-- --:--:-- --:--:--  1400
provo:/usr/share/s3curl #

provo:/usr/share/s3curl # cat download2.txt
Goodbye World
  1. ユーザーに属するバケット内の特定のキーまたはファイルの削除。
provo:/usr/share/s3curl # perl s3curl.pl --id <user ID> --delete -- http://<hostname or IP>:9020/<bucket>/<path1>/<path2>/<object>
 
注:オブジェクト名の間にスペースがある場合は、パス全体を引用符で囲み、「 + 」を空間に
オブジェクト名の例: test_new_name test - test.txt
 
perl s3curl.pl --id sample_user --delete -- "http://10.##.##.##7:9020/bucket/dir1/dir2/test_new_name+test+-+test.txt"
  1. ユーザーに属するバケットの削除。
provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user --delete -- http://10.##.##.##7:9020/new_bucket_name

ユーザーに属するバケットを一覧表示した後、バケットが存在しない。
provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user -- http://10.##.##.##7:9020 | xmllint --format - | grep -A1 '<Bucket>'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   421  100   421    0     0  19928      0 --:--:-- --:--:-- --:--:-- 21050
    <Bucket>
      <Name>bucket_1</Name>
  1. 「byte: range」ヘッダーを使用してファイルを部分的に読み取る(最初の7文字以下を読み取る)
  • 範囲: バイト値には次のものが含まれます。
最初の 500 バイト: "bytes 0-499/1234" 2 番目の 500 バイト: "bytes 500-999/1234" 最初の 500 バイトを除くすべて: "bytes 500-1233/1234" 最後の 500 バイト: 「バイト734-1233/1234」
provo:/usr/share/s3curl # cat test1.txt
Goodbye World

provo:/usr/share/s3curl # perl s3curl.pl --id sample_user -- http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt -H "Range: bytes=0-6"
Goodbye


Using the "--debug" option for more detailed responses.

注:debug オプションは、 s3curl.pl コマンドを使用します。
 
# perl s3curl.pl --debug --id <user ID> -- http://<hostname>:9020/<bucket>/<object> -H "Range: bytes=0-6"
provo:/usr/share/s3curl # perl s3curl.pl --debug --id sample_user -- http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt -H "Range: bytes=0-6"
s3curl: Found the url: host=10.##.##.237; port=9020; uri=/thomas/dir1/dir2/dir3/test_new_name.txt; query=;
s3curl: ordinary endpoint signing case
s3curl: StringToSign='GET\n\n\nWed, 08 Mar 2017 17:10:59 +0000\n/bucket_1/dir1/dir2/dir3/test_new_name.txt'
s3curl: exec curl -v -H 'Date: Wed, 08 Mar 2017 17:10:59 +0000' -H 'Authorization: AWS hegars5:+YrMhohkQ2HqRNkYURJMbddIwrA=' -L -H 'content-type: ' http://10.##.##.##7:9020/bucket_1/dir1/dir2/dir3/test_new_name.txt -H 'Range: bytes=0-6'
* Hostname was NOT found in DNS cache
*   Trying 10.##.##.##7...
* Connected to 10.##.##.##7 (10.##.##.##7) port 9020 (#0)
> GET /bucket_1/dir1/dir2/dir3/test_new_name.txt HTTP/1.1
> User-Agent: curl/7.37.0
> Host: 10.##.##.##7:9020
> Accept: */*
> Date: Wed, 08 Mar 2017 17:10:59 +0000
> Authorization: AWS hegars5:+YrMhohkQ2HqRNkYURJMbddIwrA=
> Range: bytes=0-6
>
< HTTP/1.1 206 Partial Content
< Date: Wed, 08 Mar 2017 17:10:59 GMT
< Content-Range: bytes 0-6/14
< Accept-Ranges: bytes
* Server ViPR/1.0 is not blacklisted
< Server: ViPR/1.0
< x-amz-request-id: 0a3c23ed:15aa813368d:10fc:1
< x-amz-id-2: 83769c2fcf5f8907b60b588a251bcc492d86d5829dfc2c8bee2504f0c527f256
< ETag: "54aea9f06281a5df11d06f105c6fb039"
< Last-Modified: Wed, 08 Mar 2017 17:02:13 GMT
< x-emc-mtime: 1488992533141
< Content-Encoding: identity
< Content-Type: application/octet-stream
< Content-Length: 7
<
* Connection #0 to host 10.##.##.##7 left intact
Goodbye
  1. ファイルまたはキーのバッチを特定のバケットにアップロードする。
  • サンプル ファイルを作成します。
# vi /usr/share/s3curl/test

# cat /usr/share/s3curl/test

このファイルはECSに1000回アップロードされます。

  • 次のスクリプトを作成します。
# vi /usr/share/s3curl/script.sh
#!/bin/bash
# script.sh
for i in {1..1000}
do
./s3curl.pl --id=sample_user --put="test" -- "http://10.##.##.##7:9020/bucket_1/File$(printf "%04d" "$i").txt"
echo "File$(printf "%04d" "$i").txt"
done
  • スクリプトの権限を変更します。
# cd /usr/share/s3curl

# sudo chmod +755 
  • スクリプトを実行します。
# sh script.s
  1. スペースまたは特殊文字を使用したファイルの書き込み
  • 「」というスペース文字を含むファイルを書き込むtest file.txt" (ASCII 値 %20 が必要)
provo:/usr/share/s3curl # perl s3curl.pl --id upload_test --put="test file.txt" -- http://10.##.##.##:9020/bucket_name/test%20file.txt
  • 「」という特殊文字の括弧を使用してファイルを書き込むtestfile (1).txt" (スラッシュ " が必要) \ " は特殊文字を無視します)
provo:/usr/share/s3curl # perl s3curl.pl --id upload_test --put="testfile (1).txt" -- http://10.##.##.##:9020/bucket_name/testfile%20\(1\).txt

Affected Products

Elastic Cloud Storage

Products

Elastic Cloud Storage
Article Properties
Article Number: 000014704
Article Type: How To
Last Modified: 20 Oct 2025
Version:  5
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.