ECS: Jak nakonfigurovat a používat rozhraní příkazového řádku S3 AWS
Summary: Při použití rozhraní příkazového řádku AWS k testování scénářů zákazníků, kdy zákazníci používají rozhraní příkazového řádku AWS se systémem ECS k potvrzení funkčnosti a kompatibility, vždy si přečtěte příručku přístupu k datům systému ECS pro volání rozhraní API podporovaná řešením ECS AWS S3. ...
Instructions
AWS Command-Line Interface (AWS CLI) je nástroj od AWS, který lze použít k testování příkazů S3 na vysoké úrovni a s3 na úrovni rozhraní API (s3api)
Příkazy aws s3 (External Link) na vysoké úrovni podporují běžné operace kbelíku, jako je vytváření, výpis a odstraňování kbelíků. Jak stáhnout a nainstalovat nástroj, všechny podporované příkazy vysoké úrovně lze získat v sadě příkazů pomocí příkazu aws s3api help.
S3Uri: Představuje umístění objektu S3, předpony nebo kbelíku – musí být zapsáno ve formuláři s3://mybucket/mykey kde mybucket je t specifikován kbelík S3, mykey je zadaný klíč S3. Argument path musí začínat s3://
Příkazy aws s3api (External Link) na úrovni rozhraní API jsou obsaženy v sadě doporučení s3api. Tyto příkazy rozhraní API S3 poskytují přístup k metadatům kbelíku, jako je seznam ACL kbelíku, zásady kbelíku, zásady životního cyklu, abychom zmínili alespoň některé, všechna podporovaná volání rozhraní API lze získat v sadě příkazů pomocí příkazu aws s3api help.
- AWS CLI ve výchozím nastavení automaticky používá až 10 vláken k nahrání souborů nebo částí během nahrávání
- Rozhraní příkazového řádku AWS automaticky používá multipart_threshold nahrávání souborů >= velikost souboru 8 MB, multipart_chunksize
Pokyny ke stažení a instalaci.
- Verze verzí https://github.com/aws/aws-cli/releases (External Link)
- Stažení a instalace balíčku AWS CLI
# curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- Rozbalit balíček
# unzip awscli-bundle.zip
- Spusťte příkaz install
# sudo /awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
- Potvrďte verzi
# aws version
Output: aws-cli/2.0.33 Python/3.7.3 Linux/4.15.0-109-generic botocore/2.0.0dev37
Konfigurace rozhraní příkazového řádku AWS
V této části jsou vysvětleny základní kroky konfigurace rozhraní příkazového řádku AWS pro použití se systémem ECS S3 pomocí uživatele objektu ECS. V této části se předpokládá, že v systému ECS již byly vytvořeny kbelíky a uživatel objektu. Přihlašovací údaje a konfigurační soubor se aktualizují při spuštění příkazuaws configure.
Soubor s přihlašovacími údaji se nachází zde.
~/.aws/credentials. Soubor přihlašovacích údajů ukládá podrobnosti o profilu uživatele (ID přístupového klíče a tajné přístupové klíče), konfigurační soubor ukládá podrobnosti o oblasti a výstupním formátu.
Požadovaný:
- ID přístupového klíče: Uživatel objektu ECS
- Tajný přístupový klíč: Tajný klíč
- Tento příklad vytvoří název profilu 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
- Seznam profilů všech profilů (vlastnosti seznamu dostupné v rozhraní příkazového řádku AWS v2
# 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
- Profil specifický pro seznam
# 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))
- Pokud používáte příkazy na 9021, možnost AWS CLI
--no-verify-sslje vyžadován k obejití chyby certifikátu podepsaného držitelem.
# 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)
- Spustit příkaz pomocí
--no-verifymožnost obejít tuto chybu
# 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
- Druhou možností je stáhnout certifikát ECS podepsaný držitelem uložený ve formátu PEM a pomocí
--ca-bundlemožnost - Pomocí OpenSSL získejte certifikát ECS pro přístup k objektovým datům na portu 9021 a zkopírujte obsah certifikátu pomocí oblíbeného editoru a uložte jej včetně hlaviček certifikátů podle níže uvedeného příkladu.
# openssl s_client -connect ecshop:9021
ecshop je IP adresa uzlu ECS nebo název hostitele a xxxxxx by měl být celý certifikát ve vašem prostředí.
Output: -----BEGIN CERTIFICATE----- Xxxxxxxxx xxxxxxxxx ... ... -----END CERTIFICATE-----
- Vypište kbelíky v tabulce přátelské k člověku s možností ca-bundle, kde je certifikát uložen v souboru PEM s názvem 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 || |+-----------------------------------+---------------------+|
Základní operace S3
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html (External Link)Ladění výkonu
- max_concurrent_requests – maximální počet souběžných požadavků
- max_queue_size – maximální počet úloh ve frontě úloh
- multipart_threshold – Prahová hodnota velikosti, kterou rozhraní příkazového řádku používá pro přenosy jednotlivých souborů s více částmi.
- multipart_chunksize – Při použití přenosů s více částmi se jedná o velikost bloku, kterou rozhraní příkazového řádku používá pro přenosy jednotlivých souborů s více částmi.
- max_bandwidth – Maximální šířka pásma, která se spotřebuje na nahrávání a stahování dat do a ze služby 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 = autoPoužití
aws configure set Příkaz k nastavení parametrů pro ladění rychlosti odesílání
$ 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 autoPostup:
- Vytvořte kbelík pomocí
s3 mb.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 mb s3://s3_bkt
Output:
make_bucket: s3_bkt
- Výpis kbelíků pomocí
s3 lsas3api list-bucketsSady příkazů vypíše kbelíky pro všechny ostatní operace (označované v S3 jako 'prefixy') (externí odkaz) v kbelíku
# 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"
},
- Vytváření a nahrávání souborů pro testování
- Příklad vytvoření souborů o velikosti 1 MB a 4 MB
# dd if=/dev/zero of=1MB_output.file bs=1024 count=1024 # dd if=/dev/zero of=4MB_output.file bs=1024 count=4096
- Příklad vytvoření velkého souboru o velikosti 2 GB
# dd if=/dev/urandom of=bigfile_2GB bs=1024k count=2048
- Nahrání souboru o velikosti 1 MB do kbelíku
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
- Seznam souborů v kbelíku,
s3_bktPoužití názvu profilu mc_s3 pomocís3 lsnebos3api list-objectsSady příkazů
# 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" } },
- Výpis verzí objektů
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-object-versions --bucket s3_bkt --output text
- Stáhněte soubor 1MB_output.file z
s3_bktdo adresáře /tmp na místním počítači.
# 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
- Kontrola seznamu ACL souboru 1MB_output.file ve formátu YAML pro výstup z hlediska čitelnosti
# 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
- Kontrola seznamu ACL kbelíku na kbelíku
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
- Kontrola verze kbelíku nebo povolení správy verzí v kbelíku
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Zahájení nahrávání více částí pomocí úrovně rozhraní API s3api s velkým souborem
- Vytvořte soubor o velikosti 5 GB:
# time dd if=/dev/urandom of=bigfile_5GB bs=1024k count=5096
- Začít nahrávat
# 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"
}
- Seznam neúplných nahraných souborů s více částmi https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-upload-cli/ (externí odkaz)
# 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"
}
}
]
}
- Zlepšit
s3 cpDoporučení výkonu příkazu nebo kbelíku do kbelíku pro velké soubory k zahájení nahrávání s více částmi a změně souběžných vláken, viz výše v části Ladění výkonu.
- Provedením příkazu "bucket to bucket copy" zkopírujte file.txt do
mc_s3_bktnas3_bktpomocí 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"
}
}
- Výpis souborů (objektů nebo klíčů) v kbelíku
# 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
- Kopírování souboru z
S3_bktnamc_s3_bktPoužití sady příkazů S3 CP na vysoké úrovni
# 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
- Zkontrolujte, zda je v kbelíku povolená správa verzí.
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Odstraňte kbelík pomocí
s3 rbPříkaz (příkaz nemá výstup)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 rm s3://s3_bkt2
- Následující příklad odstraní všechny objekty a podsložky v kbelíku a pak tento kbelík odebere. (Pokud je povolena správa verzí, tento příkaz neodebere objekty verzí (kontrola LDS, zásady životního cyklu)
# aws s3 rb s3://bucket-name --force
- Povolení správy verzí v kbelíku
s3_bktPoužití sady příkazů na úrovni rozhraní API s3api (příkaz nemá výstup)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-versioning --bucket s3_bkt --versioning-configuration Status=Enabled
- Aplikování zásad životního cyklu Vygenerovat šablonu (Viz příručka přístupu k datům ECS) Rozhraní příkazového řádku AWS vyžaduje pro zásady životního cyklu formát JSON.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-lifecycle-configuration --generate-cli-skeleton input --bucket s3_bkt
- Použijte zásady životnosti kbelíku na kbelík. Další podrobnosti naleznete v příručce ECS Data Access Guide
AbortIncompleteMultipartUpload, NoncurrentVersionExpiration, and ExpiredObjectDeleteMarker and NoncurrentDays vyprší po 7 dnech.
# 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
}
}
]
}
- ZÍSKEJTE zásady životního cyklu
# 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
}
}
]
}
- Označování objektů pomocí páru klíč-hodnota
- Napište soubor.
$ 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
- Add tag (tento příkaz nemá výstup, pokud je úspěšný.
Jednořádkový příkaz:
$ 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
Víceřádkové kopírování a vkládání:
$ 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
- Získejte značku objektu.
$ 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"
}
]
}
- Přidání více hodnot proměnných '
key:value' - zkrácená forma
$ 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
- Získejte značku objektu.
$ 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"
}
]
}
- Zámek objektu S3
- Funkce uzamknutí objektu ECS S3 podporuje pouze kbelíky s povolenou správou verzí.
- Zámek objektu není k dispozici v uživatelském rozhraní ECS. Lze k němu přistupovat prostřednictvím rozhraní API zámku objektu ECS.
- Uzamčené objekty jsou chráněny před odstraněním životního cyklu
- Bucket nelze povolit, systém souborů může být povolen
- Zámek objektu funguje s uživateli IAM, nikoli se staršími uživateli
- Povolení zámku objektu na kbelíku, automatické povolení správy verzí
- Pokud je rozhraní ADO povoleno a je třeba jej řešit v systému ECS 3.7, je nutná oprava. Viz článek ECS: Zakázání funkce Object-lock v systému ECS pro správce obsahu IBM
Postup při nastavení zámku objektu na kbelíku.
Možnost Put put-object-lock-configuration se používá s rozhraním příkazového řádku AWS.
Viz: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html
put-object-lock-configuration — AWS CLI 1.22.24 Reference příkazů (amazon.com) (externí odkaz)
- Postup při nastavení konfigurace zámku objektu v kbelíku
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 }}}'
Tento příkaz nevytvoří žádný výstup.
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