python - Cloudwatch 事件没有触发我的 lambda 函数,即使它是一个目标

标签 python amazon-web-services aws-lambda boto3 amazon-cloudwatch

我有一个 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,
    )

这似乎正确地创建了一个 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)
        }
    ]
)

其中 input_string 类似于 {"datasetName": "name"}。我可以在 CloudWatch Rules UI 中看到该规则,并且可以看到它链接到正确的 lambda 并且存在输入文本。它也每小时正确触发一次,但无法调用 lambda 函数。如果我查看 UI 中的 lambda 并将我创建的 CloudWatch 事件规则添加为那里的 Designer 部分中的触发器,那么它会正确启动 lambda,但是是否有某种方法可以在 Python 中进行设置,所以我不这样做必须在 UI 中执行最后一步吗?

最佳答案

对于将来可能正在寻找此问题答案的任何人 - 您需要为 cloudwatch 事件添加权限以调用您的 lambda 函数,如下所示:

    lambda_client.add_permission(
         FunctionName=lambda_response['FunctionName'],
         StatementId=some_random_number,
         Action='lambda:InvokeFunction',
         Principal='events.amazonaws.com',
         SourceArn=rule_response['RuleArn']
    )

关于python - Cloudwatch 事件没有触发我的 lambda 函数,即使它是一个目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49755781/

相关文章:

amazon-web-services - 使用 gitlab CI 通过 CLI 创建 lambda 函数时出错(错误解析参数 '--zip-file' : Unable to load paramfile)

python - 如何从网络中的特定边缘获取节点?

python - 修复 *displaying* 在 python 中 float 时的精度问题

python - 客户端从tornado网络服务器下载完成后如何调用函数?

amazon-web-services - Erlang 亚马逊网络服务 (AWS) EC2 API

amazon-web-services - Aws lambda 函数 addPermission 错误 : PolicyLengthExceededException

python - python 中的 Ical - 删除事件

php - 检查文件是否存在于 Amazon s3 签名 URL 上

ubuntu - 使用 Chef 和 Knife 引导一个 ubuntu ec2 实例

javascript - 如何为 AWS Lambda nodejs 运行时构建单个 js 文件