簡體   English   中英

無法通過上傳到AWS S3來觸發AWS Lambda

[英]Unable to trigger AWS Lambda by upload to AWS S3

我正在嘗試構建一個Kibana儀表板,該儀表板填充有通過AWS Kinesis firehose收集的twitter數據,其中數據傳遞到S3存儲桶中,該S3存儲桶觸發Lambda函數,該函數將數據傳遞到AWS Elastic Search,然后傳遞到Kibana。 我正在關注這個博客https://aws.amazon.com/blogs/big-data/building-a-near-real-time-discovery-platform-with-aws/

數據已正確加載到S3存儲桶中,但從未到達Kibana,我相信這是因為Lambda函數並未像我希望的那樣被S3中的事件觸發(沒有調用或日志)。 我認為這是因為我沒有正確設置權限。 可以通過測試事件手動調用Lambda函數。

在Lambda函數頁面上,我選擇了一個名為lambda_s3_exec_role的現有角色,該角色具有附加的AWSLambdaExecute策略,但是我感覺缺少其他一些針對S3的角色。 我無法在創建lambda函數部分的博客中關注此行,因為我無法識別這些選項:

“ 10.選擇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"
    }
  ]
}

您列出的權限看起來不錯,因此我將嘗試提供一些可能有助於發現問題的步驟,因為很難明確地了解您的問題所在。

  1. 執行角色是否與lambda.amazonaws.com的受信任實體具有信任關系
  2. 您的事件前綴是否與firehose中的前綴匹配? 在本教程中,它們都是twitter/raw-data/ 如果firehose正在寫入不是事件前綴的路徑,則不會調用該事件。
  3. 手動調用時,lambda是否觸發任何錯誤
  4. 手動調用時,lambda是否寫入日志
  5. 使用虛擬數據(以下示例數據)測試lambda

命令行界面

aws lambda invoke \
--invocation-type RequestResponse \
--function-name helloworld \
--region region \
--log-type Tail \
--payload file://dummy_event.json \
--profile adminuser \
outputfile.txt 

示例數據

資源

dummy_event.json

{
   "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"
            }
         }
      }
   ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM