2017-08-08 6 views
1

Je suis curieux de savoir si nous pouvons créer un déclencheur sur un seau AWS S3 par programmation?Comment ajouter un déclencheur AWS-Lambda sur S3-Bucket avec CLI

Given est un S3-Bucket et une fonction AWS Lambda. La fonction AWS Lambda a été créée par CLI et peut être mise à jour/recréée à tout moment avec des commandes basées sur CLI.

aws lambda create-function \ 
--region us-east-1 \ 
--function-name encodeVideo \ 
--zip-file fileb:///tmp/encode_video.zip \ 
--role $LAMBDA_ROLE_ARN \ 
--handler encode_video.handler \ 
--runtime nodejs6.10 \ 
--timeout 10 \ 
--memory-size 1024 


aws lambda add-permission \ 
--function-name encodeVideo \ 
--region us-east-1 \ 
--statement-id some-unique-id \ 
--action "lambda:InvokeFunction" \ 
--principal s3.amazonaws.com \ 
--source-arn arn:aws:s3:::**** \ 
--source-account *********** 

Maintenant, je veux configurer un seau S3 qu'il invoquera la fonction Lambda automatiquement sur chaque nouvel objet qui a été créé. Pour l'instant je l'ai fait dans AWS Console dans le navigateur Web comme on peut le voir dans la capture d'écran. Mais je veux être capable de configurer tout le scénario avec des commandes CLI. Comment puis-je faire ceci?

J'ai compris qu'il a besoin de quelque chose comme:

aws s3api put-bucket-notification-configuration --region us-east-1 \ 
--bucket **** \ 
--notification-configuration file://encodeVideoConfiguration.json 

Mais je ne pouvais pas comprendre ce que le contenu de encodeVideoConfiguration.json devrait être?

enter image description here

Répondre

2

La structure du document de --notification-configuration est décrit en détail à AWS CLI docs pour le même appel:

{ 
    "TopicConfigurations": [ 
    { 
     "Id": "string", 
     "TopicArn": "string", 
     "Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...], 
     "Filter": { 
     "Key": { 
      "FilterRules": [ 
      { 
       "Name": "prefix"|"suffix", 
       "Value": "string" 
      } 
      ... 
      ] 
     } 
     } 
    } 
    ... 
    ], 
    "QueueConfigurations": [ 
    { 
     "Id": "string", 
     "QueueArn": "string", 
     "Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...], 
     "Filter": { 
     "Key": { 
      "FilterRules": [ 
      { 
       "Name": "prefix"|"suffix", 
       "Value": "string" 
      } 
      ... 
      ] 
     } 
     } 
    } 
    ... 
    ], 
    "LambdaFunctionConfigurations": [ 
    { 
     "Id": "string", 
     "LambdaFunctionArn": "string", 
     "Events": ["s3:ReducedRedundancyLostObject"|"s3:ObjectCreated:*"|"s3:ObjectCreated:Put"|"s3:ObjectCreated:Post"|"s3:ObjectCreated:Copy"|"s3:ObjectCreated:CompleteMultipartUpload"|"s3:ObjectRemoved:*"|"s3:ObjectRemoved:Delete"|"s3:ObjectRemoved:DeleteMarkerCreated", ...], 
     "Filter": { 
     "Key": { 
      "FilterRules": [ 
      { 
       "Name": "prefix"|"suffix", 
       "Value": "string" 
      } 
      ... 
      ] 
     } 
     } 
    } 
    ... 
    ] 
} 

Pour votre cas, vous simplement fournir le champ LambdaFunctionConfigurations de la structure JSON.