ECS: Konfigurieren und Verwenden der S3 AWS-CLI
Summary: Wenn Sie die AWS-CLI verwenden, um Kundenszenarien zu testen, in denen sie die AWS-CLI mit ECS verwenden, um die Funktionalität und Kompatibilität zu bestätigen, lesen Sie immer den ECS-Datenzugriffsleitfaden für von ECS AWS S3 unterstützte API-Aufrufe. ...
Instructions
AWS Command-Line Interface (AWS CLI) ist ein Tool von AWS, das zum Testen von S3-Befehlen auf hoher Ebene und S3-Befehlen auf API-Ebene (s3api)
verwendet werden kann. So laden Sie das Tool herunter und installieren es. Alle unterstützten High-Level-Befehle können im Befehlssatz mithilfe des Befehls abgerufen werden aws s3api helpaus.
S3-URI: Stellt den Speicherort eines S3-Objekts, -Präfix oder -Buckets dar – Dies muss in folgender Form geschrieben werden s3://mybucket/mykey wobei mybucket ist kein angegebener S3-Bucket, mykey ist der angegebene S3-Schlüssel. Das path-Argument muss beginnen mit s3://
aws s3api-Befehle (externer Link) auf API-Ebene sind im s3api-Empfehlungssatz enthalten. Diese S3-API-Befehle bieten Zugriff auf Bucket-Metadaten, z. B. Bucket-ACL, Bucket-Policy, Lebenszyklus-Policies, um nur einige zu nennen. Alle unterstützten API-Aufrufe können im Befehlssatz mit dem Befehl abgerufen werden. aws s3api help.
- Die AWS-CLI verwendet standardmäßig automatisch bis zu 10 Threads, um Dateien oder Teile während des Uploads hochzuladen
- Die AWS-CLI verwendet automatisch multipart_threshold Uploads für Dateien >= 8 MB Dateigröße, multipart_chunksize
Herunterladen und Installieren von Anweisungen.
- Versionsversionen https://github.com/aws/aws-cli/releases (Externer Link)
- Herunterladen und Installieren des AWS-CLI-Bundles
# curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
- Bundle extrahieren
# unzip awscli-bundle.zip
- Führen Sie den Installationsbefehl aus.
# sudo /awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
- Version bestätigen
# aws version
Output: aws-cli/2.0.33 Python/3.7.3 Linux/4.15.0-109-generic botocore/2.0.0dev37
Konfigurieren der AWS-CLI
In diesem Abschnitt werden die grundlegenden Schritte zur Konfiguration der AWS-CLI für die Verwendung mit ECS S3 mithilfe des ECS-Objektnutzers erläutert. In diesem Abschnitt wird davon ausgegangen, dass der Bucket und der Objektnutzer bereits in ECS erstellt wurden. Die Zugangsdaten und die Konfigurationsdatei werden aktualisiert, wenn Sie den Befehl ausführenaws configureaus.
Die Datei mit den Zugangsdaten befindet sich hier.
~/.aws/credentials. In der Anmeldedatendatei werden Nutzerprofildetails (Zugriffsschlüssel-ID und geheime Zugriffsschlüssel) sowie in der Konfigurationsdatei Details zu Region und Ausgabeformat gespeichert.
Erforderlich:
- Zugriffsschlüssel-ID: ECS-Objektnutzer
- Geheimer Zugriffsschlüssel: Geheimer Schlüssel
- In diesem Beispiel wird ein Profilname 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
- Auflisten von Profilen aller Profile (list-properties verfügbar 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
- Listenspezifisches Profil
# 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))
- Bei Verwendung von Befehlen auf 9021, AWS-CLI-Option
--no-verify-sslist erforderlich, um den Fehler des selbstsignierten Zertifikats zu umgehen.
# 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)
- Führen Sie den Befehl mit
--no-verifyOption zur Umgehung dieses Fehlers
# 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
- Die zweite Möglichkeit besteht darin, das selbstsignierte ECS-Zertifikat herunterzuladen, das im PEM-Format gespeichert ist und das
--ca-bundleOption - Verwenden Sie OpenSSL, um das ECS-Zertifikat für den Objektdatenzugriff auf Port 9021 abzurufen und Zertifikatinhalte mit Ihrem bevorzugten Editor zu kopieren und einschließlich der Zertifikatheader zu speichern, wie im folgenden Beispiel gezeigt.
# openssl s_client -connect ecshop:9021
ecshop ist die IP-Adresse oder der Hostname des ECS-Nodes und xxxxxx sollte das gesamte Zertifikat in Ihrer Umgebung sein.
Output: -----BEGIN CERTIFICATE----- Xxxxxxxxx xxxxxxxxx ... ... -----END CERTIFICATE-----
- Auflisten von Buckets in der Tabelle Benutzerfreundlich mit CA-Bundle-Option, bei der das Zertifikat im PEM-Dateinamen-ecshop_cert_pem gespeichert wird
# 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 || |+-----------------------------------+---------------------+|
Grundlegende S3-Vorgänge
https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html (Externer Link)Performance-Tuning
- max_concurrent_requests – Die maximale Anzahl gleichzeitiger Anforderungen
- max_queue_size – Die maximale Anzahl von Aufgaben in der Aufgabenwarteschlange
- multipart_threshold – Der Größenschwellenwert, den die CLI für mehrteilige Übertragungen einzelner Dateien verwendet.
- multipart_chunksize – Bei Verwendung von mehrteiligen Übertragungen ist dies die Blockgröße, die von der CLI für mehrteilige Übertragungen einzelner Dateien verwendet wird.
- max_bandwidth – Die maximale Bandbreite, die für das Hoch- und Herunterladen von Daten zu und von Amazon S3 verbraucht wird.
# 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 = autoDie Verwendung von
aws configure set Befehl zum Festlegen von Parametern zum Anpassen der Uploadgeschwindigkeit
$ 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 autoSchritte:
- Erstellen von Buckets mithilfe von
s3 mbcommand
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 mb s3://s3_bkt
Output:
make_bucket: s3_bkt
- Auflisten von Buckets mithilfe von
s3 lsunds3api list-bucketsBefehlssätze listen Buckets für alle anderen Vorgänge (in S3 als "Präfixe" bezeichnet) auf (externer Link) in einem 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"
},
- Erstellen und Hochladen von Dateien zu Testzwecken
- Beispiel: Erstellen von Dateien mit 1 MB und 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
- Beispiel für das Erstellen einer großen Datei mit 2 GB
# dd if=/dev/urandom of=bigfile_2GB bs=1024k count=2048
- 1-MB-Datei in Bucket hochladen
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
- Dateien im Bucket auflisten,
s3_bktVerwenden des Profilnamens mc_s3 Verwenden vons3 lsoders3api list-objectsBefehlssätze
# 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" } },
- Auflisten von Objektversionen
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api list-object-versions --bucket s3_bkt --output text
- Laden Sie die Datei 1MB_output.file herunter von
s3_bktin das Verzeichnis /tmp auf dem lokalen Rechner.
# 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 einer Datei 1MB_output.file im YAML-Format auf Ausgabe auf Lesbarkeit überprüfen
# 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
- Bucket-ACL für Bucket überprüfen
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
- Überprüfen der Bucket-Version oder Aktivieren der Versionierung für den Bucket
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Initiieren eines mehrteiligen Uploads mithilfe der s3api-API-Ebene bei einer großen Datei
- Erstellen Sie eine 5-GB-Datei:
# time dd if=/dev/urandom of=bigfile_5GB bs=1024k count=5096
- Upload starten
# 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"
}
- Auflisten unvollständiger mehrteiliger Dateiuploads https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-upload-cli/ (externer Link)
# 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"
}
}
]
}
- Verbessern
s3 cpBefehls- oder Bucket-zu-Bucket-Leistungsempfehlungen für große Dateien zum Initiieren mehrteiliger Uploads und Ändern gleichzeitiger Threads, siehe oben unter Leistungsoptimierung.
- Durchführen einer Bucket-zu-Bucket-Kopie zum Kopieren file.txt in
mc_s3_bktans3_bktVerwenden von 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"
}
}
- Auflisten von Dateien (Objekten oder Schlüsseln) in einem 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
- Kopieren einer Datei aus
S3_bktanmc_s3_bktVerwenden des allgemeinen S3 CP-Befehlssatzes
# 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
- Überprüfen, ob die Versionierung für Buckets aktiviert ist
s3_bkt
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api get-bucket-versioning --bucket s3_bkt
Output:
{
"Status": "Enabled"
}
- Löschen eines Buckets mithilfe von
s3 rbBefehl (Befehl hat keine Ausgabe)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3 rm s3://s3_bkt2
- Im folgenden Beispiel werden alle Objekte und Unterordner im Bucket gelöscht und anschließend der Bucket entfernt. (Wenn die Versionierung aktiviert ist, werden mit diesem Befehl keine Versionsobjekte entfernt (siehe LDS, Lebenszyklusrichtlinien.)
# aws s3 rb s3://bucket-name --force
- Aktivieren der Versionierung für Buckets
s3_bktVerwenden des s3api-Befehlssatzes auf API-Ebene (Befehl hat keine Ausgabe)
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-versioning --bucket s3_bkt --versioning-configuration Status=Enabled
- Anwenden der Lebenszyklus-Policy Vorlage erstellen (siehe ECS-Datenzugriffshandbuch) AWS CLI erfordert das JSON-Format für die Lebenszyklus-Policy
# aws --profile mc_s3 --endpoint http://ecshop:9020 s3api put-bucket-lifecycle-configuration --generate-cli-skeleton input --bucket s3_bkt
- Anwenden der Bucket-Lebensdauer-Policy auf Bucket. Weitere Informationen finden Sie im ECS-Leitfaden für den Datenzugriff.
AbortIncompleteMultipartUpload, NoncurrentVersionExpiration, and ExpiredObjectDeleteMarker and NoncurrentDays nach 7 Tagen ablaufen.
# 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-Lebenszyklus-Policy
# 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
}
}
]
}
- Objekttagging mithilfe eines Schlüssel-Wert-Paars
- Schreiben Sie eine Datei.
$ 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
- Tag hinzufügen (dieser Befehl hat keine Ausgabe, wenn er erfolgreich war.
Einzeiliger Befehl:
$ 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
Mehrzeiliges Kopieren und Einfügen:
$ 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
- Rufen Sie das Objekt-Tag ab.
$ 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"
}
]
}
- Hinzufügen mehrerer Tag-Werte '
key:value' - Kurzform
$ 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
- Rufen Sie das Objekt-Tag ab.
$ 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-Objektsperre
- Die ECS S3-Objektsperrfunktion unterstützt nur Buckets mit aktivierter Versionierung.
- Es gibt keine ECS-Benutzeroberfläche für Objektsperren. Der Zugriff erfolgt über ECS-Object-Lock-APIs.
- Die gesperrten Objekte sind vor Lebenszykluslöschungen geschützt
- Bucket kann nicht für das Dateisystem aktiviert sein
- Objektsperre funktioniert mit IAM-Nutzern und nicht mit Legacy-Nutzern
- Aktivieren der Objektsperre für den Bucket, automatisches Aktivieren der Versionierung
- Ein Patch ist erforderlich, wenn ADO aktiviert ist und in ECS 3.7 behoben werden soll. Siehe Artikel ECS: Deaktivieren der Objektsperrfunktion in ECS für IBM Content Manager
So legen Sie eine Objektsperre für einen Bucket fest.
Die Option "Use put-object-lock-configuration" wird mit der AWS-CLI verwendet.
Siehe: 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) (externer Link)
- So legen Sie eine Objektsperrkonfiguration für einen Bucket fest
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 }}}'
Mit diesem Befehl wird keine Ausgabe erzeugt.
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