AWS LambdaのLinux環境はどのくらい使いまわされているのか

  • 17
    いいね
  • 0
    コメント

はじめに

自分用Slackにいろいろ通知するBOTを作ろうと思って、Lambdaのことを調べていたら下記のような記述を見つけた。

AWS Lambdaは実行のたびに違うLinux空間を使う、とは限らないようで、同じLinux環境を使い回すときもあるようだ。

AWS Lambda を利用する上で知っておいたほうがよいこと - ボクココ

毎回ひとつのFunctionを実行するために新しい環境を用意していたら効率が悪いのでこうなっているのだろう。

じゃあ一体どのくらい使いまわされているのか?
気になったので遊んでみた。

検証

  • Serverless(Ver 1.2.1)使ってます。
  • 以下コード。雑ですみません。
handler.js
'use strict';

const fs = require('fs');
const request = require('request');

module.exports.hello = (event, context, callback) => {
  fs.writeFileSync('/tmp/sample_' + new Date().getTime() + '.txt', 'hoge');
  var files = fs.readdirSync('/tmp');
  request.post(process.env.WEBHOOK_URL, {
      headers: { 'Content-Type' : 'application/json' },
      json: {
        channel: "#general",
        username: "tmp",
        text: "files: " + files,
        icon_emoji: ":open_file_folder:"
      }
    }, (err, response, body) => {});
};
  • /tmpにsample_xxxxxxx.txtというファイルを作った後に/tmpの中身を見てるだけ。
  • /tmpの中身が直前に作ったファイルだけなら新しい環境。ファイルが複数入っていれば環境を使いまわしてるだろうという判断。
  • ふつうにhost名とか見ればいいんじゃないかとも思うが、/tmp使えることを最近知ったので使ってみたかっただけ。
  • 結果をSlackに通知してます。
  • これを3分おきに実行するように設定。
  • 3分くらいでもわりと環境変わるんじゃないか? と予測。
  • 夜寝る前に仕掛けた。

結果

slack_01.png

朝起きて見たら、なんかすごいことになってた。

23:30〜の様子。徐々にファイル数が増えている。つまり同じ環境で実行されている。
スクリーンショット 2016-12-05 12.46.41.png

03:30くらいの様子

slack_01.png

しかし03:32のタイミングで別の環境になったぽい。

スクリーンショット 2016-12-05 12.54.11.png

06:50のタイミングでも変わってる。

スクリーンショット 2016-12-05 12.55.46.png

10分間隔

10分でもファイルが残っているので同じ環境。
スクリーンショット 2016-12-05 12.57.16.png

60分間隔

60分だとさすがに残っていないので別環境っぽい。
スクリーンショット 2016-12-05 13.00.17.png

30分間隔

同じ環境。
Screen Shot 2016-12-05 at 23.13.02.png

気が向いたらもうちょっと試してみる。

まとめ

  • Lambdaの実行環境は思っていたより息が長い。

  • 実行環境が変わるタイミングは不明。というかそんなこと気にしてはいけない。

  • /tmpを使うときはちゃんとファイルを消したほうがいい。

参考情報

AWS Lambdaをいろいろ暴く - Qiita
AWS Lambda を利用する上で知っておいたほうがよいこと - ボクココ
よくある質問 - AWS Lambda | AWS