En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je répertorier les fonctions Lambda avec une simultanéité provisionnée et réservée dans une région AWS ?

Lecture de 5 minute(s)
0

Je souhaite répertorier les fonctions AWS Lambda qui ont réservé et provisionné la simultanéité dans ma région AWS.

Résolution

La console Lambda n'affiche pas les fonctions Lambda configurées avec une simultanéité réservée et provisionnée. Utilisez le script Lambda Python pour répertorier les fonctions avec simultanéité provisionnée et réservée comme cible dans une région AWS spécifique.

Prérequis

Assurez-vous que le rôle AWS Identity and Access Management (IAM) pour votre fonction Lambda dispose des autorisations suivantes :

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

Créer votre rôle IAM pour la fonction Lambda

Procédez comme suit :

  1. Assurez-vous que le rôle IAM dispose des autorisations suivantes :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateRole",
            "iam:PassRole"
          ],
          "Resource": "*"
        }
      ]
    }
  2. Connectez-vous à la console IAM.

  3. Dans le volet de navigation gauche, sélectionnez Rôles.

  4. Cliquez sur le bouton Créer un rôle.

  5. Dans la section Sélectionner le type d’entité de confiance, sélectionnez Service AWS, puis Lambda comme cas d'utilisation. Sélectionnez le bouton Suivant : Autorisations.

  6. Recherchez la stratégie AWSLambdaBasicExecutionRole, puis sélectionnez-la. Cette stratégie accorde à votre fonction Lambda les autorisations de base nécessaires à son exécution.

  7. Attachez les autorisations personnalisées requises comme suit :

    Sélectionnez Créer une stratégie dans un nouvel onglet ou une nouvelle fenêtre de navigateur pour conserver votre processus de création de rôle intact.

    Dans l'outil de création de stratégie, passez à l'onglet JSON et saisissez le document de stratégie suivant :

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "lambda:GetFunctionConcurrency",
            "lambda:ListFunctions",
            "lambda:ListProvisionedConcurrencyConfigs"
          ],
          "Resource": "*"
        }
      ]
    }
  8. Sélectionnez Examiner une stratégie, nommez-la (par exemple, LambdaConcurrencyPermissions), puis sélectionnez Créer une stratégie.

  9. Retournez à l'onglet ou à la fenêtre de création de votre rôle. Actualisez la liste de stratégies (si nécessaire), puis attachez la stratégie que vous venez de créer en recherchant son nom et en la sélectionnant.

  10. (Facultatif) Passez à Suivant : Identifications. Ajoutez des identifications si nécessaire, puis sélectionnez Suivant : Vérifier.

  11. Donnez un nom à votre rôle (par exemple, LambdaExecutionRoleWithConcurrencyPermissions). Vérifiez les détails du rôle, puis sélectionnez Créer un rôle.

Créer la fonction Lambda

Procédez comme suit :

  1. Ouvrez la console AWS Lambda.
  2. Sélectionnez le bouton Créer une fonction.
  3. Accédez à la section Créer à partir de zéro.
  4. Saisissez le nom de votre fonction Lambda dans le champ Nom de la fonction.
  5. Sélectionnez l’exécution Python 3.10.
  6. Dans la section Autorisation, sous Modifier le rôle d'exécution par défaut, sélectionnez Utiliser un rôle existant.
  7. Dans la liste déroulante Rôle existant, sélectionnez le rôle IAM que vous avez créé lors des étapes précédentes.
  8. Après avoir sélectionné le rôle, sélectionnez Créer une fonction.

Utilisez le code suivant pour remplacer le code de fonction Lambda par défaut :

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

Le code est itéré dans chaque fonction Lambda. La fonction appelle la méthode get_function_concurrency pour récupérer des informations sur la configuration de simultanéité réservée ou provisionnée pour chaque fonction dans la région AWS spécifiée.

Mettre à jour le code de fonction vers la région AWS cible souhaitée

Avant d'utiliser la fonction Lambda, mettez à jour la région dans laquelle vous souhaitez répertorier les fonctions avec simultanéité provisionnée et réservée.

Par exemple, pour voir la simultanéité réservée et provisionnée des fonctions Lambda dans la région AWS us-east-1, mettez à jour la variable region comme indiqué ci-dessous :

region = "us-east-1"

Exécuter la fonction Lambda

Pour exécuter la fonction Lambda que vous avez créée, accédez à l'onglet Test. Puis, suivez les étapes ci-dessous.

  1. Dans la fonction Lambda, sélectionnez l'onglet Test.
  2. Dans la boîte de dialogue Configurer un événement de test, utilisez l'exemple de modèle d'événement pour exécuter le test.
  3. Saisissez un nom d'événement pour le test, tel que Test.
  4. Pour créer l'événement de test, sélectionnez Enregistrer.
  5. Lorsque vous avez terminé, sélectionnez Test pour exécuter le test.

Vous pouvez consulter la sortie, qui est une liste, dans les journaux de fonctions. Vous pouvez également consulter la liste dans l'onglet Test de la fonction Lambda avec la simultanéité réservée ou provisionnée configurée. La liste comprend les données suivantes :

  • Nom de la fonction
  • Type de simultanéité configuré
  • Le nombre de simultanéité configuré

Exemple de sortie :

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

Informations connexes

Créer une fonction Lambda avec la console

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois