S3の特定のパス配下のファイル総容量

表題の通り。awscliで、S3のあるパス配下にあるすべてのファイルの総容量を知りたい。

■ 環境

  • awk
  • awscli 1.11.47

■ s3

下記コマンドで取得することができる。

$ aws s3 ls s3://[bucket]/[path] --recursive | awk 'BEGIN {sum=0} {sum+=$3} END {print sum}'

肝となるところは”–recursive“で配下全てのファイルについて`ls`で詳細を取得しているところであろうか。`ls`の表記の中からファイル容量が3つ目の項目に表示されているので、この3つ目の項目を`awk`で総和計算している。

試しに自身のとある環境で行ってみたところ、下記のような結果を得られた。

$ aws s3 ls s3://[bucket]/[path] --recursive | awk 'BEGIN {sum=0} {sum+=$3} END {print sum}'
373689
$

表示はByteなので、`awk`の最後で`/1024`としていけば”KByte“や”MByte“で取得することも可能である。

以上。

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“を開いて…というような事をしなくて済みそうだ。

以上。

■ 関連