ЕКС: Як виконувати базові операції S3 за допомогою скрипта "s3curl.pl"

Summary: Як виконувати базові операції s3 на ECS 3.x за допомогою скрипта "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

Етапи налаштування

Зберіть наведені нижче фрагменти інформації, щоб налаштувати s3curl.pl:
  • Користувач об'єкта сегмента, який ви досліджуєте:
    • Увійдіть в інтерфейс користувача>Керування>сегментами**Виберіть простір імен**> Запишіть стовпець власника для сегмента. 
  • Спільний секрет користувача об'єкта:
    • Увійдіть в інтерфейс користувача>Керування>користувачами>**Редагування** користувача зверху > Запишіть спільний секрет для користувача.
  • IP-адреси даних ECS-вузлів або публічні IP-адреси:
    • Увійдіть у ECS CLI та запустіть getrackinfo -n
Якщо у клієнта є поділ мережі, ви бачите IP для даних і repl від вищезазначеної команди. Запишіть IP-адреси даних вузлів.
Приклад:
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:
Приклад:
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 на вузлі ECS і перевірте наявність файлу нижче.
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 = ідентифікатор, встановлений раніше в об'єкті .s3curl файл "sample_user"
  • 9020 = TCP-порт, який використовується для підключення до 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. Перерахування вмісту конкретного відра.
  • Ключ в 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" (нижче читаються перші сім символів)
  • Діапазон: значення байтів включають:
Перші 500 байт: "байти 0-499/1234" Другі 500 байтів: "байти 500-999/1234" Усі, крім перших 500 байтів: "байти 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.

Примітка: Параметр налагодження можна використовувати для будь-якого з 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.