0

我想用無服務器應用模型(SAM)和CloudFormation創建時,在S3存儲桶(例如thescore-cloudfront-trial)創建一個對象,它被觸發一個簡單的lambda函數。如何啓用S3存儲區到Lambda函數的觸發器?以下是我的python3 boto3代碼。AWS無服務器應用模式:創建S3事件與λ

region = 'us-east-1' 
    import boto3 

    test_lambda_template = { 
     'AWSTemplateFormatVersion': '2010-09-09', 
     'Transform': 'AWS::Serverless-2016-10-31', 
     'Resources': { 
      'CopyS3RajivCloudF': { 
       'Type': 'AWS::Serverless::Function', 

       'Properties': { 
        "CodeUri": 's3://my-tmp/CopyS3Lambda', 
        "Handler": 'lambda.handler', 
        "Runtime": 'python3.6', 
        "Timeout": 300, 
        "Role": 'my_existing_role_arn' 
       }, 
       'Events': { 
        'Type': 'S3', 
        'Properties': { 
         "Bucket": "thescore-cloudfront-trial", 
         "Events": 's3:ObjectCreated:*' 

        } 

       } 
      }, 
      'SrcBucket': { 
       "Type": "AWS::S3::Bucket", 
       "Properties": { 
        "BucketName": 'thescore-cloudfront-trial', 
       } 
      } 

     } 

    } 

    conf = config.get_aws_config('development') 
    client = aws.client(conf, 'cloudformation', region_name=region) 
    response = client.create_change_set(
     StackName='RajivTestStack', 
     TemplateBody=json.dumps(test_lambda_template), 
     Capabilities=['CAPABILITY_IAM'], 
     ChangeSetName='a', 
     Description='Rajiv ChangeSet Description', 
     ChangeSetType='CREATE' 
    ) 

    response = client.execute_change_set(
     ChangeSetName='a', 
     StackName='RajivTestStack', 
    ) 
+1

你有沒有考慮閱讀[文檔](http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html)? – stdunbar

+0

1.使用AWS控制檯在您的S3存儲桶中添加一個觸發器。 2.使用boto3添加您的活動:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.put_bucket_notification_configuration – mootmoot

+0

@mootmoot:我已經有Python腳本你做什麼所列: )。我想轉移到SAM。 – RAbraham

回答

0

我想通了帶警告

買者1:觸發通知將顯示在控制檯S3,但不是在LAMBDA控制檯。我使用boto3 s3和lambda客戶端(我想要替換)的現有python部署腳本在兩個控制檯中顯示通知。

買者2:用於監控,我看到我的拉姆達觸發只有當我切換到看到拉姆達別名視圖。但是我沒有爲我的lambda指定一個別名。所以我不知道爲什麼我沒有看到它在非別名視圖(只看到最新版本)

我不得不修改Events關鍵是這樣的:

'Events': { 
    'RajivCopyEvent': { 
     'Type': 'S3', 
     'Properties': { 
     "Bucket": {"Ref": "SrcBucket"}, 
     "Events": "s3:ObjectCreated:*" 

     } 
    } 

}