Изучение бессерверных микросервисов AWS с помощью типов вызовов AWS Lambda

AWS Lambda произвела революцию в способах создания и развертывания бессерверных приложений. Благодаря способности выполнять код без необходимости предоставления серверов или управления ими Lambda позволяет разработчикам сосредоточиться исключительно на написании кода. В этой статье мы углубимся в концепцию бессерверных микросервисов AWS и рассмотрим различные типы вызовов, доступные в AWS Lambda, а также примеры кода.

  1. Синхронный вызов.
    Синхронный вызов — это тип вызова по умолчанию в AWS Lambda. Это означает, что вызывающая функция ожидает ответа от функции Lambda, прежде чем продолжить. Вот пример синхронного вызова с использованием AWS SDK для Node.js:
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
const params = {
  FunctionName: 'myLambdaFunction',
  InvocationType: 'RequestResponse',
  Payload: JSON.stringify({ /* payload data */ })
};
lambda.invoke(params, (err, data) => {
  if (err) console.log(err);
  else console.log(data.Payload);
});
  1. Асинхронный вызов.
    Асинхронный вызов позволяет вызывающей функции продолжить выполнение, не дожидаясь ответа от лямбда-функции. Вот пример асинхронного вызова с использованием AWS SDK для Python:
import boto3
lambda_client = boto3.client('lambda')
response = lambda_client.invoke(
    FunctionName='myLambdaFunction',
    InvocationType='Event',
    Payload=json.dumps({ /* payload data */ })
)
if response['StatusCode'] == 202:
    print("Lambda function invoked successfully.")
  1. Вызов события.
    Вызов события используется, когда вы хотите активировать функцию Lambda в ответ на событие, например создание объекта в корзине Amazon S3 или публикацию сообщения в теме Amazon SNS. Вот пример вызова события с использованием AWS SDK для Java:
import com.amazonaws.services.lambda.AWSLambda;
import com.amazonaws.services.lambda.AWSLambdaClientBuilder;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
AWSLambda lambda = AWSLambdaClientBuilder.defaultClient();
InvokeRequest request = new InvokeRequest()
    .withFunctionName("myLambdaFunction")
    .withInvocationType("Event")
    .withPayload("{ /* payload data */ }");
InvokeResult result = lambda.invoke(request);