Изучение различных методов сопоставления источников событий AWS Lambda с вызовом опроса

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

Метод 1. Использование Amazon EventBridge

Amazon EventBridge — это бессерверная служба шины событий, которая упрощает архитектуры, управляемые событиями. Используя EventBridge, вы можете легко настроить AWS Lambda для получения событий из разных источников. Чтобы настроить сопоставление источников событий с вызовом опроса с помощью EventBridge, выполните следующие действия:

  1. Создайте правило EventBridge для регистрации нужных событий.
  2. Настройте правило для функции Lambda.
  3. Укажите желаемый интервал опроса для сопоставления источников событий.

Пример кода:

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. Вот как это можно настроить:

  1. Создайте корзину S3 и загрузите объекты, которые хотите отслеживать.
  2. Настройте функцию Lambda для использования сегмента S3 в качестве источника событий.
  3. Укажите желаемый интервал опроса для сопоставления источников событий.

Пример кода:

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 на основе событий из разных источников. Эти методы обеспечивают гибкость и масштабируемость при создании бессерверных приложений.