ECS. Как выполнять основные операции 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 и выполните
getrackinfo -n
- Войдите в интерфейс командной строки ECS и выполните
Если клиент имеет разделение сети, вы увидите IP-адреса для данных и ответите с помощью указанной выше команды. Запишите 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
Действия
- Перейти в каталог
/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
- Если файл не существует, создайте его со следующим содержимым. ["
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>',)
);
- Вы можете добавить несколько пользователей в этот файл, как показано ниже.
%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>',)
);
- Изменение прав доступа к файлам.
# sudo chmod 755 s3curl.pl # sudo chmod 600 .s3curl
Использование s3curl.pl после настройки
- Проверка подлинности пользователя и создание списка контейнеров, принадлежащих этому пользователю. »
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>
- Вывод списка содержимого конкретного контейнера.
- Ключ в 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>
- Выполняется поиск определенного ключа или файла в контейнере.
- Используйте метод поиска по префиксу для поиска определенных файлов, если известно начало имени файла.
- Вставьте метод после имени контейнера "
?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>
- Чтение определенного ключа или файла в контейнере.
Примечание. Если ключ или контейнер содержит пробел в своем имени, используйте строку "
%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
- Запись определенного ключа или файла в контейнер.
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
- Считывание метаданных определенного ключа или файла в контейнере.
HTTP/1.1 200 OK--> Специфический HTTP-ответ на запросx-amz-request-id-->request_idкоторые можно отслеживать в журналах ECSETag--> 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
- Чтобы создать новый контейнер для пользователя, выполните следующие действия.
# 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>
- Скачивание определенного ключа или файла из контейнера на узел 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
- Удаление определенного ключа или файла из контейнера, принадлежащего пользователю.
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"
- Удаление контейнеров, принадлежащих пользователю.
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>
- Частичное чтение файла с помощью заголовка «byte: range» (считываются первые семь символов)
- Диапазон: значения байтов включают:
Первые 500 байт: "bytes 0-499/1234" Вторые 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
- Загрузка пакета файлов или ключей в определенный контейнер.
- Создайте файл примера.
# 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
- Запись файла с пробелом или специальным символом
- Запись файла с пробелом под названием «
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 StorageProducts
Elastic Cloud StorageArticle 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.