ECS. Настройка и использование интерфейса командной строки S3 AWS
Summary: При использовании интерфейса командной строки AWS для тестирования сценариев клиентов, в которых они используют интерфейс командной строки AWS с ECS для подтверждения функциональности и совместимости, всегда сверяйтесь с руководством по доступу к данным ECS для вызовов API AWS S3 с поддержкой ECS. ...
Instructions
AWS Command-Line Interface (AWS CLI) – это инструмент от AWS, который можно использовать для тестирования высокоуровневых команд S3 и высокоуровневых команд s3 API-уровня (s3API)Высокоуровневые
, команды aws s3 (внешняя ссылка) поддерживают распространенные операции с контейнерами, такие как создание, перечисление и удаление контейнеров. Как скачать и установить инструмент, все поддерживаемые команды высокого уровня можно получить в наборе команд с помощью команды aws s3api help.
S3Uri: Представляет расположение объекта, префикса или контейнера S3 — это должно быть записано в следующем виде: s3://mybucket/mykey В это имя mybucket указан контейнер S3, mykey — указанный ключ S3. Аргумент path должен начинаться с s3://
Команды aws s3api (внешняя ссылка) на уровне API содержатся в наборе рекомендаций s3api. Эти команды API S3 предоставляют доступ к метаданным контейнера, таким как список контроля доступа контейнера, политика контейнера, политики жизненного цикла и многое другое. Все поддерживаемые вызовы API можно получить в наборе команд с помощью команды aws s3api help.
- По умолчанию интерфейс командной строки AWS автоматически использует до 10 потоков для загрузки файлов или частей
- Интерфейс командной строки AWS автоматически использует multipart_threshold загрузок для файлов >= размер файла 8 Мбайт, multipart_chunksize
Скачайте инструкции и выполните установку.
- Версии выпусков https://github.com/aws/aws-cli/releases (внешняя ссылка)
- Загрузка и установка пакета интерфейса командной строки AWS
# curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- Извлечение пакета
# unzip awscli-bundle.zip
- Выполните команду установки
# sudo /awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
- Подтвердить версию
# aws version
Output: aws-cli/2.0.33 Python/3.7.3 Linux/4.15.0-109-generic botocore/2.0.0dev37
Настройка интерфейса командной строки AWS
В этом разделе описаны основные шаги по настройке интерфейса командной строки AWS для использования с ECS S3 с помощью пользователя объекта ECS. В этом разделе предполагается, что пользователь контейнера и объекта уже создан в ECS. Учетные данные и файл конфигурации обновляются при выполнении командыaws configure.
Файл учетных данных находится здесь
~/.aws/credentials. В файле учетных данных хранятся сведения о профиле пользователя (идентификатор ключа доступа и секретные ключи доступа), а в файле конфигурации — сведения о регионе и формате вывода.
Обязательно:
- ID ключа доступа: Пользователь объекта ECS
- Секретный ключ доступа: Секретный ключ
- В данном примере создается имя профиля mc_s3
# aws configure --profile mc_s3
Prompt:
AWS Access Key ID [None]: mc_s3
AWS Secret Access Key [None]: 1guFemRLSgqFau6uKzIVAZJu5+PS+S8qO7rvEsi7
Default region name [None]:
Default output format [None]: json
- Выводит список профилей всех профилей (свойства-списки, доступные в интерфейсе командной строки AWS версии 2).
# aws configure list-properties
Output:
mc_s3
ad_uid1
# aws configure list
Output: Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key ****************c_s3 shared-credentials-file secret_key ****************Esi7 shared-credentials-file region config-file ~/.aws/config
- Профиль для конкретного списка
# aws configure get aws_access_key_id --profile mc_s3
Output:
mc_s3
Dealing with SSL connections and error on self signed certificate. ( [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1056))
- При использовании команд 9021 параметр интерфейса командной строки AWS
--no-verify-sslтребуется для обхода ошибки самозаверяющего сертификата.
# aws --profile mc_s3 --endpoint=https://ecshop:9021 s3api list-buckets
Output:
SSL validation failed for https://ecshop:9021/mc_s3_bkt?acl [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1056)
- Выполните команду с помощью команды
--no-verifyВозможность обойти эту ошибку
# aws --profile mc_s3 --endpoint=https://ecshop:9021 s3api list-buckets --no-verify-ssl --output text
Output: /usr/local/aws-cli/v2/2.0.33/dist/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'ecshop'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings BUCKETS 2020-02-24T21:24:29.440000+00:00 mc_s3_bkt BUCKETS 2020-05-06T17:23:48.870000+00:00 mc_s3_bkt2_backup BUCKETS 2020-05-06T21:16:13.344000+00:00 mc_s3_bkt_nfs OWNER mc_s3 mc_s3
- Второй вариант — скачать самозаверяющий сертификат ECS, сохраненный в формате PEM, и использовать метод
--ca-bundleвыбор - Используйте OpenSSL для получения сертификата ECS для доступа к объектным данным через порт 9021, скопируйте содержимое сертификата с помощью своего любимого редактора и сохраните, включая заголовки сертификатов, как показано ниже.
# openssl s_client -connect ecshop:9021
ecshop — IP-адрес или имя хоста узла ECS, а xxxxxx должен быть полным сертификатом в вашей среде.
Output: -----BEGIN CERTIFICATE----- Xxxxxxxxx xxxxxxxxx ... ... -----END CERTIFICATE-----
- Вывод списка контейнеров в таблицу понятен человеку с параметром ca-bundle, где сертификат сохраняется в имени файла PEM ecshop_cert_pem
# aws --profile mc_s3 --endpoint=https://ecshop:9021 s3api list-buckets --ca-bundle ecshop_cert.pem --output table
Output: ------------------------------------------------------------- | ListBuckets | +-----------------------------------------------------------+ || Buckets || |+-----------------------------------+---------------------+| || CreationDate | Name || |+-----------------------------------+---------------------+| || 2020-02-24T21:24:29.440000+00:00 | mc_s3_bkt || || 2020-05-06T17:23:48.870000+00:00 | mc_s3_bkt2_backup || || 2020-05-06T21:16:13.344000+00:00 | mc_s3_bkt_nfs || |+-----------------------------------+---------------------+| || Owner || |+-----------------------------------+---------------------+| || DisplayName | ID || |+-----------------------------------+---------------------+| || mc_s3 | mc_s3 || |+-----------------------------------+---------------------+|
Основные операции S3
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html (External Link)Настройка производительности
- max_concurrent_requests — максимальное количество одновременных запросов
- max_queue_size - Максимальное количество задач в очереди задач
- multipart_threshold — пороговое значение размера, используемое интерфейсом командной строки для составной передачи отдельных файлов.
- multipart_chunksize — при использовании составной передачи это размер фрагмента, который интерфейс командной строки использует для составной передачи отдельных файлов.
- max_bandwidth – максимальная пропускная способность, используемая для загрузки и скачивания данных в Amazon S3 и обратно.
# cat .aws/config
Output: [profile mc_s3] output = json s3 = endpoint_url = http://ecshop:9020 max_concurrent_requests = 20 max_queue_size = 1000 multipart_threshold = 64MB multipart_chunksize = 16MB max_bandwidth = 50MB/s addressing_style = autoИспользование
aws configure set Команда для установки параметров для настройки скорости отдачи
$ aws configure set default.s3.max_concurrent_requests 20 $ aws configure set default.s3.max_queue_size 10000 $ aws configure set default.s3.multipart_threshold 64MB $ aws configure set default.s3.multipart_chunksize 16MB $ aws configure set default.s3.max_bandwidth 50MB/s $ aws configure set default.s3.addressing_style autoДействия
- Создание контейнера с помощью
s3 mb.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 mb s3://s3_bkt
Output:
make_bucket: s3_bkt
- Вывод списка контейнеров с помощью
s3 lsиs3api list-bucketscommand sets перечисляет контейнеры для любых других операций (называемых в S3 'префиксами') (внешняя ссылка) в контейнере
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 ls
Output:
2020-07-29 20:34:24 s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-buckets
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-buckets
Output:
aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-buckets
{
"Buckets": [
{
"Name": "mc_s3_bkt",
"CreationDate": "2020-02-24T21:24:29.440000+00:00"
},
{
"Name": "mc_s3_bkt2_backup",
"CreationDate": "2020-05-06T17:23:48.870000+00:00"
},
{
"Name": "mc_s3_bkt_nfs",
"CreationDate": "2020-05-06T21:16:13.344000+00:00"
},
{
"Name": "s3_bkt",
"CreationDate": "2020-07-30T00:34:24.147000+00:00"
},
- Создание и загрузка файлов для тестирования
- Пример создания файлов размером 1 Мбайт и 4 Мбайт
# dd if=/dev/zero of=1MB_output.file bs=1024 count=1024 # dd if=/dev/zero of=4MB_output.file bs=1024 count=4096
- Пример создания файла большого размера 2 Гбайт
# dd if=/dev/urandom of=bigfile_2GB bs=1024k count=2048
- Загрузка файла размером 1 Мбайт в контейнер
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 cp 1MB_output.file s3://s3_bkt
Output:
upload: ./1MB_output.file to s3://s3_bkt/1MB_output.file
- Вывод списка файлов в контейнер,
s3_bktИспользование имени профиля mc_s3 использованиеs3 lsилиs3api list-objectsНаборы команд
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 ls s3://s3_bkt
Output: 2020-07-29 20:39:43 16.0 MiB 16MB_output.file 2020-07-29 20:37:25 1.0 MiB 1MB_output.file 2020-07-29 20:39:23 4.0 MiB 4MB_output.file
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-objects --bucket s3_bkt Output: { "Contents": [ { "Key": "16MB_output.file", "LastModified": "2020-07-30T00:39:43.125000+00:00", "ETag": "\"3a2d20e2e504fe056bbaae5b4c2351fd-2\"", "Size": 16777216, "StorageClass": "STANDARD", "Owner": { "DisplayName": "mc_s3", "ID": "mc_s3" } }, { "Key": "1MB_output.file", "LastModified": "2020-07-30T00:37:25.033000+00:00", "ETag": "\"b6d81b360a5672d80c27430f39153e2c\"", "Size": 1048576, "StorageClass": "STANDARD", "Owner": { "DisplayName": "mc_s3", "ID": "mc_s3" } },
- Вывод списка версий объекта
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-object-versions --bucket s3_bkt --output text
- Скачайте файл 1MB_output.file с
s3_bktв каталог /tmp на локальном компьютере.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 cp s3://s3_bkt/1MB_output.file /tmp/
Output:
download: s3://s3_bkt/1MB_output.file to ../../tmp/1MB_output.file
- Проверьте ACL файла 1MB_output.file в формате YAML для вывода для удобства чтения.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-object-acl --bucket s3_bkt --key 1MB_output.file --output yaml
Output: Grants: - Grantee: DisplayName: mc_s3 ID: mc_s3 Type: CanonicalUser Permission: FULL_CONTROL Owner: DisplayName: mc_s3 ID: mc_s3
- Проверьте список контроля доступа контейнера в контейнере
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-acl --bucket s3_bkt --output yaml
Output: Grants: - Grantee: DisplayName: mc_s3 ID: mc_s3 Type: CanonicalUser Permission: FULL_CONTROL Owner: DisplayName: mc_s3 ID: mc_s3
- Проверьте версию контейнера или включите управление версиями для контейнера
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Запуск составной загрузки с использованием уровня s3api API с большим файлом
- Создайте файл размером 5 ГБ:
# time dd if=/dev/urandom of=bigfile_5GB bs=1024k count=5096
- Начать загрузку
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api create-multipart-upload --bucket s3_bkt --key bigfile_5GB
Output:
{
"Bucket": "s3_bkt",
"Key": "bigfile_5GB",
"UploadId": "27cb6c45ab5c4c838fb5893263d871d3"
}
- Вывод списка незавершенных загрузок составных файлов https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-upload-cli/ (внешняя ссылка)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-multipart-uploads --bucket s3_bkt
Output:
{
"Uploads": [
{
"UploadId": "27cb6c45ab5c4c838fb5893263d871d3",
"Key": "bigfile_5GB",
"Initiated": "2020-07-31T01:10:56.323000+00:00",
"StorageClass": "STANDARD",
"Owner": {
"DisplayName": "mc_s3",
"ID": "mc_s3"
}
}
]
}
- Улучшать
s3 cpРекомендации по производительности команд или контейнеров в контейнеры для больших файлов, чтобы инициировать составную загрузку и изменение параллельных потоков, см. выше в разделе Настройка производительности.
- Выполните копирование из контейнера в контейнер, чтобы скопировать file.txt в
mc_s3_bktнаs3_bktс использованием S3api
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api copy-object --copy-source mc_s3_bkt/file.txt --key file.txt --bucket s3_bkt
Output:
{
"VersionId": "1596159769267",
"CopyObjectResult": {
"ETag": "\"c789e490a90359de2bd3b09d7e957cfd-128\"",
"LastModified": "2020-07-31T01:42:49.267000+00:00"
}
}
- Вывод списка файлов (объектов или ключей) в контейнере
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 ls s3://s3_bkt/file.txt --human-readable summarize
Output:
2020-07-30 21:42:49 1.0 GiB file.txt
- Копирование файла из
S3_bktнаmc_s3_bktИспользование набора команд верхнего уровня S3 CP
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 cp s3://s3_bkt/file.txt s3://mc_s3_bkt/file2.txt
Output: copy: s3://s3_bkt/file.txt to s3://mc_s3_bkt/file2.txt
- Проверьте, включено ли управление версиями для контейнера
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Удаление контейнера с помощью
s3 rbcommand (команда не имеет выходных данных)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 rm s3://s3_bkt2
- В следующем примере удаляются все объекты и вложенные папки в контейнере, а затем контейнер удаляется. (Если управление версиями включено, эта команда не удаляет объекты версий (см. LDS, политики жизненного цикла)
# aws s3 rb s3://bucket-name --force
- Включение управления версиями для контейнера
s3_bktс использованием набора команд уровня API s3API (команда не вывела данные)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-versioning --bucket s3_bkt --versioning-configuration Status=Enabled
- Применение политики жизненного цикла Создать шаблон (см. руководство по доступу к данным ECS) Для политики жизненного цикла AWS CLI требуется формат JSON
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-lifecycle-configuration --generate-cli-skeleton input --bucket s3_bkt
- Применение политики срока службы контейнера к контейнеру. Для получения дополнительной информации см. Руководство по доступу к данным ECS
AbortIncompleteMultipartUpload, NoncurrentVersionExpiration, and ExpiredObjectDeleteMarker and NoncurrentDays Срок действия истекает через 7 дней.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-lifecycle --bucket s3_bkt --lifecycle-configuration file://s3_bkt_lifecycle.json
Output:
{
"Rules": [
{
"ID": "expire-non-current-and-dmarkers-and-mpu",
"Status": "Enabled",
"Prefix": "/",
"Expiration": {
"ExpiredObjectDeleteMarker": true
},
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
},
"NoncurrentVersionExpiration": {
"NoncurrentDays": 7
}
}
]
}
- Политика жизненного цикла GET
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-lifecycle --bucket s3_bkt
Output:
{
"Rules": [
{
"Expiration": {
"Days": 10
},
"ID": "DeleteVersion-musa",
"Prefix": "",
"Status": "Enabled",
"NoncurrentVersionExpiration": {
"NoncurrentDays": 10
}
}
]
}
- Маркировка объектов с помощью пары "ключ-значение"
- Запишите файл.
$ aws s3 cp file.txt s3://mc_s3_bkt/aws/tag.txt --profile mc_s3_emea --endpoint http://emea:9020
upload: ./file.txt to s3://mc_s3_bkt/aws/tag.txt
- Добавить тег (эта команда не будет выведена в случае успеха.
Однострочная команда:
$ aws s3api put-object-tagging --profile mc_s3_emea --bucket mc_s3_bkt --key aws/tag.txt --tagging '{"TagSet": [{ "Key": "Product", "Value": "ECS" }]}' --endpoint-url http://emea:9020
Многострочный копирование и вставка:
$ aws s3api put-object-tagging \
--profile mc_s3_emea \
--bucket mc_s3_bkt \
--key aws/tag.txt \
--tagging '{"TagSet": [{ "Key": "Product", "Value": "ECS" }]}' \
--endpoint-url http://emea:9020
- Получите тег объекта.
$ aws s3api get-object-tagging --profile mc_s3_emea --bucket mc_s3_bkt --key aws/tag.txt --endpoint http://emea:9020
{
"TagSet": [
{
"Key": "Product",
"Value": "ECS"
}
]
}
- Добавление нескольких значений тегов '
key:value' - краткая форма
$ aws s3api put-object-tagging --profile mc_s3_emea --bucket mc_s3_bkt --key aws/tag5.txt --tagging '{"TagSet": [{ "Key": "Product", "Value": "ECS 3.6.1.2" },{"Key": "Company", "Value": "Dell Technologies"}]}' --endpoint-url http://emea:9020
- Получите тег объекта.
$ aws s3api get-object-tagging --profile mc_s3_emea --bucket mc_s3_bkt --key aws/tag5.txt
{
"TagSet": [
{
"Key": "Product",
"Value": "ECS 3.6.1.2"
},
{
"Key": "Company",
"Value": "Dell Technologies"
}
]
}
- Блокировка объекта S3
- Функция блокировки объектов ECS S3 поддерживает только контейнеры с поддержкой управления версиями.
- Для блокировки объекта отсутствует пользовательский интерфейс ECS. Доступ к нему можно получить через API-интерфейсы блокировки объектов ECS.
- Заблокированные объекты защищены от удаления в рамках жизненного цикла
- Контейнер не может быть включен в файловую систему
- Блокировка объектов работает с пользователями IAM, а не с устаревшими пользователями
- Включение блокировки объектов для контейнера, автоматическое включение управления версиями
- Если функция ADO включена и должна быть устранена в ECS 3.7, требуется исправление. См. статью ECS. Отключение функции блокировки объектов в ECS для IBM Content Manager
Установка блокировки объекта для контейнера.
Параметр use put-object-lock-configuration используется в интерфейсе командной строки AWS.
См.: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html
put-object-lock-configuration — Справочник по командам AWS CLI 1.22.24 (amazon.com) (внешняя ссылка)
- Чтобы задать конфигурацию блокировки объектов для контейнера, выполните следующие действия.
The following put-object-lock-configuration example sets a 1-day object lock on the specified bucket.
$ aws s3api put-object-lock-configuration \
--profile iam1 \
--bucket iam-bucket \
--object-lock-configuration '{ "ObjectLockEnabled": "Enabled", "Rule": { "DefaultRetention": { "Mode": "COMPLIANCE", "Days": 1 }}}'
Эта команда не возвращает никаких выходных данных.
put-object-legal-hold
$ aws s3api put-object-legal-hold --endpoint http://<hostname>:<port_number> --profile iam1 --bucket iam-bucket --key file1.txt --legal-hold "Status=ON" where: --profile: name of profile is profile confirmed in .aws credentials file --bucket: Bucket name --key: Object name --legal-hold: ON or OFF --version-id: specifies the version id of the object for Versioned --endpoint: ECS IP and port 9020 or 90201
get-object-legal-hold
$ aws s3api get-object-legal-hold --endpoint http://<hostname>:<port_number> --profile iam1 --bucket iam-bucket --key file1.txt where: --bucket: Bucket name --key: Object name --version-id: specifies the version id of the object --endpoint: ECS IP and port 9020 or 90201