IBM Cloud Docs
使用 AWS CLI

使用 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 指令,例如 lsmvcprm。 儲存區可以使用 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 文件中找到。