スキップしてコンテンツを表示

AWS リージョンで同時実行がプロビジョニングされた Lambda 関数と、予約された関数を一覧表示する方法を教えてください。

所要時間3分
0

AWS リージョン内で同時実行が予約およびプロビジョニングされている AWS Lambda 関数を一覧表示したいです。

解決策

Lambda コンソールには、どの Lambda 関数がリザーブド同時実行とプロビジョニング済み同時実行で設定されているかは表示されません。Lambda Python スクリプトを使用して、特定の AWS リージョンのターゲットとして、同時実行がプロビジョニングおよび予約されている関数を一覧表示します。

前提条件

Lambda 関数の AWS Identity and Access Management (IAM) ロールに次のアクセス許可があることを確認してください。

  • lambda:GetFunctionConcurrency
  • lambda:ListFunctions
  • lambda:ListProvisionedConcurrencyConfigs

Create your IAM role for the Lambda function

次の手順を実行します。

  1. ユーザーの IAM ロールに次のアクセス許可があることを確認してください。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateRole",
            "iam:PassRole"
          ],
          "Resource": "*"
        }
      ]
    }
  2. IAM コンソールにログインします。

  3. 左側のナビゲーションペインで、**[ユーザー]**を選択します。

  4. [ロールを作成] ボタンを選択します。

  5. [信頼されたエンティティの種類を選択] セクションで、[AWS サービス] を選択し、ユースケースに [Lambda] を選択します。**[次へ: **アクセス許可] ボタンを選択します。

  6. AWSLambdaBasicExecutionRole ポリシーを検索し、選択します。このポリシーは、Lambda 関数に対し、実行するための基本的なアクセス許可を付与します。

  7. 必要なカスタムアクセス許可を次のようにアタッチします。

    ロール作成プロセスをそのまま維持するには、新しいブラウザタブまたはウィンドウで [ポリシーの作成] を選択します。

    ポリシー作成ツールで JSON タブに切り替え、次のポリシードキュメントを入力します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "lambda:GetFunctionConcurrency",
            "lambda:ListFunctions",
            "lambda:ListProvisionedConcurrencyConfigs"
          ],
          "Resource": "*"
        }
      ]
    }
  8. [ポリシーを確認] を選択し、ポリシーに名前を付けます (LambdaConcurrencyPermissions など)。次に、[ポリシーの作成] を選択します。

  9. ロール作成タブまたはウィンドウに戻ります。必要な場合はポリシーのリストを更新し、作成したポリシーの名前を検索し、それを選択してアタッチします。

  10. (オプション) [次へ: タグ] に進みます。必要に応じてタグを追加し、[次へ: 確認] を選択します。

  11. ロールに名前を付けます (LambdaExecutionRoleWithConcurrencyPermissions など)。ロールの詳細を確認したら、[ロールを作成] を選択します。

Lambda 関数を作成する

次の手順を実行します。

  1. AWS Lambda コンソールを開きます。
  2. [関数を作成] ボタンを選択します。
  3. [最初から作成] セクションに移動します。
  4. Lambda 関数の名前を [関数名] フィールドに入力します。
  5. ランタイムには、Python 3.10 を選択します。
  6. [アクセス許可] セクションの [デフォルト実行ロールの変更] で、[既存のロールを使用する] を選択します。
  7. [既存のロール] ドロップダウンリストで、前のステップで作成した IAM ロールを選択します。
  8. ロールを選択したら、[関数の作成] を選択します。

次のコードを使用して、デフォルトの Lambda 関数コードを置き換えます。

import json
import boto3

def lambda_handler(event, context):
    # Select the region you would like to list function concurrency
    region = "region"

    lambda_client = boto3.client('lambda', region_name=region)
    count = 0

    # Create a paginator for the 'list_functions' operation.
    paginator = lambda_client.get_paginator('list_functions')
    lambda_iterator = paginator.paginate()

    # For loop to iterate through listed functions and return function name and concurrency response
    for items in lambda_iterator:
        for function in items['Functions']:
            function_name = function['FunctionName']

            try:
                response = lambda_client.get_function_concurrency(
                    FunctionName=function_name
                )

                # If reserved concurrency is configured, print the details
                if 'ReservedConcurrentExecutions' in response:
                    count += 1
                    reserved_concurrency = response['ReservedConcurrentExecutions']
                    print(f"{count}. Function Name: {function_name}, Reserved Concurrency: {reserved_concurrency}")

            except lambda_client.exceptions.ResourceNotFoundException:
                # If the function is not found, skip it
                pass
            except Exception as e:
                print(f"Error retrieving concurrency for {function_name}: {e}")

            try:
                response = lambda_client.list_provisioned_concurrency_configs(
                    FunctionName=function_name
                )

                # If provisioned concurrency is configured, print the details
                if 'ProvisionedConcurrencyConfigs' in response and response['ProvisionedConcurrencyConfigs']:
                    provisioned_concurrency = response['ProvisionedConcurrencyConfigs'][0]['RequestedProvisionedConcurrentExecutions']
                    count += 1
                    print(f"{count}. Function Name: {function_name}, Provisioned Concurrency: {provisioned_concurrency}")

            except lambda_client.exceptions.ResourceNotFoundException:
                # If the function is not found, skip it
                pass
            except Exception as e:
                print(f"Error retrieving provisioned concurrency for {function_name}: {e}")

コードは各 Lambda 関数を繰り返し処理します。この関数は get_function_concurrency メソッドを呼び出し、指定された AWS リージョンの各関数の予約済みまたはプロビジョニング済みの同時実行設定に関する詳細を取得します。

関数コードを目的のターゲット AWS リージョンに更新します。

Lambda 関数を使用する前に、同時実行がプロビジョニングされた同時実行と予約された同時実行を備えた関数を一覧表示するリージョンを更新します。

たとえば、us-east-1 AWS リージョンの Lambda 関数に対して予約済みおよびプロビジョニング済み同時実行を確認するには、次のようにリージョン変数を更新します。

region = "us-east-1"

Lambda 関数を実行する

作成した Lambda 関数を実行するには、[テスト] タブに移動します。次に、以下に示す手順に従います。

  1. Lambda 関数で、[テスト] タブを選択します。
  2. [テストイベントの設定] ダイアログで、サンプルイベントテンプレートを使用してテストを実行します。
  3. テストのイベント名を入力します (Test など)。
  4. テストイベントを作成するには、[保存] を選択します。
  5. 完了したら、[テスト] を選択してテストを実行します。

出力はリストであり、関数ログで確認できます。または、Lambda 関数の [テスト] タブで、予約またはプロビジョニングされた同時実行を設定したリストを閲覧できます。リストには次のデータが含まれます。

  • 関数名
  • 設定されている同時実行のタイプ
  • 設定されている同時実行数

出力例:

1. Function Name: ProvisionedConcurrencyTest, Provisioned Concurrency: 10
2. Function Name: ReservedConcurrencyTest, Reserved Concurrency: 50

関連情報

コンソールで Lambda 関数を作成する

AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ