AWS Lambda произвела революцию в бессерверных вычислениях, позволив разработчикам запускать свой код без необходимости выделять серверы или управлять ими. Одной из ключевых особенностей Lambda является сопоставление источников событий, которое позволяет запускать функции Lambda в ответ на события из различных источников. В этой статье мы погрузимся в мир сопоставления источников событий AWS Lambda с вызовом опроса и рассмотрим различные методы достижения этой цели. Итак, начнём!
Метод 1. Использование Amazon EventBridge
Amazon EventBridge — это бессерверная служба шины событий, которая упрощает архитектуры, управляемые событиями. Используя EventBridge, вы можете легко настроить AWS Lambda для получения событий из разных источников. Чтобы настроить сопоставление источников событий с вызовом опроса с помощью EventBridge, выполните следующие действия:
- Создайте правило EventBridge для регистрации нужных событий.
- Настройте правило для функции Lambda.
- Укажите желаемый интервал опроса для сопоставления источников событий.
Пример кода:
import boto3
eventbridge = boto3.client('events')
def create_eventbridge_rule(rule_name, event_pattern, lambda_function_arn):
response = eventbridge.put_rule(
Name=rule_name,
EventPattern=event_pattern,
State='ENABLED'
)
eventbridge.put_targets(
Rule=rule_name,
Targets=[
{
'Id': '1',
'Arn': lambda_function_arn
}
]
)
def create_event_source_mapping(lambda_function_name, event_source_arn, polling_interval):
lambda_client = boto3.client('lambda')
response = lambda_client.create_event_source_mapping(
FunctionName=lambda_function_name,
EventSourceArn=event_source_arn,
StartingPosition='LATEST',
BatchSize=1,
MaximumBatchingWindowInSeconds=60,
TumblingWindowInSeconds=60,
MaximumRecordAgeInSeconds=60,
BisectBatchOnFunctionError=True,
MaximumRetryAttempts=3,
ParallelizationFactor=1,
DestinationConfig={
'OnSuccess': {
'Destination': 'arn:aws:lambda:us-east-1:123456789012:function:MyDestination'
},
'OnFailure': {
'Destination': 'arn:aws:lambda:us-east-1:123456789012:function:MyDestination'
}
},
MaximumRetryAttempts=3,
PollingInterval=polling_interval,
)
# Usage
create_eventbridge_rule('my-event-rule', {'source': ['aws.s3']}, 'arn:aws:lambda:us-east-1:123456789012:function:my-lambda-function')
create_event_source_mapping('my-lambda-function', 'arn:aws:s3:::my-bucket', 300)
Метод 2. Использование опроса Amazon S3
Если вы хотите активировать функцию Lambda в ответ на события Amazon S3, вы можете использовать метод опроса Amazon S3. Этот метод периодически опрашивает указанную корзину S3 на наличие новых объектов и соответствующим образом запускает функцию Lambda. Вот как это можно настроить:
- Создайте корзину S3 и загрузите объекты, которые хотите отслеживать.
- Настройте функцию Lambda для использования сегмента S3 в качестве источника событий.
- Укажите желаемый интервал опроса для сопоставления источников событий.
Пример кода:
import boto3
s3 = boto3.client('s3')
def create_s3_bucket(bucket_name):
response = s3.create_bucket(
Bucket=bucket_name
)
def create_event_source_mapping(lambda_function_name, event_source_arn, polling_interval):
lambda_client = boto3.client('lambda')
response = lambda_client.create_event_source_mapping(
FunctionName=lambda_function_name,
EventSourceArn=event_source_arn,
StartingPosition='LATEST',
BatchSize=1,
MaximumBatchingWindowInSeconds=60,
TumblingWindowInSeconds=60,
MaximumRecordAgeInSeconds=60,
BisectBatchOnFunctionError=True,
MaximumRetryAttempts=3,
ParallelizationFactor=1,
DestinationConfig={
'OnSuccess': {
'Destination': 'arn:aws:lambda:us-east-1:123456789012:function:MyDestination'
},
'OnFailure': {
'Destination': 'arn:aws:lambda:us-east-1:123456789012:function:MyDestination'
}
},
MaximumRetryAttempts=3,
PollingInterval=polling_interval,
)
# Usage
create_s3_bucket('my-bucket')
create_event_source_mapping('my-lambda-function', 'arn:aws:s3:::my-bucket', 300)
В этой статье мы рассмотрели два метода сопоставления источников событий AWS Lambda с вызовом опроса. Используя такие сервисы, как Amazon EventBridge и Amazon S3, разработчики могут легко настраивать архитектуры, управляемые событиями, и запускать функции Lambda на основе событий из разных источников. Эти методы обеспечивают гибкость и масштабируемость при создании бессерверных приложений.