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. p>
5 Réponses :
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 p>
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.
Vous devrez appeler l'autorisation d'addition code> code> après avoir ajouté la cible. p>
c'est (via boto3 em> pour moi): p>
voir Boto3 Documentation ou le CLI DOC . P >
ADD-Permission Code> avec la Lambda ARN LI>
ul>
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.
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);
J'avais le même problème ici, et je résous cela par ce que @anvita Shukla a sugitéd. P>
Cela a fonctionné bien quand je fais: p>
et avec sdk p>
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. P>
Je l'ai corrigé. Vous devez ajouter la permission pour Lambda avec SourceArn, c'est nuage Watch après Puttargets. Par exemple: