Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

How to associate an event bus created via boto3 with a mongodb event trigger?

0

I have an event bus that I created through boto3. Now, this event bus needs to get information from a mongodb trigger (https://cloud.mongodb.com/v2/662b391615a47202d49f2fa0#/triggers/66b09906efb4ea73e72cd7dd) How to associate this mongodb trigger with the event bus?

This is the code i used to create the event bus

import boto3
import json
from botocore.exceptions import ClientError
#mongotriggerid = '66752f191141184fc363c657'
session = boto3.Session(
      aws_access_key_id=userdata.get('AWS_ACCESS_KEY_VALUE'),
      aws_secret_access_key=userdata.get('AWS_SECRET_KEY_VALUE'),
      region_name='us-east-1'
  )
eventbridge = session.client('events', region_name='us-east-1')

# Function to create an event bus if it doesn't exist
def create_event_bus(event_bus_name):
    try:
        response = eventbridge.create_event_bus(
            Name=event_bus_name,
            #EventSourceName='string',
            Description='Event bus which will bring information from MongoDB Trigger to Event Bridge Rule'
            #KmsKeyIdentifier='string',
            #DeadLetterConfig={
            #    'Arn': 'string'
            #},
            #Tags=[
            #    {
            #        'Key': 'string',
            #        'Value': 'string'
            #    },
            #]
        )
        print(f"Event bus '{event_bus_name}' created.")
        return response #response['Arn']
    except ClientError as e:
        if 'ResourceAlreadyExistsException' in str(e):
            print(f"Event bus '{event_bus_name}' already exists.")
            response = eventbridge.describe_event_bus(
                Name=event_bus_name
            )
            return response['Arn']
        else:
            raise e

# Event bus name
event_bus_name = "test-event-bus-1"#'aws.partner/mongodb.com/stitch.trigger/'+ mongotriggerid

# Create the event bus or get its ARN if it already exists
event_bus_arn = create_event_bus(event_bus_name)

# Define the event pattern
event_pattern = {
    "source": [{
        "prefix": "aws.partner/mongodb.com"
    }]
}

# Create or update the rule
response = eventbridge.put_rule(
    Name='darwin-early-cancer-detection-crawl-job',
    Description='Send the event to an SQS Queue which would invoke the lambda function for Crawl job for a new company.',
    EventPattern=json.dumps(event_pattern),
    State='ENABLED',
    EventBusName=event_bus_name,
    Tags=[
        {
            'Key': 'owner',
            'Value': 'decibio-grazitti'
        }
    ]
)

rule_arn = response['RuleArn']

# Add target to the rule
response = eventbridge.put_targets(
    Rule='darwin-early-cancer-detection-crawl-job',
    EventBusName=event_bus_name,
    Targets=[
        {
            'Id': '1',  # Unique identifier for the target
            'Arn': '#########################',
            'InputPath': '$',
            'RetryPolicy': {
                'MaximumRetryAttempts': 0,
                'MaximumEventAgeInSeconds': 86400  # 24 hours
            },
            'SqsParameters': {
                'MessageGroupId': '2'
            },
        }
    ]
)

print('Rule ARN:', rule_arn)
print('Target response:', response)
1 Antwort
1

Hello,

Please try this solution.

To associate a MongoDB trigger with an AWS EventBridge event bus fellow below step.

To Create an AWS Lambda Function:

This function will forward MongoDB trigger events to EventBridge.

import json
import boto3

def lambda_handler(event, context):
    eventbridge = boto3.client('events')
    
    # Prepare and send the event to EventBridge
    response = eventbridge.put_events(
        Entries=[
            {
                'Source': 'mongodb.trigger',
                'DetailType': 'MongoDB Trigger Event',
                'Detail': json.dumps(event),
                'EventBusName': 'test-event-bus-1'  # Replace with your EventBus name
            }
        ]
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('Event sent to EventBridge')
    }

Deploy the Lambda Function:

Deploy the Lambda function and note its ARN.

Configure MongoDB Trigger:

Set up your MongoDB trigger to invoke the Lambda function. This sends MongoDB events to the Lambda function.

Update EventBridge Rule:

the EventBridge rule targets the Lambda function. Modify the existing rule or create a new one.

import boto3

session = boto3.Session(
    aws_access_key_id='YOUR_ACCESS_KEY',
    aws_secret_access_key='YOUR_SECRET_KEY',
    region_name='YOUR_REGION'
)
eventbridge = session.client('events')

response = eventbridge.put_targets(
    Rule='darwin-early-cancer-detection-crawl-job',  # Your rule name
    EventBusName='test-event-bus-1',  # Your EventBus name
    Targets=[
        {
            'Id': '1',
            'Arn': 'arn:aws:lambda:your-region:your-account-id:function:your-lambda-function-name',
            'InputPath': '$'
        }
    ]
)

This setup forwards events from MongoDB triggers through a Lambda function to your EventBridge event bus, allowing you to integrate MongoDB events with AWS services.

https://aws.amazon.com/blogs/compute/ingesting-mongodb-atlas-data-using-amazon-eventbridge/

https://hands-on.cloud/eventbridge-building-loosely-coupled-event-drivent-serverless-architectures/#google_vignette

https://www.mongodb.com/docs/atlas/app-services/triggers/aws-eventbridge/

EXPERTE
beantwortet vor 4 Monaten
profile picture
EXPERTE
überprüft vor 4 Monaten
profile pictureAWS
EXPERTE
überprüft vor 4 Monaten
  • Can I just use the code

    response = eventbridge.put_events(
        Entries=[
            {
                'Source': 'mongodb.trigger',
                'DetailType': 'MongoDB Trigger Event',
                'Detail': json.dumps(event),
                'EventBusName': 'test-event-bus-1'  # Replace with your EventBus name
            }
        ]
    )
    

    directly in a single function which creates event bus and associates mongodb trigger with it?

    Secondly, do i have to put the mongodb trigger details anywhere?

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen