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“で取得することも可能である。

以上。

開発環境にAmazonLinux@Docker

表題の通り。

■ 環境

  • Amazon Linux
  • Docker for Mac 1.12.5
  • Mac OSX El Capitan

■ AmazonLinux@Docker

先日のエントリでは、起動したコンテナ内で`aws configure`を実行したが、すでにローカルで利用している設定をそのまま利用したい。というわけで下記のようにした。

$ docker run -ti --rm --name amazon -v ~/.aws:/root/.aws amazonlinux bash

これで`aws configure`をしなくても起動したコンテナ内でいつも通りの`aws`コマンドを利用することができる。

以上。

■ 環境

AmazonLinux@Dockerにawscli

表題の通り。`awscli`は最初から入っているのかと思ったが入っていなかった。

■ 環境

  • awscli 1.11.17
  • AmazonLinux 2016.09
  • Docker for Mac 1.12.3
  • Mac OSX El Capitan

■ Docker

AmazonLinuxのコンテナを起動する。

$ docker run -ti --rm --name amazon amazonlinux /bin/bash
bash-4.2# which aws
bash: which: command not found
bash-4.2#
bash-4.2# aws
bash: aws: command not found
bash-4.2# 

`which`コマンドも入っていなかったので`aws`コマンドを実行してみたが入っていなかった。

■ awscli

`awscli`というパッケージ名ではなかったようなので検索。

bash-4.2# yum search aws
Loaded plugins: priorities
=============== N/S matched: aws ================================================
  :
aws-cli.noarch : Provides a unified command line interface to Amazon Web Services
:
bash-4.2#
bash-4.2# yum install -y aws-cli
:
bash-4.2# aws --version
aws-cli/1.11.17 Python/2.7.12 Linux/4.4.27-moby botocore/1.4.74
bash-4.2#

インストールができた。あとは`configure`しておしまい。

以上。

■ 関連

OpsWorksのInstanceIdとEc2InstanceId

表題についての単なるメモ。

■ 環境

  • awscli 1.11.2
  • OpsWorks
  • AmazonWebServices
  • Mac OSX El Capitan

■ OpsWorks

現在の職場ではOpsWorksを使用している。`awscli`, `aws-sdk`でOpsWorksから起動しているインスタンス情報を下記のように取得した。

$ aws opsworks describe-instances --stack-id XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

この中から、インスタンスが起動された時間を取得したかったのであるが、”CreatedAt“しか取得できない。これは最初にインスタンスを作成した日時であって`stop`→`start`しても変化は無い。よってインスタンスIDを元にEC2のAPIを再度叩けば取得できるかな、と試してみようとしたのだが、”InstanceId“が見慣れない文字列になっている…。

当初はこの見慣れない文字列でEC2のAPIを叩いてみたのだが、もちろん失敗する。再度`opsworks describe-instances`で出力された内容を見ていると…”Ec2InstanceId“というのがあった。こちらは見慣れた文字列である。これを元にEC2のAPIを叩くことで、”LaunchTime“で起動時間を取得することができた。

$ aws ec2 describe-instances --instance-ids i-XXXXXXXXXXXXXXXX

以上。

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
$

以上。

■ 関連