11
votes

AWS CloudWatch Event Puttargets n'ajout pas de sources d'événements Lambda

Je fais un appel à AWS Cloudwatchevent Puttrule & Puttarget API via AWS SDK pour créer une règle CloudWatch et y attacher une cible. Ma cible est une fonction lambda, la règle est créée, la cible est jointe à la règle, mais lorsque la règle déclenche la base de son calendrier, la fonction Lambda cible ne déclenche pas. Donc, j'ai examiné plus loin et découvert que la source d'événement sous la fonction Lambda n'est pas ajoutée, ce qui le rend pas déclenché. Si je crée la règle et la cible via la console AWS, la source d'événement est créée et tout fonctionne, mais pas l'API de Thorugh.


0 commentaires

5 Réponses :


0
votes

Autant que je sache, cela ne soit actuellement pas possible grâce au SDK, les sources d'événements CloudWatch ne peuvent être ajoutées qu'à Lambdas via la console comme indiqué ou à l'aide de la CLI. Si je me trompe, j'aimerais savoir ce qui est possible, mais la documentation ici semble être d'accord. http://docs.aws.amazon.com/LAMBDA /Latest/dg/with-Scheduled-events.html


2 commentaires

On dirait que c'est un cas, il est vraiment logique d'ajouter ceci au SDK autrement pas tellement d'utilisation, du moins dans mon cas.


D'accord. Malheureusement, cela semble être le cas avec beaucoup de fonctionnalités AWS.



8
votes

Vous devrez appeler l'autorisation d'addition après avoir ajouté la cible.

c'est (via boto3 pour moi):


3 commentaires

Cela doit être fait par CLI? droit? Je cherche quelque chose du côté SDK. Une autre chose, je ne veux pas créer d'événements à Lambda pour chaque règle. Je cherche une autorisation générique pour toutes les règles de surveillance de nuages. J'ai 1000 règles.


Après avoir supprimé ma règle, ils restent toujours sous la source d'événement Lambda et ils sont un peu désexcritures avec un statut inconnu. J'espère que quelqu'un d'Aws dit quelque chose à ce sujet.


@johnny Vous devrez peut-être aussi supprimer la permission.



2
votes

Il est possible d'ajouter des sources d'événements via AWS SDK. J'ai confronté le même problème et veuillez consulter le code ci-dessous comme solution à l'aide de Java.

     AddPermissionRequest addPermissionRequest = new AddPermissionRequest();
                addPermissionRequest.setStatementId("12345ff");  //any unique string would go
                addPermissionRequest.withSourceArn(ruleArn);
                addPermissionRequest.setAction("lambda:InvokeFunction");
                addPermissionRequest.setPrincipal("events.amazonaws.com");
                addPermissionRequest.setFunctionName("name of your lambda function");

                AWSLambdaAsyncClient lambdaClient = new AWSLambdaAsyncClient();
                lambdaClient.withRegion(Regions.US_EAST_1); //region of your lambda's location

lambdaClient.addPermission(addPermissionRequest);


0 commentaires

1
votes

J'avais le même problème ici, et je résous cela par ce que @anvita Shukla a sugitéd.

Cela a fonctionné bien quand je fais:

  • Créez la Lambda (cela a été créé dans la page Web)

    et avec sdk

    • Créer l'objet de la règle
    • Créer l'objet cible
    • Mettez la demande de la règle
    • Mettez la demande de la cible
    • Obtenez l'objet de réponse de la demande de règle de récupération de la règle ARN
    • Créer un objet d'autorisation (a dit @anvita Shukla) et définir la règle ARN
    • Ajout de la permission par l'objet client Lambda

      Dans la page AWS Lambda, je peux voir mes lambdas avec des événements de déclencheurs associés. Et dans la page AWS CloudWatch Events, je peux voir les règles créées. J'ai écrit cela à Java Lang. Si vous voulez, je peux partager le code.


0 commentaires

1
votes

Je l'ai corrigé. Vous devez ajouter la permission pour Lambda avec SourceArn, c'est nuage Watch après Puttargets. Par exemple: xxx


0 commentaires