ECS:S3 AWS CLIを構成して使用する方法
Summary: AWS CLIを使用してお客様のシナリオをテストする場合、お客様がECSでAWS CLIを使用して機能と互換性を確認する場合は、必ず『ECS AWS S3対応APIコールのECSデータ アクセス ガイド』を参照してください。
Instructions
AWS コマンドラインインターフェイス (AWS CLI) は、S3 の高レベルコマンドと s3 API レベル (s3api)
高レベルの aws s3 (外部リンク) をテストするために使用できる AWS のツールです。ツールをダウンロードしてインストールする方法。サポートされているすべての高レベル コマンドは、次のコマンドを使用してコマンド セットで取得できます。 aws s3api help.
S3Uri: S3オブジェクト、プレフィックス、またはバケットの場所を表します。これは次の形式で記述する必要があります。 s3://mybucket/mykey この名前に、 mybucket s3バケットが指定されている場合、 mykey は指定された S3 キーです。path 引数は、 s3://
API レベルの aws s3api (外部リンク) コマンドは、s3api コマンドセットに含まれています。これらのS3 APIコマンドは、バケットACL、バケット ポリシー、ライフサイクル ポリシーなどのバケット メタデータへのアクセスを提供します。サポートされているすべてのAPI呼び出しは、コマンドを使用してコマンド セットで取得できます。 aws s3api helpの詳細を確認してください。
- AWS CLIは、デフォルトでアップロード中にファイルまたはパーツをアップロードするために最大10個のスレッドを自動的に使用します
- AWS CLI は、ファイルサイズ >= 8 MB のファイルに対してmultipart_thresholdアップロードを自動的に使用しますmultipart_chunksize
手順をダウンロードしてインストールします。
- バージョンリリース https://github.com/aws/aws-cli/releases (外部リンク)
- AWS CLIバンドルをダウンロードしてインストールする
# 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 CLI の設定
このセクションでは、ECSオブジェクト ユーザーを使用して、ECS S3で使用するためにAWS CLIを設定する基本的な手順について説明します。このセクションでは、バケットとオブジェクト ユーザーがすでにECSに作成されていることを前提としています。コマンドを実行すると、認証情報と構成ファイルがアップデートされますaws configure.
認証情報ファイルは次の場所にあります。
~/.aws/credentialsの詳細を確認してください。認証情報ファイルには、ユーザー プロファイルの詳細(アクセス キーIDとシークレット アクセス キー)、構成ファイル、地域と出力形式の詳細が格納されます
必須:
- アクセス キー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 CLI v2 で使用可能な list-properties)
# 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 CLIオプション
--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
- 2つ目のオプションでは、PEM形式で保存されたECS自己署名証明書を
--ca-bundleオプション - OpenSSLを使用して、ポート9021でオブジェクト データ アクセス用のECS証明書を取得し、任意のエディターを使用して証明書の内容をコピーし、次の例のように証明書ヘッダーを含めて保存します。
# openssl s_client -connect ecshop:9021
ecshop はECSノードのIPまたはホスト名で、「xxxxxx」はご使用の環境内の証明書全体です。
Output: -----BEGIN CERTIFICATE----- Xxxxxxxxx xxxxxxxxx ... ... -----END CERTIFICATE-----
- 証明書がPEMファイル名ecshop_cert_pemに保存されているca-bundleオプションを使用して、人に対して優しいテーブル内のバケットを一覧表示します
# 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 (外部リンク)Performance tuning
- max_concurrent_requests - 同時リクエストの最大数
- max_queue_size - タスク キュー内のタスクの最大数
- multipart_threshold - CLIが個々のファイルのマルチパート転送に使用するサイズ閾値。
- multipart_chunksize:マルチパート転送を使用する場合、これはCLIが個々のファイルのマルチパート転送に使用するチャンク サイズです。
- 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-bucketsコマンド セットは、バケット内の他の操作(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 MBおよび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
- 2GBの大容量ファイルの作成の例
# dd if=/dev/urandom of=bigfile_2GB bs=1024k count=2048
- 1MBのファイルをバケットにアップロード
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_s3s3 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
- 出力の読みやすさのために、YAML形式のファイル 1MB_output.file のACLを確認します
# 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
- バケットのバケットACLを確認
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レベルを使用してマルチパート アップロードを開始する
- 5GBのファイルを作成します。
# 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_bktS3apiの使用
# 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_bktS3 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_bkts3api APIレベルのコマンドセットの使用(コマンドは出力されません)
# 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 Life Cycle 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
}
}
]
}
- キーと値のペアを使用したオブジェクトのタグ付け
- ファイルを書き込みます。
$ 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ユーザー インターフェイスはありません。ECSオブジェクト ロックAPIを介してアクセスできます。
- ロックされたオブジェクトはライフサイクルの削除から保護されます
- バケットをファイル システム対応にすることはできません
- オブジェクト ロックは、レガシー ユーザーではなくIAMユーザーに対して機能します
- バケットでオブジェクト ロックを有効にし、バージョン管理を自動的に有効化
- ADOが有効になっていて、ECS 3.7で対処される場合は、パッチが必要です。次の記事を参照してください:「ECS: ECS for IBM Content Managerでのオブジェクト ロック機能の無効化
バケットにオブジェクト ロックを設定するには
Use put-object-lock-configurationオプションは、AWS CLIで使用されます。
参照: 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