ECS: Come configurare e utilizzare l'AWS CLI S3
Summary: Quando si utilizza AWS CLI per testare lo scenario del cliente in cui AWS CLI utilizza ECS con ECS per confermare la funzionalità e la compatibilità, fare sempre riferimento alla Guida all'accesso ai dati ECS per le chiamate API supportate da ECS AWS S3. ...
Instructions
AWS Command-Line Interface (AWS CLI) è uno strumento di AWS che può essere utilizzato per testare i comandi di alto livello S3 e i comandi a livello di API s3 (s3api)
I comandi di alto livello, aws s3 (link esterno) supportano operazioni comuni sui bucket, come la creazione, l'elenco e l'eliminazione di bucket. Come scaricare e installare lo strumento, tutti i comandi di alto livello supportati possono essere ottenuti nel set di comandi utilizzando il comando aws s3api help.
URI S3: Rappresenta la posizione di un oggetto, prefisso o bucket S3: deve essere scritto nel formato s3://mybucket/mykey dove mybucket non è specificato il bucket S3, mykey è la chiave S3 specificata. L'argomento del percorso deve iniziare con s3://
I comandi aws s3api (link esterno) a livello di API sono contenuti nel set di suggerimenti s3api. Questi comandi API S3 forniscono l'accesso ai metadati del bucket, come ACL del bucket, policy del bucket, policy del ciclo di vita, solo per citarne alcuni. Tutte le chiamate API supportate possono essere ottenute nel set di comandi utilizzando il comando aws s3api help.
- AWS CLI utilizza automaticamente fino a 10 thread per caricare file o parti durante i caricamenti per impostazione predefinita
- AWS CLI utilizza automaticamente i caricamenti multipart_threshold per i file >= dimensioni del file di 8 MB, multipart_chunksize
Istruzioni per il download e l'installazione.
- Versioni https://github.com/aws/aws-cli/releases (Link esterno)
- Download e installazione del pacchetto AWS CLI
# curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- Estrai il bundle
# unzip awscli-bundle.zip
- Eseguire il comando di installazione
# sudo /awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
- Conferma versione
# aws version
Output: aws-cli/2.0.33 Python/3.7.3 Linux/4.15.0-109-generic botocore/2.0.0dev37
Configurazione di AWS CLI
In questa sezione vengono illustrati i passaggi di base per configurare AWS CLI per l'utilizzo con ECS S3 utilizzando l'utente dell'oggetto ECS. In questa sezione si presuppone che il bucket e l'utente dell'oggetto siano già stati creati in ECS. Le credenziali e il file di configurazione vengono aggiornati quando si esegue il comandoaws configure.
Il file delle credenziali si trova qui
~/.aws/credentials. Il file delle credenziali archivia i dettagli del profilo utente (ID della chiave di accesso e chiavi di accesso segrete), il file di configurazione archivia i dettagli della regione e del formato di output.
Obbligatorio:
- ID della chiave di accesso: Utente dell'oggetto ECS
- Chiave di accesso segreta: Chiave segreta
- In questo esempio viene creato un nome di profilo 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
- Elenca profili, tutti i profili (list-properties disponibili in AWS CLI 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
- Profilo specifico dell'elenco
# 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))
- Se si utilizzano comandi su 9021, l'opzione AWS CLI
--no-verify-sslè necessario ignorare l'errore del certificato autofirmato.
# 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)
- Eseguire il comando con
--no-verifyOpzione per ignorare questo errore
# 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
- La seconda opzione consiste nel scaricare il certificato autofirmato ECS salvato in formato PEM e utilizzando il
--ca-bundleopzione - Utilizzare OpenSSL per ottenere il certificato ECS per l'accesso ai dati degli object sulla porta 9021 e copiare il contenuto del certificato utilizzando l'editor preferito e salvare, incluse le intestazioni dei certificati come esempio riportato di seguito.
# openssl s_client -connect ecshop:9021
ecshop è l'IP o il nome host dei nodi ECS e xxxxxx deve essere l'intero certificato nell'ambiente.
Output: -----BEGIN CERTIFICATE----- Xxxxxxxxx xxxxxxxxx ... ... -----END CERTIFICATE-----
- Elenco dei bucket nella tabella Facile da usare con l'opzione ca-bundle in cui il certificato viene salvato nel nome del file 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 || |+-----------------------------------+---------------------+|
Operazioni S3 di base
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html (Link esterno)Ottimizzazione delle prestazioni
- max_concurrent_requests: il numero massimo di richieste simultanee
- max_queue_size - Il numero massimo di attività nella coda attività
- multipart_threshold: la soglia di dimensione utilizzata dalla CLI per i trasferimenti multiparte di singoli file.
- multipart_chunksize - Quando si utilizzano trasferimenti in più parti, questa è la dimensione del blocco utilizzata dalla CLI per i trasferimenti in più parti di singoli file.
- max_bandwidth: la larghezza di banda massima utilizzata per il caricamento e il download dei dati da e verso 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 = autoSe si utilizza
aws configure set Comando per impostare i parametri per regolare le velocità di upload
$ 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 autoProcedura:
- Creazione di bucket mediante
s3 mb.
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 mb s3://s3_bkt
Output:
make_bucket: s3_bkt
- Elencare i bucket utilizzando
s3 lses3api list-bucketsI set di comandi elencano i bucket, per qualsiasi altra operazione (indicata in S3 come "prefissi") (Link esterno) in un bucket
# 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"
},
- Creazione e caricamento di file per il test
- Esempio di creazione di file da 1 MB e 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
- Esempio di creazione di un file di grandi dimensioni da 2 GB
# dd if=/dev/urandom of=bigfile_2GB bs=1024k count=2048
- Carica un file da 1 MB nel bucket
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
- Elenca i file nel bucket,
s3_bktUtilizzo del nome del profilo mc_s3 utilizzo dis3 lsos3api list-objectsset di comandi
# 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" } },
- Elenco delle versioni degli oggetti
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-object-versions --bucket s3_bkt --output text
- Scaricare il file 1MB_output.file da
s3_bktalla directory /tmp sul computer locale.
# 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
- Controllare l'ACL di un file 1MB_output.file in formato YAML per l'output per la leggibilità
# 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
- Controllo dell'ACL del bucket nel bucket
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
- Controllare la versione del bucket o abilitare il controllo delle versioni nel bucket
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Avvio del caricamento di più parti utilizzando il livello API s3api con un file di grandi dimensioni
- Creare un file da 5 GB:
# time dd if=/dev/urandom of=bigfile_5GB bs=1024k count=5096
- Avvia caricamento
# 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"
}
- Elenco dei caricamenti di file multiparte incompleti https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-upload-cli/ (Link esterno)
# 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"
}
}
]
}
- Migliorare
s3 cpSuggerimenti sulle prestazioni da comando o bucket a bucket per file di grandi dimensioni per avviare caricamenti di più parti e modificare thread simultanei, vedere sopra in Ottimizzazione delle prestazioni.
- Eseguire la copia da bucket a bucket per copiare file.txt in
mc_s3_bktsus3_bktutilizzando 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"
}
}
- Elenco dei file (object o chiavi) in un bucket
# 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
- Copia di un file da
S3_bktsumc_s3_bktUtilizzo del set di comandi ad alto livello 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
- Verificare se il controllo delle versioni è abilitato nel bucket
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Eliminare il bucket utilizzando
s3 rbcommand (il comando non ha output)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 rm s3://s3_bkt2
- Nell'esempio seguente vengono eliminati tutti gli oggetti e le sottocartelle nel bucket, per poi rimuoverlo. (se il controllo delle versioni è abilitato, questo comando non rimuove gli oggetti della versione (rivedere LDS, Policy del ciclo di vita)
# aws s3 rb s3://bucket-name --force
- Abilitazione del controllo delle versioni nel bucket
s3_bktutilizzando il set di comandi a livello di API s3api (il comando non ha output)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-versioning --bucket s3_bkt --versioning-configuration Status=Enabled
- Applicazione della policy del ciclo di vita Generazione del template (consultare la Guida all'accesso ai dati di ECS) AWS CLI richiede il formato json per la policy del ciclo di vita
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-lifecycle-configuration --generate-cli-skeleton input --bucket s3_bkt
- Applicazione della policy di durata del bucket sul bucket. Per ulteriori dettagli, fare riferimento alla Guida all'accesso ai dati di ECS
AbortIncompleteMultipartUpload, NoncurrentVersionExpiration, and ExpiredObjectDeleteMarker and NoncurrentDays per scadere dopo 7 giorni.
# 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
}
}
]
}
- Policy del ciclo di vita 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
}
}
]
}
- Etichettatura degli object utilizzando una coppia chiave-valore
- Scrivere un file.
$ 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 (questo comando non genera output in caso di esito positivo.
Comando a riga singola:
$ 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
Copia e incolla su più righe:
$ 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
- Ottenere il tag dell'oggetto.
$ 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"
}
]
}
- Aggiunta di più valori di tag '
key:value' - Forma abbreviata
$ 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
- Ottenere il tag dell'oggetto.
$ 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"
}
]
}
- Blocco degli oggetti S3
- La funzione S3 Object Lock di ECS supporta solo i bucket abilitati per il controllo delle versioni.
- Non esiste un'interfaccia utente ECS per il blocco degli oggetti. È possibile accedervi tramite le API di ECS Object Lock.
- Gli oggetti bloccati sono protetti dalle eliminazioni del ciclo di vita
- Il bucket non può essere abilitato per il file system
- Il blocco degli object funziona con gli utenti IAM e non con gli utenti legacy
- Abilitazione del blocco degli oggetti nel bucket, abilitazione automatica del controllo delle versioni
- È necessaria una patch se ADO è abilitato e deve essere risolto in ECS 3.7. Consultare l'articolo ECS: Disabilitazione della funzione di blocco degli oggetti su ECS per IBM Content Manager
Per impostare il blocco di un oggetto in un bucket.
L'opzione di utilizzo dell'opzione put-object-lock-configuration viene utilizzata con l'AWS CLI.
Consultare: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lock-overview.html
put-object-lock-configuration — AWS CLI 1.22.24 Command Reference (amazon.com) (link esterno)
- Per impostare una configurazione di blocco degli oggetti in un bucket:
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 }}}'
Questo comando non genera alcun output.
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