Maison >développement back-end >tutoriel php >Simplifier les API internes avec l'invocation directe AWS Lambda

Simplifier les API internes avec l'invocation directe AWS Lambda

DDD
DDDoriginal
2024-12-24 13:28:25864parcourir

Simplifying Internal APIs with Direct AWS Lambda Invocation

Lorsque vous travaillez avec des systèmes d'architecture orientée services (SOA), vous aurez peut-être besoin d'une API interne pour la communication entre les services. Une approche courante consiste à utiliser AWS Lambda avec une passerelle API. Cependant, pour les API internes, il existe une option plus simple et plus efficace : invoquer AWS Lambda directement.

Pourquoi appeler AWS Lambda directement ?

  1. Authentification intégrée avec IAM
    AWS Lambda s'intègre nativement à AWS Identity and Access Management (IAM), vous permettant de sécuriser l'accès à votre API interne sans couches d'authentification supplémentaires.

  2. Configuration et architecture globale plus simples
    L'appel direct Lambda élimine le besoin de configurer des passerelles API, des en-têtes personnalisés ou des configurations de serveur complexes. Il s'agit d'une solution légère adaptée aux cas d'utilisation internes.


Exemple : ajout de deux numéros avec AWS Lambda

Étape 1 : Créer la fonction Lambda

Commençons par créer une simple fonction Lambda en Python qui ajoute deux nombres. Voici le code :

def lambda_handler(event, context):

    if 'number1' not in event:
        return {'status':'error','msg':"Number1 is missing"}

    if 'number2' not in event:
        return {'status':'error','msg':"Number1 is missing"}

    result = int(event['number1']) + int(event['number2'])

    return {"status":"success","result":result}

Voici une version améliorée et peaufinée de votre document :
Simplifier les API internes avec l'invocation directe AWS Lambda

Lorsque vous travaillez avec des systèmes d'architecture orientée services (SOA), vous aurez peut-être besoin d'une API interne pour la communication entre les services. Une approche courante consiste à utiliser AWS Lambda avec une passerelle API. Cependant, pour les API internes, il existe une option plus simple et plus efficace : appeler directement AWS Lambda.
Pourquoi appeler AWS Lambda directement ?

Built-in Authentication with IAM
AWS Lambda natively integrates with AWS Identity and Access Management (IAM), allowing you to secure access to your internal API without additional layers of authentication.

Simpler Configuration
Direct Lambda invocation eliminates the need to configure API Gateways, custom headers, or complex server setups. It’s a lightweight solution tailored for internal use cases.

Exemple : ajout de deux numéros avec AWS Lambda
Étape 1 : Créer la fonction Lambda

Commençons par créer une simple fonction Lambda en Python qui ajoute deux nombres. Voici le code :

def lambda_handler(événement, contexte) :
si 'numéro1' n'est pas dans l'événement :
return {'status': 'error', 'msg': "Le numéro 1 est manquant"}
si 'numéro2' n'est pas dans l'événement :
return {'status': 'error', 'msg': "Le numéro 2 est manquant"}

result = int(event['number1']) + int(event['number2'])
return {"status": "success", "result": result}

Cette fonction Lambda :

  • Valide l'entrée pour garantir que le numéro1 et le numéro2 sont fournis.
  • Ajoute les deux nombres et renvoie le résultat dans a sous forme de dict.

L'entrée fournie selon laquelle nos applications consommant l'API est fournie directement dans l'événement. Pas d'objets fantaisistes ici, juste un simple dict, pas de POST, pas de GET, aucun en-tête. Comme mentionné ci-dessus, l'accès est défini par IAM lui-même.

Exécution locale avec AWS SAM

Pour tester la fonction Lambda localement, utilisez AWS Serverless Application Model (SAM). Voici un exemple de modèle SAM :

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  Dummy Lambda that adds 2 numbers

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3
    MemorySize: 128

Resources:
  AddTwoNumbersFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.10
      Architectures:
        - x86_64

Étape 2 : Appeler directement la fonction Lambda (exemple PHP)

Nous pouvons exécuter notre lambda via ce script

def lambda_handler(event, context):

    if 'number1' not in event:
        return {'status':'error','msg':"Number1 is missing"}

    if 'number2' not in event:
        return {'status':'error','msg':"Number1 is missing"}

    result = int(event['number1']) + int(event['number2'])

    return {"status":"success","result":result}

Comme vous pouvez le voir, l'entrée lambda est codée en json string les paramètres number1 et number2. (Code de l'exemple ci-dessus)

Built-in Authentication with IAM
AWS Lambda natively integrates with AWS Identity and Access Management (IAM), allowing you to secure access to your internal API without additional layers of authentication.

Simpler Configuration
Direct Lambda invocation eliminates the need to configure API Gateways, custom headers, or complex server setups. It’s a lightweight solution tailored for internal use cases.

Les paramètres doivent être sous forme de json string et non sous forme de tableau. Les résultats peuvent également être décodés en Json, uniquement si lambda renvoie un dict, ou dans le cas d'un Javascript lamda en tant qu'objet.

La valeur de retour est toujours une chaîne et doit être décodée sous la forme souhaitée.

Considérations relatives à la production

Configuration AWS Cli sur script PHP

Si le script php a été déployé lors de la production, ou si le script invoquait un lambda déployé sur AWS lui-même, le client doit être configuré sans le paramètre de point de terminaison :

result = int(event['number1']) + int(event['number2'])
return {"status": "success", "result": result}

Bien sûr, placez la clé et le secret avec les clés configurées sur AWS IAM.

Configuration du rôle IAM

Le script appelant nécessite des autorisations IAM pour accéder à la fonction Lambda. Utilisez la politique IAM suivante :

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  Dummy Lambda that adds 2 numbers

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3
    MemorySize: 128

Resources:
  AddTwoNumbersFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.10
      Architectures:
        - x86_64

Remplacer :

  • XXXXXX avec votre identifiant de compte AWS.
  • AddTwoNumbersFunction avec le nom de votre fonction Lambda.

L'autorisation que devrait avoir la stratégie est celle lambda:InvokeFunctionUrl. Vous pouvez utiliser l'éditeur d'autorisation graphique et placer l'ARN du lambda dans la section Ressources mentionnée dans la politique ci-dessus.


Conclusion

L'appel direct d'AWS Lambda simplifie les configurations d'API internes. En tirant parti de l'IAM pour l'authentification et en supprimant les middlewares inutiles, cette approche est à la fois efficace et facile à mettre en œuvre. Que vous créiez des microservices ou que vous gériez des tâches internes, cette méthode peut vous faire gagner du temps et des efforts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn