ECS: Durchführen grundlegender S3-Vorgänge mit dem Skript "s3curl.pl"

Summary: Anleitung zum Durchführen grundlegender S3-Vorgänge auf ECS 3.x mit dem Skript "s3curl".

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

Konfigurationsschritte

Erfassen Sie die folgenden Informationen, um Folgendes zu konfigurieren: s3curl.plaus:
  • Objektnutzer des zu untersuchenden Buckets:
    • Anmelden bei der -Benutzeroberfläche>Managen>von Buckets**Namespace auswählen**> Notieren Sie sich die Spalte "Owner" für den Bucket. 
  • Gemeinsamer geheimer Schlüssel des Objektnutzers:
    • Anmelden bei der -Benutzeroberfläche>Nutzer>verwalten> Nutzer von oben >**Bearbeiten** Notieren Sie den gemeinsamen geheimen Schlüssel für den Nutzer.
  • ECS-Node-Daten-IP-Adressen oder öffentliche IP-Adressen:
    • Melden Sie sich bei der ECS-CLI an und führen Sie Folgendes aus: getrackinfo -n
Wenn der Client über eine Netzwerktrennung verfügt, werden IP-Adressen für Daten und Repl aus dem obigen Befehl angezeigt. Notieren Sie sich die Daten-IPs der Nodes.
Beispiel:
Node ID       Network          Ip Address        Netmask            Gateway            VLAN
5            repl              10.###.##.##4     255.255.252.0      -                  -
5            data              10.###.##.##2     255.255.252.0      -
Wenn keine Netzwerktrennung vorhanden ist, rufen Sie die öffentlichen IP-Adressen der Nodes aus getrackinfoaus:
Beispiel:
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

Schritte:

  1. Navigieren Sie zum Verzeichnis /usr/share/s3curl auf dem ECS-Node und suchen Sie nach der folgenden Datei.
provo:/usr/share/s3curl #
provo:/usr/share/s3curl # ls -lrt .s3curl
-rw------- 1 root root 2095 Mar  6 16:14 .s3curl
  1. Wenn die Datei nicht vorhanden ist, erstellen Sie sie mit folgendem Inhalt. ["sample_user" verwendet wird.]
@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. Sie können dieser Datei wie unten gezeigt mehrere Nutzer hinzufügen.
%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. Ändern der Berechtigungen für die Dateien.
# sudo chmod 755 s3curl.pl

# sudo chmod 600 .s3curl


Die Verwendung von s3curl.pl nach Konfiguration

  1. Testen der Nutzerauthentifizierung und Auflisten von Buckets, die diesem Nutzer gehören “bucket_1" ist der Name des Buckets.
  • --id = die ID, die zuvor in der .s3curl Datei "sample_user
  • 9020 = TCP-Port für die Verbindung mit S3
# 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. Auflisten des Inhalts eines bestimmten Buckets.
  • Ein Schlüssel in S3 bezieht sich auf eine Datei.
Hinweis: S3 hat eine flache Dateistruktur, Verzeichnisse sind nicht vorhanden.
  • s3curl.pl Zeigt nur die ersten 1000 Dateien in einem Verzeichnis an.
# 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. Suchen nach einem bestimmten Schlüssel oder einer bestimmten Datei in einem Bucket.
  • Verwenden Sie die Präfixsuchmethode, um nach bestimmten Dateien zu suchen, sobald der Anfang des Dateinamens bekannt ist.
  • Fügen Sie die Methode nach dem Bucket-Namen " ein?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. Lesen eines bestimmten Schlüssels oder einer bestimmten Datei in einem Bucket
Hinweis: Wenn der Name eines Schlüssels oder Buckets ein Leerzeichen enthält, verwenden Sie die Zeichenfolge "%20", während Sie dies in der URL abfragen.
 
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. Schreiben eines bestimmten Schlüssels oder einer bestimmten Datei in den Bucket
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. Lesen Sie die Metadaten eines bestimmten Schlüssels oder einer bestimmten Datei im Bucket.
  • HTTP/1.1 200 OK --> Spezifische HTTP-Antwort für die Anforderung
  • x-amz-request-id --> request_id die in den ECS-Protokollen nachverfolgt werden können
  • ETag --> MD5SUM der Datei
  • Content-Length --> Größe oder Anzahl der Bytes des Objekts
# 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. So erstellen Sie einen neuen Bucket für den Nutzer:
# 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. Herunterladen eines bestimmten Schlüssels oder einer bestimmten Datei in einem Bucket auf einen ECS-Node.
# 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. Löschen eines bestimmten Schlüssels oder einer bestimmten Datei im Bucket, der dem Nutzer gehört.
provo:/usr/share/s3curl # perl s3curl.pl --id <user ID> --delete -- http://<hostname or IP>:9020/<bucket>/<path1>/<path2>/<object>
 
Hinweis: Wenn der Objektname ein Leerzeichen dazwischen hat, müssen Sie den gesamten Pfad in Anführungszeichen setzen und " + " im Raum.
Beispiel für einen Objektnamen: 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. Löschen eines Buckets, der dem Nutzer gehört.
provo:/usr/share/s3curl # perl s3curl.pl --id smaple_user --delete -- http://10.##.##.##7:9020/new_bucket_name

Der Bucket ist nach dem Auflisten der Buckets, die zum Nutzer gehören, nicht vorhanden:
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. Partielles Lesen einer Datei mithilfe des "byte: range"-Headers (darunter werden die ersten sieben Zeichen gelesen)
  • Bereich: Bytewerte umfassen:
Die ersten 500 Bytes: "bytes 0-499/1234" Die zweiten 500 Bytes: "bytes 500-999/1234" Alle außer den ersten 500 Bytes: "bytes 500-1233/1234" Die letzten 500 Bytes: "bytes 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.

Hinweis: Die Debug-Option kann für jede der s3curl.pl verwendet werden.
 
# 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. Hochladen eines Stapels von Dateien oder Schlüsseln in einen bestimmten Bucket.
  • Erstellen Sie eine Beispieldatei.
# vi /usr/share/s3curl/test

# cat /usr/share/s3curl/test

Diese Datei wird 1.000 Mal in ECS hochgeladen.

  • Erstellen Sie das folgende Skript.
# 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
  • Ändern Sie die Berechtigungen des Skripts.
# cd /usr/share/s3curl

# sudo chmod +755 
  • Führen Sie das Skript aus.
# sh script.s
  1. Schreiben einer Datei mit einem Leerzeichen oder einem Sonderzeichen
  • Schreiben einer Datei mit einem Leerzeichen namens "test file.txt" (erfordert ASCII-Wert %20)
provo:/usr/share/s3curl # perl s3curl.pl --id upload_test --put="test file.txt" -- http://10.##.##.##:9020/bucket_name/test%20file.txt
  • Schreiben einer Datei mit einer Klammer mit Sonderzeichen namens "testfile (1).txt" (erfordert einen Schrägstrich " \ ", um Sonderzeichen zu ignorieren)
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.