AWS Lambda произвела революцию в способах создания и развертывания бессерверных приложений. Благодаря способности выполнять код без необходимости предоставления серверов или управления ими Lambda позволяет разработчикам сосредоточиться исключительно на написании кода. В этой статье мы углубимся в концепцию бессерверных микросервисов AWS и рассмотрим различные типы вызовов, доступные в AWS Lambda, а также примеры кода.
- Синхронный вызов.
Синхронный вызов — это тип вызова по умолчанию в 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);
});
- Асинхронный вызов.
Асинхронный вызов позволяет вызывающей функции продолжить выполнение, не дожидаясь ответа от лямбда-функции. Вот пример асинхронного вызова с использованием 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.")
- Вызов события.
Вызов события используется, когда вы хотите активировать функцию 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);