我有一个lambda函数,它接受一个数据集名称,并专门为该数据集创建一个新的lambda.这是设置它的代码:
lambda_response = lambda_client.create_function(
FunctionName=job_name,
Runtime='python3.6',
Role=role_name,
Handler='streaming_data_lambda.lambda_handler',
Code={
'S3Bucket': code_bucket,
'S3Key': 'streaming_data_lambda.py.zip'
},
Timeout=30,
)
Run Code Online (Sandbox Code Playgroud)
这似乎正确地创建了一个lambda,并且在我手动启动它时起作用.我想让这个创建的lambda每小时运行一次,因此原始的lambda脚本会创建以下规则和目标:
rule_response = event_client.put_rule(
Name=rule_name,
ScheduleExpression=schedule_expression
)
event_client.put_targets(
Rule=rule_name,
Targets=[
{
'Id': lambda_response['FunctionName'],
'Arn': lambda_response['FunctionArn'],
'Input': json.dumps(input_string)
}
]
)
Run Code Online (Sandbox Code Playgroud)
其中input_string就像{"datasetName":"name"}.我可以在CloudWatch Rules UI中看到规则,并且可以看到它链接到正确的lambda并且输入文本存在.它也每小时正确触发,但无法调用lambda函数.如果我在UI中查看lambda并添加我在Designer部分创建的CloudWatch事件规则作为触发器,那么它正确地启动lambda,但是有一些方法可以在Python中设置它,所以我不这样做用户界面必须做最后一步吗?
python amazon-web-services amazon-cloudwatch boto3 aws-lambda