An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
August 18, 2022 03:07 am GMT
Original Link: https://dev.to/leifengflying/use-boto3-create-eventbridge-rule-tigger-lambda-function-blj
Use Boto3 create EventBridge-Rule tigger Lambda Function
Hi,Guys,This article I will teach you how to use python3 to create EventBridge Rule and tigger it to lambda function
If you don't have too much time,I will do this
somebody say:"Cut the crap and show me your code"
import osimport timeimport boto3from botocore.config import Configlambda_client = boto3.client('lambda',config=Config(region_name=os.environ['AWS_REGION']))event_client = boto3.client('events',config=Config(region_name=os.environ['AWS_REGION']))def lambda_handler(event, context): rule_name = 'LeifengRule' # Define a var for rule_name cron_sec = 'cron(59 23 * * ? *)' # Define a var for cron lambda_fc_name = 'LeifengFC' # Define a var for lambda name lambda_fc_arn = 'arn:aws:lambda:us-east-1:431660491089:function:LeifengFC' # Here you need copy the lambda_fc_name function arn add_permission_role_arn = 'arn:aws:iam::431660491089:role/add_permission' # put create role ARN # use boto3 create a rule create_rule_resp = event_client.put_rule( Name=rule_name, # There put your rule name ScheduleExpression=cron_sec, # there put your cron State='ENABLED', # there set the rule state ENABLED or DISABLED EventBusName='default', # set eventbus ,I use default RoleArn=add_permission_role_arn ) put_target_resp = event_client.put_targets( Rule=rule_name, Targets=[{ 'Id': lambda_fc_name, 'Arn': lambda_fc_arn }] ) # use if to determine the lambda_fc_arn weather '$' exists # if the '$' in lambda_fc_arn,just remove from $ if '$' in lambda_fc_arn: lambda_fc_arn = lambda_fc_arn[:-8] add_lambda_permission = lambda_client.add_permission( FunctionName=lambda_fc_arn, StatementId=str(time.time())[-5:]+lambda_fc_name, Action='lambda:InvokeFunction', Principal='events.amazonaws.com', SourceArn=create_rule_resp['RuleArn'] )
1.Create IAM Role and Policy
1.1 Create add_permission role
1.1.1 Open AWS IAM console
Click here:https://us-east-1.console.aws.amazon.com/iam/home
1.1.2 Create a role
1.1.2.1 use the json file
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}
1.1.2.2 attach 2 policy to the role(lambda and event full access)
1.1.2.3 Remember the add_permission role ARN
1.2 Create lambda execute role
1.2.1 Open AWS IAM console
Click here:https://us-east-1.console.aws.amazon.com/iam/home
1.2.2 Create a role for lambda
1.2.3 set a name lambda_exec_role
1.2.4 check the role(not attach any policy)
1.3 Create a policy for lambda_exec_role
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:DeleteRule", "events:PutTargets", "events:DescribeRule", "events:ListRuleNamesByTarget", "events:EnableRule", "events:PutRule", "events:ListRules", "events:RemoveTargets", "events:ListTargetsByRule", "events:DisableRule", "lambda:ListFunctions", "lambda:AddPermission", "iam:PassRole" ], "Resource": "*" } ]}
1.4 attach lambda_exec_role_policy to lambda_exec_role
2.Create a lambda function
2.1 create a lambda function set runtime as python3.9
2.2 Copy the code to lambda
please replace rule_name cron_sec lambda_fc_name and lambda_fc_arn value
this code just show you
import osimport timeimport boto3from botocore.config import Configlambda_client = boto3.client('lambda',config=Config(region_name=os.environ['AWS_REGION']))event_client = boto3.client('events',config=Config(region_name=os.environ['AWS_REGION']))def lambda_handler(event, context): rule_name = 'LeifengRule' # Define a var for rule_name cron_sec = 'cron(59 23 * * ? *)' # Define a var for cron lambda_fc_name = 'LeifengFC' # Define a var for lambda name lambda_fc_arn = 'arn:aws:lambda:us-east-1:431660491089:function:LeifengFC' # Here you need copy the lambda_fc_name function arn add_permission_role_arn = 'arn:aws:iam::431660491089:role/add_permission' # put create role ARN # use boto3 create a rule create_rule_resp = event_client.put_rule( Name=rule_name, # There put your rule name ScheduleExpression=cron_sec, # there put your cron State='ENABLED', # there set the rule state ENABLED or DISABLED EventBusName='default', # set eventbus ,I use default RoleArn=add_permission_role_arn ) put_target_resp = event_client.put_targets( Rule=rule_name, Targets=[{ 'Id': lambda_fc_name, 'Arn': lambda_fc_arn }] ) # use if to determine the lambda_fc_arn weather '$' exists # if the '$' in lambda_fc_arn,just remove from $ if '$' in lambda_fc_arn: lambda_fc_arn = lambda_fc_arn[:-8] add_lambda_permission = lambda_client.add_permission( FunctionName=lambda_fc_arn, StatementId=str(time.time())[-5:]+lambda_fc_name, Action='lambda:InvokeFunction', Principal='events.amazonaws.com', SourceArn=create_rule_resp['RuleArn'] )
If this article can help you, I will be very happy,Thank you ,have a nice day!
Original Link: https://dev.to/leifengflying/use-boto3-create-eventbridge-rule-tigger-lambda-function-blj
Share this article:
Tweet
View Full Article
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To