にわかサーバー屋さんの覚書

サーバー系を担当しているけど、設計などは日々勉強中のプログラマの覚書

【朗報】LINE BOT の Server IP Whitelist がOptionalになってた

久しぶりに、LINE BOTの設定を除いていると、、、

なんと、

LINE BOTのServer IP Whitelistが任意になっていました。

 

つまり、設定しなければ、どのホストからもアクセス出来ちゃう!

 

つまり、諦めていた、

AWSのAPI Gateway+Lambdaのサーバーレスで、BOTのサーバーが作れるわけです。

 

で、適当に作った「なんでも頭にをつけて返すBOT」。

 f:id:xev:20160518202524p:plain

 

流れとしては、

 

  1. API Gatewayのエンドポイントを作る
  2. Lambdaのファンクションを作り
  3. APIGatewayとに、作ったLambdaを紐付ける
  4. LINEのコンソールで、API GatewayのURIをいれる

基本的な流れは、これで出来るはず。

 

書いたLambdaのファンクションは以下の様な感じ

var https = require('https');

exports.handler = function(event, context) {
    
    if (!event.result){
        return context.fail("fail");
    }
    var msg = event.result[0];
    var data = JSON.stringify({
      to: [msg.content.from.toString()],
      toChannel: 1383378250,
      eventType: "138311608800106203",
      content: {
        contentType:1,
        toType:1,
        text: "お"+msg.content.text
      }
    });
    var opts = {
        hostname: 'trialbot-api.line.me',
        path: '/v1/events',
        method: 'POST',
        headers: {
            "Content-type": "application/json; charset=UTF-8",
            "X-Line-ChannelID": "CHANNEL_ID", //自分のChannel ID
            "X-Line-ChannelSecret": "CHANNEL_SECRET",//自分のChannel Secret
            "X-Line-Trusted-User-With-ACL": "MID" //自分のMID
        }
    };
    console.log(data);
    //リクエスト送信
    var req = https.request(opts, function(res){
        console.log('statusCode: ', res.statusCode);
        console.log('headers: ', res.headers);
        res.on('data', function(d){
            console.log(d.toString());
        }).on('error', function(e){
            console.log(e.stack);
        });
    });
    req.write(data);
    req.end();
};

 

あとは、Dynamoとかにデータいれて、データ見て処理変えられたりしたら、
おぉ、夢は広がりますなぁ。

ココまでのものが、サーバーレスで出来てくるわけですよ。

AWSは無料証明書も東京リージョンで始めましたし、もう、AWSにどっぷりですよ。

 

サーバー屋のつもりが、どんどんとレイヤー上がっていきます。

もう、MySQLを1から立てるなんてめんどくせーという自分がいます。。。