Pythonを使ってElasticsearchからデータを取ってくる際、どうも計算が合わない。 なんでだろうなぁと思い調べてみたところ、どうやらElasticsearchではデータを取得する際、デフォルトでは10件までしか取得できないらしい。で、10件以上のデータを取得する場合だと、以下の方法があるようだ。

  • scrollでデータを繰り返し取得して条件にあったデータを全て取得してくる
  • query実行時にsizeを指定することで指定した件数までのデータを取得する(上限は10,000まで?)

上限があるというのもあり、2個目の方法はちょっと… という訳で、scrollで処理をさせることに...


Vulsをキックして脆弱性の差分をSlackにポストさせるPythonスクリプト

脆弱性検知にVulsを使っているのだが、現時点ではまだ差分検知の機能が実装されておらず、cronなどでまわして新しい脆弱性が見つかったらその脆弱性だけをSlackにポストさせるようにするにはVuls単体だとまだできない状態。 そろそろ実装されると思っているのだが、その間の繋ぎとしてPythonでスクリプトを書いてやることにした。

間に合わせなのであまり綺麗には書いてない状態。

vuls_run.py
#!/usr/bin/env python # -*- coding: utf-8 -*- from os.path import join, relpath import os...

AWSの昨日までの各サービスの利用料金をSlackに通知させる

AWSで、昨日までの各サービス、アカウント全体での利用料金についてSlackでポストさせるようにしたかったので、とりあえずPythonで簡単なスクリプトを作ってみた。
Lambdaでやってもよかったのだが、手元にあるジョブサーバを使わないといかんという使命感の元普通にサーバ上で動くようにした。認証情報についても事前にexportしとけばいけるはずなのだが、とりあえずスクリプト内で記述するようにしてる。
利用料金についてCloudWatchに連携されている必要があるので、事前にCloudWatchへの連携をしておくこと。
ライブラリとしてboto3とSlackWebを使っている。


Pythonから「slackweb」を使ってWebHook経由でSlackにPostする

仕事で、適当な処理をしてSlackにポストするという処理が必要になったので、大した処理でもなかったのでPythonで記述することにした。
で、ほかの処理と出口を揃えたい+Attachmentでちょっとリッチな通知をしたかったので、簡単にWebHookに投げてポストさせられるよう『slack-python-webhook(slackweb)』を利用することにした。

以下、作成時のソースサンプル。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import slackweb

# --- Slack Setting ---
SLACK_W...

2018/04/26 一部コマンドを修正+追記

xargsとブレース展開を使うことで、うまいこと逆順に出力させることも可能だ。

コマンド | xargs -L1 bash -c 'eval eval echo \\\${$#..0}'
blacknon@BS-PUB-UBUNTU-01:~$ echo {a..e}{01..05} | xargs -n5
a01 a02 a03 a04 a05
b01 b02 b03 b04 b05
c01 c02 c03 c04 c05
d01 d02 d03 d04 d05
e01 e02 e03 e04 e05
blacknon@BS-PUB...

小文字⇔大文字の変換方法については、以前にsedでの処理方法について記述したことがあったが、処理の仕方としてはsedだけではなく、Bashの構文を使ったりtrやawkを使ったりといろいろなアプローチの仕方がある。
今回は、それらについてを紹介する。

1.Bash 4.0以降での方法

Bash 4.0以降では、構文として変数を呼び出す際に小文字⇔大文字の変換をさせることができる。

大文字化

${変数^} # 最初の一文字目のみ大文字化
${変数^^} # すべて大文字化
[root@BS-PUB-CENT7-01 test1]# v=test;echo ${v^}
Te...

Linuxコンソール上で、同じ文字列を繰り返し出力させるにはどうすればよいだろう?という疑問が出てきたので、少し調べてみた。
perlやpythonを呼び出すの含め、以下のような方法があるようだ。

bashのprintfやseq

printfをうまく使ったり、seqやprintfをtrとうまく組み合わせるといいだろう。
(○のとこに繰り返させる数字を入れる)

printf %○s | tr ' ' '文字列'
printf "%0.s文字列" {1..○}
seq -s文字列 ○|tr -d '[:digit:]'
seq  -f "文字列" -s '' ○ # ←Macのみ
...

Linuxコンソール上で、Excelのように行と列を入れ替えたい時がある。
そんなときは、以下のようにawkなどを使うことで実現可能だ。

1.awkを使う

まずはawkを使う場合。
以下のようにすることで、行と列の入れ替えが可能だ。

awk '
{ for (i=1; i<=NF; i++)  { a[NR,i] = $i } } NF>p { p = NF }
END {
    for(j=1; j<=p; j++) { str=a[1,j]; for(i=2; i<=NR; i++){ str=str" "a[i,j]; }
        print str
    }...

仕事で、バックアップファイルをAzure Blob Storageにアップロードさせるスクリプトを作成する必要が出てきた。
Azure Blob StorageはRest APIに対応しているので、それで上げれば良さそうだ。

というわけで、こちらの内容を参考にPythonに書き直してスクリプトを作成してみた。
運用時にアップロード・ダウンロード・削除と使い分けするのが面倒だったので、サブコマンドを指定する方式にしている。

azure_blob_backup.py

#!/bin/python
# -*- coding: utf-8 -*-
# +---------------...

Pythonのpycurlで帰ってきた結果を変数・ファイルに出力する

仕事でスクリプトを書いていたところ、pycurlで取得した値を変数やファイルに書き出す必要があったので、その備忘。
なお、Pythonのバージョンは2.7.5を用いている。

1.変数に書き出す

pycurlで取得した結果を変数に書き出す場合は、StringIOをインポートしpycurl.curl.WRITEFUNCTIONで書き出させる事で対応できる。
以下、サンプル。

#!/bin/python
# -*- coding: utf-8 -*-
import pycurl
from StringIO import StringIO

# 結果を格納する変数を宣言
buffer...