LoginSignup
0
1

More than 1 year has passed since last update.

aws cliによるS3操作

Last updated at Posted at 2023-01-24

大抵はググればでてくる内容だが、シェル芸を足してもっと見やすくする。
S3でファイルを見る場面があったが、ファイル数が毎秒増えていく用途のバケットだったので、GUIで見ることが困難だった。そのためコマンドで対応するほかなかった。そういうときのナレッジ。

S3バケットをlsする

aws s3 ls s3://BUCKETNAME/DIRNAME/ --human-readable

BUCKETNAMEにはバケット名を、DIRNAMEにはディレクトリ名を置き換えて入力。--human-readableをつけることで、サイズ等を見やすくしてくれる。つけないとバイト表記。S3バケットの指定は、一番後ろにスラッシュをつけないといけないので、注意。
また、東京リージョンであってもタイムスタンプがUTCのため、時間が9時間マイナスされていても焦らないこと。

S3バケットをlsして、最新ファイルだけ抽出する

aws s3 ls s3://BUCKETNAME/DIRNAME/ --human-readable | sort -nr | head -n 10

CloudShellはパイプと一般的なLinuxコマンドが使えるので、それを利用。sortで並び替えを行い、headで上から10行の結果を出力。head -n 10の数値は任意変更して、見やすくファイル名を出力する。

S3バケットから指定したファイルをダウンロードする

aws s3 cp s3://BUCKETNAME/DIRNAME/ ./ --exclude "*" --include "FILENAME" --recursive

CloudShell上のカレントディレクトリに、指定したファイルをダウンロードする。このあと、単なるlsコマンドで、ダウンロードを確認。FILENAMEに実際のファイル名を記載する。

S3バケットのgzファイルをcatする

aws s3 cp s3://BUCKETNAME/DIRNAME/FILENAME.gz - | zcat

たまにマネージドサービスなどのログをS3に保存すると、gzファイルのことがある。たとえばCloudFrontとかCloudFrontとか(大事なことなので2回書きました)。そのようなファイルをちょっと見たいときに利用する。

S3バケットのgzファイルをgrepでキーワード検索する

aws s3 cp s3://BUCKETNAME/DIRNAME/FILENAME.gz - | zgrep "KEYWORD"

そのようなgzファイルをダウンロードせずに中身をgrep検索したいときは上記。"KEYWORD"を検索したいキーワードに置き換える。zgrepはヘルプ等を参照。基本grepとだいたい同じオプションが利用可能。

S3バケットの最新gzファイル1つを機械的にgrepでキーワード検索する

いままでの応用技。何も考えたくないぐらい機械的にやりたいときはこれ。

[cloudshell-user@ip ~]$ BUCKETDIRNAME="s3://BUCKETNAME/DIRNAME/"
[cloudshell-user@ip ~]$ FILENAME=`aws s3 ls ${BUCKETDIRNAME} --human-readable | sort -nr | head -n 1 | awk '{ print $5 }'`
[cloudshell-user@ip ~]$ aws s3 cp ${BUCKETDIRNAME}${FILENAME} - | zgrep "KEYWORD"

変数にすることで、コマンドは同じものを単純繰り返しすることできる。変更するのは1行目のS3バケットとディレクトリ名、3行目のzgrep検索キーワードのみ。

参考リンク

[aws]s3 lsで取得したファイルを更新日時順でソートする
https://blog.hello-world.jp.net/posts/aws-4254

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1