curl 명령어 옵션

# 결과를 지정한 이름으로 파일에 저장 $ curl -o response.txt https://www.example.net # 결과를 파일이름으로 저장, index.html 이 저장됨  $ curl -O https://www.example.net/index.html # SSL증명서 에러 무시 $ curl -k https://www.example.net # 진척상황을 표시 하지 않기, 에러도 표시되지 않음 $ curl -s -o response.txt http://www.example.net # 에러메시지는 보고 싶을때 $ curl -sS -o response.txt http://www.example.net # progress bar로 진척상황표시 $ curl -# -O http://www.example.net/index.html # proxy이용시 $ curl -x <proxyip>:<port> --proxy-user <username>:<password> http://www.example.net $ curl -x <username>:<password>@<proxyip>:<port> http://www.example.net # 301/302등의 redirect를 자동인식 $ curl -L http://www.example.net # http의 메소드를 지정 $ curl -X [PUT|GET|POST] http://www.example.net # parameter를 POST로 송신 $ curl -w '\n' 'http://www.example.net/posturl' -X POST --data 'name=myname&mode=create' # status code만 출력 $ curl -sS -w '%{http_code}\n' http://www.example.net  # http의 response header를 확인

AWSの放置されたEBSをchatworkへ定期的に通知

 

毎日ec2やamiを作成/削除を繰り返している環境では気付かないうちに放置されているEBSが増えてくる。考えられる原因としては色々あるけど大きくは以下の2つではないかと思っている。

  • AMIからEC2を起動する場合の話だけど、AMI作成時に「EBSをインスタンス削除時に一緒に削除する」というオプションにチェックしなかった場合、そのAMIから起動したEC2を削除するときは毎回そのEBSが残ってしまう
  • 不要になったらAMIを削除するとAMIに紐づいているEBSやスナップショットは削除されないらしい。定期的に不要AMIを方付ける仕組みを採用しているなら定期的に放置EBSも増えるはず。

なので以下のスクリプトを作成して定期的にチャットワークに通知するようにした。

#!/usr/bin/php
<?
$query="/usr/local/bin/aws --region ap-northeast-1 ec2 describe-volumes --filters Name=status,Values=available";
$result=json_decode(`$query`);
put_msg($result);
 
function put_msg($obj) {
        $TOKN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        $CWEP="https://api.chatwork.com/v2/rooms";
        $RMID="XXXXXXXX";
 
        $now=time();
        $ebsinfo="";
 
        $cntebs=count($obj->Volumes);
 
        if ($cntebs > 0) {
                for ($i=0; $i<count($obj->Volumes); $i++) {
                        $cy=substr($obj->Volumes[$i]->CreateTime, 0, 4);
                        $cm=substr($obj->Volumes[$i]->CreateTime, 5, 2);
                        $cd=substr($obj->Volumes[$i]->CreateTime, 8, 2);
                        $niglect['ctime']=mktime(0, 0, 0, $cm, $cd, $cy);
                        $niglect['mtime']=$now - $niglect['ctime'];
                        $niglect['day']=(int)($niglect['mtime']/60/60/24);
                        $niglect['mon']=(int)($niglect['day']/30);
                        $niglect['cost']=$obj->Volumes[$i]->Size * $niglect['mon']*0.12;
 
                        $ebsinfo.="[$cy/$cm/$cd] ";
                        $ebsinfo.=$obj->Volumes[$i]->VolumeId;
                        $ebsinfo.=", ".$obj->Volumes[$i]->Size."GB";
                        $ebsinfo.=", $niglect[day]日";
                        $ebsinfo.=", $niglect[cost]ドル\n";
 
                }
                $messages ="[info][title]";
                $messages.=date("Y/m/d", $now)."、EBSの放置状況\n[/title]";
                $messages.="[code]※[作成日] ボリュームID, サイズ,放置日数,消費料金\n${ebsinfo}[/code]\n";
                $messages.="上記「".count($obj->Volumes)."個」のEBSが「availabe」の状態で放置されています。\n";
                $messages.="確認後、不要なEBSは削除しましょう。(1GB 0.12ドル/Month)\n";
                $messages.="[/info]";
                exec ("/usr/bin/curl -X POST -H \"X-ChatWorkToken: $TOKN\" -d \"body=$messages\" \"$CWEP/$RMID/messages\"");
        }
}
?>

chatworkには以下のようなメッセージが表示される。

[2016/12/26] vol-09f2facbdefff1f0, 20GB, 239日, 16.8ドル
[2017/05/10] vol-067cdefgaf5c789d, 15GB, 104日, 5.4ドル
[2017/05/10] vol-09b8ededcfgj6dbf03, 15GB, 104日, 5.4ドル

この次は抽出した放置EBSをAWS CLIを使ってそのまま削除してしまうことかな。EBSにもタグをつけられるので残しておく必要があるEBSはタグをつけておいて、そのタグがついてないEBSは定期的に削除してその結果を通知する仕組みがいいかも。

でも、削除を全自動でやるのはやはり怖いから1週間前に通知して1週間後削除するか、削除は手動でやるかなどの半自動化した方がいいと思う。

댓글

이 블로그의 인기 게시물

해외거주 국민을 위한 "교민폰" 사용후기

일본 취업에 대한 단상

CISCO 2960s 초기화 후 기본 설정