背景
ServerlessFrameworkでは「--stage Dev」といったようにして、ステージという概念でプロダクションと開発環境を分けたりします。
つまりAWS lambda内に
プロジェクト名-Prod-関数名
プロジェクト名-Dev-関数名
が沢山並んでいる状態です。
関数が単独で完結している場合は良いのすが、invokeで呼び出したい場合、
「ステージProdの時はProdの、あの関数を呼び出したい」「ステージDevの時はDevの関数を呼び出したい」というケースもあります。
ServerlessFrameworkはデプロイすると関数の『タグ』を自動的につけてくれます。
STAGEの値がそれです。
これが簡単に取得できると、invokeする側で「今、私のステージはDevだから、同じステージのこの関数を呼び出そう」という事ができます。
やり方
下記のようにすると「自身のステージ」を得ることができました。
必要な権限は lambda:GetFunction でした。
const lambda = new AWS.Lambda({ region: 'ap-northeast-1' });
module.exports.hoge = (event, context, callback) => {
lambda.getFunction({ FunctionName: context.functionName }, (err, data) => {
if (err) console.log(err, err.stack);
else console.log(`STAGE is ${data.Tags.STAGE}`);
});
}
lambda.getFunctionについてはココ
context.functionNameについてはココを参考にしました
反省
context.functionName で自身の関数名が取得できているので、API叩くのではなく、文字列をゴニョゴニョした方が早そう。
プロジェクト名も入ってるしね。