プログラミング

【AWS】S3のgzファイルをダウンロードせずにgrepする




仕事でS3に上がってるログファイルを見ることがあるんですが、毎回毎回

  1. S3からファイルをダウンロード
  2. ローカルでgzファイルをgrep

と、2段階やってました。
でも、これ結構面倒なんですよねぇ。。。
無駄なローカルファイルも増えるし。。。

で、これどうにかならないかなぁと探したらどうにかなりました。

CPコマンドの出力先をハイフンにしてcatする

通常のCPだとこう

それをテキストファイルの場合はこう

CPの出力先をハイフンにするとcatされるので、その結果をいじる感じ。

zgrep+aオプションでgzファイルをgrepする

そのままzgrepすると

バイナリとみなされてしまうので、そんな時はaオプション

これで解決!

追記

それダウンロードしてんじゃん!

という指摘がありました。
ダウンロードしてる=課金されてるぞ!ってことですかね…?

訂正するとしたら、

ダウンロードせずに~
ではなく
ファイルを保存することなく~
ですかね。

Athena使えない
アクセスできるディレクトリが制限されててtmpが使えない
ファイル置きすぎると容量使い過ぎ!と怒られる
中身見るだけなのにローカルにファイル増えてくのいやだ~

という環境だったので、ターミナル上で完結するの便利じゃん!と思って書きました。

ちなみに、対象ファイルは数十万行のログファイルだったりするのですが、いくら課金されてるのかは全くわかりません!
(だって他の会社が管理してる環境で請求来ないから…)

なので通信量についてはよくわかりませんが。
少なくともハイフンを指定することで、ローカルにファイルを保存する時間よりも高速に中身を見ることができていたと思います。
もう当分本番の踏み台でアレコレすることはないと思うので検証できませんけどね…。

-プログラミング
-,

Copyright© そんなこと猫でもできる , 2020 All Rights Reserved Powered by AFFINGER5.