S3の使用容量

表題の件を調べたい。

■ 環境

  • awscli 1.10.19

■ 目的

S3バケットの全使用容量を調べたい。`s3`コマンドで取得できそうである。

aws s3 ls --recursive --summarize --human-readable s3://withsin/

上記は自身の所有する”withsin“バケットの全容量を計算している。

`–recursive`で再起的に実行する。これで指定したバケット配下全てのファイルが対象となる。`–summarize`で`ls`に対して最後に合計を表示する。`–human-readable`で容量を理解しやすいようにしている。スクリプト中で行う場合には、単位が人間寄りになっているので外した方が良いだろう。これで実行すると下記のようになる。

$ aws s3 ls --recursive --summarize --human-readable s3://withsin/
  :
2014-04-14 16:15:14    0 Bytes XXXX/
2015-09-25 14:37:17  731.2 KiB XXXX/YYYYYY.tar.gz

Total Objects: 546
   Total Size: 358.9 MiB
$

以上。

■ 関連

S3バケットのリージョンを取得

awscliで表題を取得する。

■ 環境

  • awscli 1.10.19

■ get-bucket-location

S3バケットのリージョンを`s3api`コマンドで取得するには`get-bucket-location`サブコマンドを使用する。

$ aws s3api get-bucket-location --bucket withsin
{
    "LocationConstraint": "ap-northeast-1"
}
$

ManagementConsoleからも確認してみる。

s3-bucket-location

確かに”Tokyo“となっているので一致する。

以上。

■ 関連

S3バケットにアクセス権限があるか確認

awscliで表題を行う。

■ 環境

  • awscli 1.10.18

■ head−bucket

`s3api`コマンドに`head-bucket`というサブコマンドが存在する。試してみる。

$ aws s3api head-bucket withsin
$
$ aws s3api head-bucket withsin2

A client error (404) occurred when calling the HeadBucket operation: Not Found
$
$ aws s3api head-bucket XXXX

A client error (403) occurred when calling the HeadBucket operation: Forbidden
$

`head-bucket`は対象のS3バケットが存在し、かつ権限がある場合には何も出力されない。

対象のS3バケットが存在しなければ”404“、アクセス権限が無ければ”403“が出力された。

以上。

■ 関連

S3オブジェクトの権限を変更

awscliで表題の件を行う。

■ 環境

  • awscli 1.10.17

■ get-object-acl

先日のエントリの通り、S3オブジェクトの既存の権限を取得することはできた。

$ aws s3api get-object-acl --bucket withsin --id test.tar.gz

これを変更する方法を確認する。というのも下記のように`–acl public-read`を付け忘れて実行してしまうことが多々ある為である。

$ aws s3 cp ./test.tar.gz s3://withsin/

■ put-object-acl

`s3api`には`put-object-acl`というサブコマンドもあるようだ。これで設定できそうである。

$ aws s3api put-object-acl --acl public-read --bucket withsin --key test.tar.gz
$
$ aws s3api get-object-acl --bucket withsin --key test.tar.gz
{
    "Owner": {
        "DisplayName": "withsin",
        "ID": "XXXXXXXXXXXXXXXXXXXX"
    },
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser",
                "DisplayName": "withsin",
                "ID": "XXXXXXXXXXXXXXXXXXXX"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}
$

上記で良さそうである。以前はその場で気がつけば下記のようにアップロードしなおしていたりしたが、これでブラウザから”ManagementConsole“を開いて…というような事をしなくて済みそうだ。

以上。

■ 関連

S3のバケット名称一覧

表題の通り。awscliを使って取得する。

■ 環境

  • awscli 1.10.7

■ s3

`s3`コマンドで取得すると下記のようになる。

$ aws s3 ls
2013-07-08 22:48:08 withsin
2016-03-31 19:16:18 withsin.tech
$

この結果から何か行うにはちょっと面倒である。先日のエントリで`s3api`を知ったのでこちらも見てみると似たようなコマンドが存在する。

■ s3api

$ aws s3api list-buckets
{
    "Owner": {
        "DisplayName": "withsin",
        "ID": "XXXXXXXXXXXXXXXXXXXX"
    },
    "Buckets": [
        {
            "CreationDate": "2013-07-08T13:48:08.000Z",
            "Name": "withsin"
        },
        {
            "CreationDate": "2016-03-31T10:16:18.000Z",
            "Name": "withsin.tech"
        }
    ]
}
$

JSON形式で取得しているので`jq`を使うと”Name“の一覧が取得できそうである。

$ aws s3api list-buckets | jq ".Buckets[].Name"
"withsin"
"withsin.tech"
$

これで扱いやすそうだ。

以上。

■ 関連