Ich möchte E-Mails erhalten, wenn eine Datei wie oben im Titel beschrieben in s3 Eimer hochgeladen wird, ich benutze Serverless, das Problem ist, dass das Ereignis, das ich erstellt habe auf s3 gibt mir nur eine benachrichtigung auf der s3-aws-konsole, und ich weiß nicht, wie man das cloudwatch-ereignis auf S3 konfiguriert, um lambda auszulösen. Also bitte, wenn jemand weiß, wie man Ereignisse auf S3 mit cloudwatch auslöst, bin ich ganz Ohr. Hier ist mein Code:E-Mails erhalten, wenn eine Datei auf s3 Bucket mit Serverless hochgeladen wird
import json
import boto3
import botocore
import logging
import sys
import os
import traceback
from botocore.exceptions import ClientError
from pprint import pprint
from time import strftime, gmtime
email_from = '*****@******.com'
email_to = '******@******.com'
#email_cc = '********@gmail.com'
email_subject = 'new event on s3 '
email_body = 'a new file is uploaded'
#setup simple logging for INFO
logger = logging.getLogger()
logger.setLevel(logging.INFO)
from botocore.exceptions import ClientError
def sthree(event, context):
"""Send email whenever a file is uploaded to S3"""
body = {}
status_code = 200
try:
s3 = boto3.client('s3')
ses = boto3.client('ses')
response = ses.send_email(Source = email_from,
Destination = {'ToAddresses': [email_to,],},
Message = {'Subject': {'Data': email_subject}, 'Body':{'Text' : {'Data': email_body}}}
)
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
und hier ist meine serverless.yml Datei
service: aws-python # NOTE: update this with your service name
plugins:
- serverless-external-s3-event
provider: name: aws
runtime: python2.7
stage: dev
region: us-east-1
iamRoleStatements:
- Effect: "Allow"
Action:
- s3:*
- "ses:SendEmail"
- "ses:SendRawEmail"
- "s3:PutBucketNotification"
Resource: "*"
functions: sthree:
handler: handler.sthree
description: send mail whenever a file is uploaded on S3
events:
- s3:
bucket: cartegie-nirmine
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
- suffix: .jpg
- cloudwatchEvent:
description: 'CloudWatch Event triggered '
event:
source:
- "aws.S3"
detail-type:
- "S3 event Notification"
enabled : true
Es sieht so aus, als ob Sie ein Lambda haben, das von einem Upload-Ereignis ausgelöst wird.Dieses Lambda soll eine E-Mail auslösen, oder? Haben Sie die Protokolle für Lambda überprüft, um festzustellen, ob ein Fehler vorliegt? Ich schlage vor, dass Sie das Ereignis protokollieren, um sicherzustellen, dass Sie es erhalten. –
Sofern Sie nicht die Flexibilität benötigen, die Ihnen das Schreiben von Code bietet, können Sie einfach ein S3-Ereignis zur Veröffentlichung in einem SNS-Thema konfigurieren und dieses Thema per E-Mail-Adresse abonnieren. – jarmod