web-dev-qa-db-fra.com

Comment ajouter un déclencheur à une fonction AWS Lambda à l'aide de l'AWS CLI?

N'importe quel moyen de le faire en utilisant AWS CLI?  Adding trigger using AWS Management Console

11
Stein-Tore Erdal

Les seules sources d'événements gérées au sein de la cli api de lambda sont Kinesis Streams et DynamoDb Streams. Vous pouvez les gérer avec le cli en utilisant aws lambda

Les événements de compartiment S3 sont gérés dans S3, car ils peuvent être envoyés aux sujets SNS, aux files d'attente SQS ou à la fonction Lambda. Vous devez donc utiliser les commandes aws s3api cli, en particulier put-bucket-notification-configuration

Dans l'argument --notification-configuration, vous aurez quelque chose comme:

{
  "LambdaFunctionConfigurations": [
    {
      "Id": "string",
      "LambdaFunctionArn": "string",
      "Events": [events]
    }
  ]
}

Où events est une liste de s3 events

11
Chris Simon

J'ai pu ajouter le déclencheur SNS pour lambda à l'aide de l'AWS CLI ci-dessous.

aws --region eu-west-1 lambda add-permission --function-name {{LAMBDA-FUNCTION-NAME}} --statement-id {{UNIQUE-ID}} --action "lambda:InvokeFunction" --principal sns.amazonaws.com --source-arn arn:aws:sns:us-east-1:77889900:{{SNS-TOPIC-ARN}}

Le sujet SNS peut également provenir d'une autre région.
J'espère que cela t'aides.

2
user1292364

Comme @ user1292364 l'a mentionné, nous devons utiliser add-permission pour le lambda. 

Le seul problème avec cela est que vous devez vous assurer que lambda to sns subscription est ajouté als o. Sinon, cette erreur se produira

A subscription for arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction on the topic HourlyLambdaFunction could not be found.

Je préférerais l'utiliser sur AWS CLI de la manière suivante:

#!/usr/bin/env bash

# Add Lambda to SNS as subscription
aws sns subscribe \
    --topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
    --protocol lambda \
    --notification-endpoint arn:aws:lambda:eu-west-1:276xxxxxx:function:HourlyLambdaFunction

# Give permissions to Lambda to access that subscription i.e. Add it through triggers
aws lambda add-permission \
    --function-name HourlyLambdaFunction \
    --statement-id 276xxxxxx\
    --action "lambda:InvokeFunction" \
    --principal sns.amazonaws.com \
    --source-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction

# Send message to publish and trigger lamda
aws sns publish \
    --topic-arn arn:aws:sns:eu-west-1:276xxxxxx:HourlyLambdaFunction \
    --subject "HourlyLambdaFunction" \
    --message "{datawarehouse:banana_wh, database:banana_db, schema:banana. query:'select count(*) from banana.banana_loads;'}"

ps:\dans le code est une nouvelle ligne pour le script bash (si quelqu'un se le demande)

Les journaux de la fonction lambda sont disponibles sur Cloudwatch

1
Gunay Anach