使用 AWS CLI

AWS 的正式指令行介面與 IBM Cloud® Object Storage S3 API 相容。

它以 Python 撰寫,可以透過 pip install awscli 從 Python Package Index 進行安裝。 依預設,存取金鑰是從 ~/.aws/credentials 讀取,但也可以設為環境變數。

這些範例是使用 CLI V1.14.2 產生的。 若要檢查已安裝的版本,請執行 aws --version。

配置 CLI 以連接至 Object Storage

若要配置 AWS CLI,請鍵入 aws configure。 提供 HMAC 認證和預設地區名稱。 AWS S3 使用的「地區名稱」對應於 Object Storage 用來定義儲存空間類別的代碼 (LocationConstraint)。

可以在 儲存空間類別手冊 中參照 LocationConstraint 的有效代碼清單。

aws configure
AWS Access Key ID [None]: {Access Key ID}
AWS Secret Access Key [None]: {Secret Access Key}
Default region name [None]: {Provisioning Code}
Default output format [None]: json

這會建立兩個檔案:

~/.aws/credentials:

[default]
aws_access_key_id = {Access Key ID}
aws_secret_access_key = {Secret Access Key}

~/.aws/config:

[default]
region = {Provisioning Code}
output = json

您也可以使用環境變數來設定 HMAC 認證:

export AWS_ACCESS_KEY_ID="{Access Key ID}"
export AWS_SECRET_ACCESS_KEY="{Secret Access Key}"

IBM COS 端點必須使用 --endpoint-url 選項來取得,而且無法在 credentials 檔中設定。

高階語法指令

簡式使用案例可以使用 aws --endpoint-url {endpoint} s3 <command> 來達成。 如需端點的相關資訊,請參閱端點及儲存空間位置。 管理物件時,可使用您熟悉的 Shell 指令,例如 ls、mv、cp 和 rm。 儲存區可以使用 mb 來建立,並使用 rb 予以刪除。

列出服務實例內的所有儲存區

aws --endpoint-url {endpoint} s3 ls
2016-09-09 12:48  s3://bucket-1
2016-09-16 21:29  s3://bucket-2

列出儲存區內的物件

aws --endpoint-url {endpoint} s3 ls s3://bucket-1
2016-09-28 15:36       837   s3://bucket-1/c1ca2-filename-00001
2016-09-09 12:49       533   s3://bucket-1/c9872-filename-00002
2016-09-28 15:36     14476   s3://bucket-1/98837-filename-00003
2016-09-29 16:24     20950   s3://bucket-1/abfc4-filename-00004

建立新的儲存區

附註: 個人識別資訊 (PII): 當 命名 儲存區或物件時,請勿使用可依名稱、位置或任何其他方法來識別任何使用者 (自然人) 的任何資訊。

如果 ~/.aws/config 檔案中的預設地區對應於與所選擇端點相同的位置,則儲存區建立作業是直接明確的。

aws --endpoint-url {endpoint} s3 mb s3://bucket-1
make_bucket: s3://bucket-1/

將物件新增至儲存區

aws --endpoint-url {endpoint} s3 cp large-dataset.tar.gz s3://bucket-1
upload: ./large-dataset.tar.gz to s3://bucket-1/large-dataset.tar.gz

您也可以設定不同於檔案名稱的新物件金鑰:

aws --endpoint-url {endpoint} s3 cp large-dataset.tar.gz s3://bucket-1/large-dataset-for-project-x
upload: ./large-dataset.tar.gz to s3://bucket-1/large-dataset-for-project-x

將物件從某個儲存區複製到相同地區內的另一個儲存區:

$ aws --endpoint-url {endpoint} s3 cp s3://bucket-1/new-file s3://bucket-2/
copy: s3://bucket-1/new-file to s3://bucket-2/new-file

從儲存區刪除物件

aws --endpoint-url {endpoint} s3 rm s3://mybucket/argparse-1.2.1.tar.gz
delete: s3://mybucket/argparse-1.2.1.tar.gz

移除儲存區

aws --endpoint-url {endpoint} s3 rb s3://bucket-1
remove_bucket: s3://bucket-1/

建立預先簽署的 URL

CLI 可以建立預先簽署的 URL。 這些 URL 容許暫時的物件公用存取權,而不會變更任何現有存取控制措施。

$ aws --endpoint-url {endpoint} s3 presign s3://bucket-1/new-file

您也可以設定 URL 的存活時間(以秒為單位,預設值為 3600):

$ aws --endpoint-url {endpoint} s3 presign s3://bucket-1/new-file --expires-in 600

低階語法指令

AWS CLI 也容許透過使用 s3api 指令,提供與直接 HTTP 要求相同回應的直接 API 呼叫。

列出儲存區:

$ aws --endpoint-url {endpoint} s3api list-buckets
{
    "Owner": {
        "DisplayName": "{storage-account-uuid}",
        "ID": "{storage-account-uuid}"
    },
    "Buckets": [
        {
            "CreationDate": "2016-09-09T12:48:52.442Z",
            "Name": "bucket-1"
        },
        {
            "CreationDate": "2016-09-16T21:29:00.912Z",
            "Name": "bucket-2"
        }
    ]
}

列出儲存區內的物件

$ aws --endpoint-url {endpoint} s3api list-objects --bucket bucket-1
{
    "Contents": [
        {
            "LastModified": "2016-09-28T15:36:56.807Z",
            "ETag": "\"13d567d518c650414c50a81805fff7f2\"",
            "StorageClass": "STANDARD",
            "Key": "c1ca2-filename-00001",
            "Owner": {
                "DisplayName": "{storage-account-uuid}",
                "ID": "{storage-account-uuid}"
            },
            "Size": 837
        },
        {
            "LastModified": "2016-09-09T12:49:58.018Z",
            "ETag": "\"3ca744fa96cb95e92081708887f63de5\"",
            "StorageClass": "STANDARD",
            "Key": "c9872-filename-00002",
            "Owner": {
                "DisplayName": "{storage-account-uuid}",
                "ID": "{storage-account-uuid}"
            },
            "Size": 533
        },
        {
            "LastModified": "2016-09-28T15:36:17.573Z",
            "ETag": "\"a54ed08bcb07c28f89f4b14ff54ce5b7\"",
            "StorageClass": "STANDARD",
            "Key": "98837-filename-00003",
            "Owner": {
                "DisplayName": "{storage-account-uuid}",
                "ID": "{storage-account-uuid}"
            },
            "Size": 14476
        },
        {
            "LastModified": "2016-10-06T14:46:26.923Z",
            "ETag": "\"2bcc8ee6bc1e4b8cd2f9a1d61d817ed2\"",
            "StorageClass": "STANDARD",
            "Key": "abfc4-filename-00004",
            "Owner": {
                "DisplayName": "{storage-account-uuid}",
                "ID": "{storage-account-uuid}"
            },
            "Size": 20950
        }
    ]
}

配置靜態網站

aws --endpoint-url=https://<endpoint> s3 website s3://<bucketname>/ --index-document index.html --error-document error.html

後續步驟

IBM Cloud Object Storage RESTful API 的詳細說明可在 S3 相容性 API 文件 或 配置 API 文件中找到。