Maison >développement back-end >tutoriel php >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 : invoquer AWS Lambda directement.
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.
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.
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 :
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.
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
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.
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.
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 :
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.
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!