Lambda Functionの一覧を取得する
Lambda Functionの一覧を取得する:
Lambda Functionの一覧を取得したい時があります。
SDKがデフォルトで、50個しか返してきませんので、再帰的に検索する必要があります。
SDKのレスポンス中に、「NextMarker」プロパティが存在した場合は、返せなかったリストが残っているのでlistFunctionsの引数に、「NextMarker」プロパティを渡す事で、残りのリストを取得する事ができます。
Lambda Functionの一覧を取得する
Lambda Functionの一覧を取得したい時があります。SDKがデフォルトで、50個しか返してきませんので、再帰的に検索する必要があります。
SDKのレスポンス中に、「NextMarker」プロパティが存在した場合は、返せなかったリストが残っているのでlistFunctionsの引数に、「NextMarker」プロパティを渡す事で、残りのリストを取得する事ができます。
全てのリストを取得するサンプル
const AWS = require('aws-sdk'); const _ = require('lodash'); const lambda = new AWS.Lambda({ maxRetries: 10, retryDelayOptions: { base: 1000, }, }); /** * 全てのlambda関数名を取得します。 * Lambda.listFunctionsは一度に取得できるデータが限られるため、 * NextMarkerが無くなるまで再帰的に処理を行います。 * * @param lambda AWS.Lambda * @param prefix フィルタするプレフィックス文字列 * @param nextmarker 取得可能な関数名が残っている場合に利用する、ページング用トークン * @return array of string FunctionName * @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html#listFunctions-property */ function listFunctionsAll(lambda, nextmarker) { const params = nextmarker ? { Marker: nextmarker } : {}; const p1 = lambda.listFunctions(params).promise(); return p1.then((returnData) => { console.info('Functions.length:', returnData.Functions.length); console.info('NextMarker:', returnData.NextMarker); // これ以上取得できるデータがない場合、配列を整形して返す。 if (!returnData.NextMarker) { return returnData.Functions.map(f => f.FunctionName); } // 一度で取得できなかった場合、NextMarkerが無くなるまで再帰的に取得する。 const p2 = listFunctionsAll(lambda, returnData.NextMarker); // 取得したデータを整形し、再帰的に取得したデータと結合する。 return p2.then(returnData2 => _.concat(returnData.Functions.map(f => f.FunctionName), returnData2)); }); } /** * Lambda関数の検索結果を配列で返します。 * Lambda関数名を全て取得した後、prefixでフィルタリングします。 * * @param lambda AWS.Lambda * @param prefix フィルタするプレフィックス文字列 * @return array of string FunctionName filterd by prefix */ function listFunctions(lambda, prefix) { const exclude = [ process.env.AWS_LAMBDA_FUNCTION_NAME, ]; const result = listFunctionsAll(lambda); return result.then(data => data.filter(f => f.startsWith(prefix) && !exclude.includes(f))); } listFunctions(lambda, prefix) .then((res) => { console.info(res); }) .catch((err) => { console.error(err); });
コメント
コメントを投稿