はじめに
自分用Slackにいろいろ通知するBOTを作ろうと思って、Lambdaのことを調べていたら下記のような記述を見つけた。
AWS Lambdaは実行のたびに違うLinux空間を使う、とは限らないようで、同じLinux環境を使い回すときもあるようだ。
AWS Lambda を利用する上で知っておいたほうがよいこと - ボクココ
毎回ひとつのFunctionを実行するために新しい環境を用意していたら効率が悪いのでこうなっているのだろう。
じゃあ一体どのくらい使いまわされているのか?
気になったので遊んでみた。
検証
- Serverless(Ver 1.2.1)使ってます。
- 以下コード。雑ですみません。
'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分くらいでもわりと環境変わるんじゃないか? と予測。
- 夜寝る前に仕掛けた。
結果
朝起きて見たら、なんかすごいことになってた。
23:30〜の様子。徐々にファイル数が増えている。つまり同じ環境で実行されている。
03:30くらいの様子
しかし03:32のタイミングで別の環境になったぽい。
06:50のタイミングでも変わってる。
10分間隔
60分間隔
30分間隔
気が向いたらもうちょっと試してみる。
まとめ
-
Lambdaの実行環境は思っていたより息が長い。
-
実行環境が変わるタイミングは不明。というかそんなこと気にしてはいけない。
-
/tmpを使うときはちゃんとファイルを消したほうがいい。
参考情報
AWS Lambdaをいろいろ暴く - Qiita
AWS Lambda を利用する上で知っておいたほうがよいこと - ボクココ
よくある質問 - AWS Lambda | AWS