-1

Je veux recevoir des e-mails à chaque fois qu'un fichier est téléchargé dans s3 seau comme décrit dans le titre ci-dessus, j'utilise serverless, le problème est que l'événement que j'ai créé sur s3 me donne juste une notification sur la console s3-aws, et je ne sais pas comment configurer l'événement cloudwatch sur S3 pour déclencher lambda. Donc s'il vous plaît si quelqu'un sait comment déclencher des événements sur S3 en utilisant cloudwatch je suis tout ouïe. Voici mon code:Recevoir des e-mails à chaque fois qu'un fichier est téléchargé sur s3 sans serveur

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 

et voici mon fichier serverless.yml

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 
+0

Il semble que vous ayez un lambda qui est déclenché par un événement de téléchargement.Ce lambda est censé déclencher un email, non? Avez-vous vérifié les journaux pour le lambda pour voir s'il y a une erreur? Je vous suggère de vous connecter à l'événement pour vous assurer que vous le recevez. –

+0

Sauf si vous avez besoin de la flexibilité offerte par l'écriture de code, vous pouvez simplement configurer un événement S3 à publier sur un sujet SNS et vous abonner à ce sujet par adresse e-mail. – jarmod

Répondre

0

Si votre devise est juste pour recevoir une notification par e-mail des opérations sur un seau S3, alors vous ne avez pas besoin des fonctions lambda pour ça. Pour le cas d'utilisation mentionné dans la question, vous pouvez réaliser cela en utilisant le sujet SNS et les événements S3. Je vais mentionner les étapes à suivre à partir de la console (à travers le même peut être réalisé via sdk ou cli).

1) Créez un Topic en utilisant la console SNS.

2) Abonnez-vous au sujet. Utilisez email comme protocole de communication et fournissez votre email-id.

3) Vous recevrez un courriel vous demandant de confirmer votre inscription au sujet. Confirmez l'abonnement.

4) IMPORTANT: Remplacer la politique d'accès du sujet à la politique ci-dessous:

{ 
    "Version": "2008-10-17", 
    "Id": "__default_policy_ID", 
    "Statement": [ 
    { 
     "Sid": "__default_statement_ID", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "SNS:Publish", 
     "Resource": "sns-topic-arn", 
     "Condition": { 
     "ArnLike": { 
      "aws:SourceArn": "arn:aws:s3:*:*:s3-bucket-name" 
     } 
     } 
    } 
    ] 
} 

Fondamentalement, vous donnez la permission de votre s3-seau publier sur le sujet SNS.

Remplacer sns-sujet-arn avec votre du sujet ARN créé ci-dessus. Répliquer s3-bucket-name avec le nom de votre compartiment pour lequel vous souhaitez recevoir des notifications.

5) Allez à la console S3. Cliquez sur votre compartiment S3 et ouvrez l'onglet Propriétés.

6) Sous Paramètres avancés, Cliquez sur Events Card.

7) Cliquez sur Ajoutez les notifications et entrez des valeurs. Un échantillon a été montré ci-dessous.

enter image description here

Sélectionnez les s3-événements nécessaires pour surveiller et le sujet SNS créés.

8) Cliquez sur Enregistrer. Maintenant, vous devriez commencer à recevoir des notifications sur votre email.

+0

je vous remercie pour votre réponse, je veux faire tout cela en utilisant sans serveur, c'est pourquoi je poste la question. Je pense que la majorité n'a pas compris mon problème. – ner