Amazon web services 无法通过上载到AWS S3触发AWS Lambda

Amazon web services 无法通过上载到AWS S3触发AWS Lambda,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我正在尝试构建一个Kibana仪表板,该仪表板提供通过AWS Kinesis firehose收集的twitter数据,其中数据传递到一个S3存储桶,该存储桶触发一个Lambda函数,该函数将数据传递到AWS Elastic Search,然后传递到Kibana。我正在关注这个博客 数据正在正确加载到S3存储桶中,但它从未到达Kibana,我相信这是因为Lambda函数不是由S3中的事件触发的,我希望没有调用或日志。我想这是因为我没有正确设置权限。Lambda函数可以由测试事件手动调用 在Lam

我正在尝试构建一个Kibana仪表板,该仪表板提供通过AWS Kinesis firehose收集的twitter数据,其中数据传递到一个S3存储桶,该存储桶触发一个Lambda函数,该函数将数据传递到AWS Elastic Search,然后传递到Kibana。我正在关注这个博客

数据正在正确加载到S3存储桶中,但它从未到达Kibana,我相信这是因为Lambda函数不是由S3中的事件触发的,我希望没有调用或日志。我想这是因为我没有正确设置权限。Lambda函数可以由测试事件手动调用

在Lambda函数页面上,我选择了一个现有的角色,我称之为Lambda_s3_exec_role,该角色附加了AWSLambdaExecute策略,但我觉得我缺少了s3更具体的其他角色。我无法在博客的“创建lambda函数”部分中遵循这一行,因为我无法识别这些选项:

十,。选择lambda_s3_exec_role如果此值不存在,请选择创建新角色s3执行角色

是否有人可以帮助我为Lambda函数创建适当的角色/策略,或者找出问题所在

从我当前拥有的Lambda函数的查看权限:

功能策略

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "****",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "****",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::****"
        }
      }
    }
  ]
}
执行角色

{
  "roleName": "lambda_s3_exec_role",
  "policies": [
    {
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
          },
          {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
          }
        ]
      },
      "name": "AWSLambdaExecute",
      "id": "****",
      "type": "managed",
      "arn": "arn:aws:iam::aws:policy/AWSLambdaExecute"
    }
  ]
}

您列出的权限看起来正常,因此我将尝试提供一些可能有助于查找问题的步骤,因为很难明确了解您的问题可能在哪里

执行角色是否与lambda.amazonaws.com的受信任实体具有信任关系 您的事件前缀是否与firehose中的前缀匹配。在本教程中,它们都是twitter/raw data/。如果firehose正在写入的路径不是事件前缀,则不会调用该事件。 当您使用lambda时,它是否会触发任何错误 手动调用lambda时,lambda是否会写入日志 使用下面的虚拟数据示例数据测试lambda CLI 示例数据 dummy_event.json


能否从Lambda UI AWS控制台提供权限查看权限-键图标->功能策略/执行角色?问题确实指向权限。要么lambda出现了问题,您没有向Cloudwatch发送日志的权限,要么像您所说的,S3权限不足。看不到角色很难说。你能在这里发布它吗,或者检查它是否有S3和CW权限?对我来说权限看起来不错,最后要检查的是S3 Bucket:Properties->Advanced settings->Events。您可以在那里检查是否附加了适当的Lambda,以及什么样的事件屏幕截图将是有用的;当我导航到AWSLambdaExecute策略时,它表示该策略定义了一些不提供权限的操作、资源或条件。要授予访问权限,策略必须具有具有适用资源或条件的操作。在show more上,它表示,对于CloudWatch日志,一个或多个操作没有适用的资源。S3部分没有警告。嗯。。。也许可以试着在UI上传一些东西到那个bucket,如果触发了,检查Lambda日志。如果不是,则说明配置有问题。基本上,S3 Bucket事件应该指向该Lambda,并且如果Lambda拥有CloudWatch的权限,那么应该显示日志。您可以100%确认Lambda有权通过从UI手动调用来写入CloudWatch日志事件可能为空-仅检查是否会出现一些日志流此+1,我已将使用的测试事件添加到问题中。这是一个s3:Put的模板,我稍微修改了一下,但它拒绝了访问。我在运行测试时看到错误日志和调用。不确定信任关系,我将尝试找出如何检查。Firehose写入twitter/raw data/我在那里看到数据。因为你用*删除了你的名字,所以很难确定一些事情。也许用我的水桶什么的来代替它。我认为问题在于执行角色的资源,您可能同时需要arn:aws:s3::my_bucket和arn:aws:s3::my_bucket/*当我在控制台中转到执行策略时,它会说此策略定义了一些不提供权限的操作、资源或条件。若要授予访问权限,策略必须具有具有适用资源或条件的操作。请浏览本指南,了解获取有关这些警告的详细信息的方法
aws lambda invoke \
--invocation-type RequestResponse \
--function-name helloworld \
--region region \
--log-type Tail \
--payload file://dummy_event.json \
--profile adminuser \
outputfile.txt 
{
   "Records":[  
      {  
         "eventVersion":"2.0",
         "eventSource":"aws:s3",
         "awsRegion":"us-west-2",
         "eventTime":"1970-01-01T00:00:00.000Z",
         "eventName":"ObjectCreated:Put",
         "userIdentity":{  
            "principalId":"AIDAJDPLRKLG7UEXAMPLE"
         },
         "requestParameters":{  
            "sourceIPAddress":"127.0.0.1"
         },
         "responseElements":{  
            "x-amz-request-id":"C3D13FE58DE4C810",
            "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
         },
         "s3":{  
            "s3SchemaVersion":"1.0",
            "configurationId":"testConfigRule",
            "bucket":{  
               "name":"sourcebucket",
               "ownerIdentity":{  
                  "principalId":"A3NL1KOZZKExample"
               },
               "arn":"arn:aws:s3:::sourcebucket"
            },
            "object":{  
               "key":"HappyFace.jpg",
               "size":1024,
               "eTag":"d41d8cd98f00b204e9800998ecf8427e",
               "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko"
            }
         }
      }
   ]
}