8 votes

Comment créer un déclencheur de logs CloudWatch pour AWS Lambda en utilisant aws ruby SDK ?

Je sais qu'il devrait y avoir un moyen de créer un déclencheur pour AWS Lambda en utilisant aws ruby sdk (tout comme il est possible de le faire avec AWS Management Console).

*Mise à jour, j'ai pu trouver un moyen de créer un trigger. J'utilise le code suivant pour le faire :

@cloudwatchlogs = Aws::CloudWatchLogs::Client.new(region: region, credentials: Aws::Credentials.new(aws_access_key_id, aws_secret_access_key))
@cloudwatchlogs.put_subscription_filter({
   log_group_name: "RDSOSMetrics",
   filter_name: "RDS metrics filter",
   filter_pattern: "RDS metrics filter pattern",
   destination_arn: function_arn
})

J'obtiens l'erreur suivante en essayant de le faire :

*** Aws::CloudWatchLogs::Errors::InvalidParameterException Exception: Could not execute the lambda function. Make sure you have given CloudWatch Logs permission to execute your function

Juste pour le tester, j'ai le rôle X qui est attaché à la fonction Lambda et ce rôle a la politique AWSLambdaFullAccess ajoutée à lui, mais j'obtiens toujours cette erreur.

Tout autre élément manquant

Merci, Bakir

3voto

Les autorisations CloudWatch Logs peuvent être ajoutées avec :

client.add_permission({
    action: "lambda:InvokeFunction",
    function_name: function_arn,
    principal: "logs." + region + ".amazonaws.com",
    source_account: account_id,
    source_arn: "arn:aws:logs:" + region + ":" + account_id + ":log-group:" + log_group_name + ":*",
    statement_id: unique_identifier,
})

Où ?

  • fonction_arn est l'identifiant de votre fonction, similaire à arn:aws:lambda:eu-west-1:111111111111:function:yourFunctionName
  • région est le nom de votre région de service, similaire à eu-west-1
  • account_id est l'identifiant de votre compte, similaire à 111111111111
  • nom_du_groupe_de_logiciels est le nom des journaux à partir desquels le flux sera diffusé, comme dans le cas suivant /aws/lambda/logGroupName
  • identifiant unique une chaîne aléatoire à utiliser dans la déclaration de politique générale. Par exemple ID-1

Il doit être exécuté dans l'ordre suivant :

  • Créer une fonction Lambda et un groupe Log
  • Ajouter des autorisations
  • Mettre un filtre d'abonnement

Plus d'informations :


Nota le symbole de l'astérisque à la fin de source_arn :

arn:aws:logs:eu-west-1:111111111111:log-group:logGroup:*
arn:aws:logs:eu-west-1:111111111111:log-group:logGroup

Il est arn des flux de données, et non arn du groupe logarithmique. Il m'a fallu un certain temps pour déboguer ce problème (jusqu'à ce que je trouve l'erreur avec aws lambda get-policy )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X