secure ログの見方

IPアドレスごとの ssh 接続成功件数

grep "Accepted" /var/log/secure* | awk '{print $9, $11;}' | sort | uniq -c

IPアドレスごとの ssh 接続失敗件数

grep -E "Failed|Invalid" /var/log/secure* | awk '{print $10;}' | sort | uniq -c | sort

[AWS] AWSのCloudWatchで取得できるBillingの情報を毎日Slackに通知させて費用を常に把握する

参考: AWSのCloudWatchで取得できるBillingの情報を毎日Slackに通知させて費用を常に把握する – さよならインターネット

参考URLだと ruby で処理してるけど、aws-cli, jq と curl 使ってるだけだから、ruby 使わなくても sh だけでいいんでないかなーと思った

Re: WordPressで自動生成されるrobots.txt

WordPressの場合、ダッシュボードの「プライバシー設定」にあわせて自動でrobots.txtを生成してくれます(自分で robots.txt を設置した場合はそちらが優先されます)。

細かな設定を行いたい場合は自分で robots.txt を作成した方が早いかも知れませんが、当該部分にフィルターが用意されているので、プラグインやテーマでカスタマイズすることも可能です。

WordPressで自動生成されるrobots.txt | Gatespace's Blog

惜しい、Function Reference/do robots にもあるようにdo_robotstxt アクションフックが直前で呼ばれるので、そのアクションフックで robots_txt フィルターフックを登録したほうが確実。

<?php
add_action('do_robotstxt', function(){
  add_filter('robots_txt', function($output) {
    $public = get_option( 'blog_public' );
    if ( '0' != $public ) { // open
      $output .= "Disallow: /members/n";
    }
    return $output;
  }
}

[AWS] Lambda から Lambda を呼ぶ

ようやく AWS Lambda が把握できてきた。
小さい機能単位で Lambda ファンクション作って、それを呼ぶ感じで作っていくとやりやすい。

イベント発生して呼び出される Lambda ファンクション

イベントの情報をもとになんかする Lambda ファンクション

結果を SNS なり、Slack なりに投げる Lambda ファンクション

みたいに Lambda ファンクションから Lambda ファンクションを呼び出して作業させると具合がいい
Lambda から Lambda を呼ぶには

console.log('Loading event');
var aws = require('aws-sdk');

exports.handler = function(event, context) {
    // なんか処理

    var lambda = new aws.Lambda({apiVersion: '2014-11-11'});
    var params = {
        FunctionName: "lambda-function-name",
        InvokeArgs: JSON.stringify({
            "key_1": 'var_1',
            "key_2": 'var_2',
            "key_3": 'var_3'
            }, null, ' ')
        };
    lambda.invokeAsync(params, function(err, data){
        if(err) context.done('error', err.stack);
        else context.done(null, '');
}

Lambda から SNS を呼ぶには

var sns = new aws.SNS({region: 'リージョン'});
var params = {
    TopicArn: 'トピック arn',
    Subject: 'サブジェクト',
    Message: 'メッセージ'
  };
  sns.publish(params, function(err, data) {
    if(err) context.done('error', err.stack);
    else context.done(null, '');
  })