Lambda Functionの一覧を取得する

Lambda Functionの一覧を取得する:


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); 
  }); 

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)