使用 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 选项来获取,而不能在凭证文件中进行设置。

高级语法命令

可以使用 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 还允许发出直接 API 调用,以提供与使用 s3api 命令发出直接 HTTP 请求相同的响应。

列出存储区:

$ 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
        }
    ]
}

配置静态 Web 站点

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

后续步骤

可在 S3 兼容性 API 文档 或 配置 API 文档中找到 IBM Cloud Object Storage 的 RESTful API 的详细描述。