web-dev-qa-db-fra.com

Impossible pour la fonction AWS Lambda de se connecter (sortie de texte) à CloudWatch

J'essaie de configurer une fonction Lambda qui traitera un fichier lorsqu'il sera chargé dans un compartiment S3. J'ai besoin d'un moyen de voir la sortie de console.log lorsque je télécharge un fichier, mais je ne vois pas comment lier ma fonction Lambda à CloudWatch.

J'ai pensé à l'objet context que mon groupe de journaux était /aws/lambda/wavToMp3 et que le flux de journaux était 2016/05/23/[$LATEST]hex_code_redacted. J'ai donc créé ce groupe et ce flux dans CloudWatch, mais rien ne lui est connecté.

38
ffxsam

Pour que la fonction lambda crée un flux de journal et publie des journaux sur cloudwatch, le rôle d'exécution lambda doit disposer des autorisations suivantes.

{
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                 "logs:CreateLogStream",
                 "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
} 

Reportez-vous à la documentation AWS suivante pour plus de détails http://docs.aws.Amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role

66
Shibashis

Après avoir mis à jour votre stratégie, il semble que vous deviez mettre à jour les paramètres de votre fonction pour actualiser toutes les instances de travail afin de lire les nouvelles stratégies. 

Ainsi, si vous cliquez simplement sur le bouton "Tester" de la console Lambda après avoir mis à jour votre stratégie de rôle dans IAM, les instances Lambda mises en cache disposeront toujours d'autorisations de rôle anciennes. Vous ne verrez donc aucun journal écrit dans les journaux Cloudwatch. 

Modifiez simplement votre délai d'attente d'une seconde et cliquez sur le bouton «Enregistrer et tester» pour que les journaux apparaissent dans Cloudwatch.

95
hoonoh

Pour que la fonction lambda puisse créer un flux de journaux et publier des journaux dans cloudwatch, le rôle d’exécution lambda doit disposer des autorisations suivantes:

J'ai déjà eu ces autorisations mais cela n'a pas fonctionné.

Modifiez simplement votre délai d'attente d'une seconde et cliquez sur le bouton «Enregistrer et tester» pour que les journaux apparaissent dans Cloudwatch.

J'ai changé le délai d'attente, enregistré et les journaux ne fonctionnaient toujours pas.

J'ai assigné un autre rôle et les journaux ne fonctionnaient toujours pas. 

Ce qui a fini par travailler pour moi a été de cliquer sur "Créer un rôle personnalisé", puis sur "Autoriser". C'est ainsi que les journaux ont commencé à être générés, mais comme je ne voulais pas utiliser un nouveau rôle, mais mon rôle existant, j'ai simplement assigné mon rôle existant par la suite et cela a fonctionné. Donc, techniquement, j'aurais dû revenir à la configuration d'origine qui ne fonctionnait pas mais maintenant, cela fonctionne. Allez comprendre.

12
tomusiaka

Apparemment, une autre nécessité pour la journalisation est que la fonction Lambda indique la fin; Par exemple, dans le contexte Python, le gestionnaire doit renvoyer autre chose que None.

3
Vic

Assurez-vous que vous avez le chemin complet de votre "rôle existant" dans votre fonction lambda "Configuration":

Rôle: choisissez un rôle existant Rôle existant: service-role/yourRoleName

Pour une raison quelconque, taper uniquement yourRoleName fonctionnera pour certains services (comme SES), mais pas pour CloudWatch.

Vous pouvez également essayer de créer un nouveau rôle au lieu d’en utiliser un existant. Cela créera le rôle avec la configuration appropriée (espérons-le).

1

En effet, j'essayais de créer un groupe de journaux dans le script Cloudformation en: AWS :: Logs :: LogGroup , Puis d’essayer d’envoyer le journal Lambda à ce groupe de journaux. : P Novice Après une lecture attentive, j’ai trouvé que Lambda crée son propre journal avec le format susmentionné: /aws/lambda/Nous avons juste besoin de fournir une autorisation de stratégie pour ce groupe de journaux ou simplement une autorisation générique avec une ressource telle que: arn: aws: logs ::: *

j'espère que cela t'aides

0
Anupam Mahapatra

Comme d'autres réponses l'indiquent, vous devez donner à lambda l'autorisation de poster des journaux dans les journaux de surveillance en nuage. AWS avait fourni la politique AWSLambdaExecute rien que pour cela. C'est json c'est -

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Vous pouvez ajouter cette stratégie à votre rôle, qui est attribué à votre lambda, et vous devriez commencer à consulter les journaux.

REMARQUE: Il possède également un accès en lecture/écriture S3. Si vous ne le souhaitez pas, vous pouvez créer une stratégie personnalisée avec uniquement la partie journaux.

0
Aniket Thakur

Il se peut que vous vous connectiez déjà, nous ne trouvions pas les journaux que nous attendions.

par exemple.

app.use(function simpleLogger (req, res, next) {
  console.info('[Logger]', req.method, req.originalUrl)
  next()
})

Après avoir exécuté GET /hello?world=1,

Console locale: (simple et clair, Nice!)

[Logger] GET /hello?world=1

CloudWatch Logs: (pouvez-vous facilement trouver le journal exact ci-dessous?)

START RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0 Version: $LATEST
2018-12-04T09:26:11.236Z  a3552c34-f7a6-11e8-90ba-2fb886f31fb0  [Logger] GET /hello?world=1
END RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0
REPORT RequestId: a3552c34-f7a6-11e8-90ba-2fb886f31fb0  Duration: 41.02 ms  Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 29 MB

Conclusion: trop prolixe pour localiser les journaux d'origine.

0
Ken Berkeley

CloudWatch & CloudWatch Logs sont des autorisations différentes, vous devez ajouter CloudWatch Logs à la stratégie qui s'est jointe à votre rôle.

0
Sherry Li

Il existe un article intitulé Comment surveiller AWS Lambda avec CloudWatch avec une section intitulée "Comment utiliser les journaux CloudWatch avec Lambda". On dirait que vous avez déjà trouvé votre réponse, mais pour ceux qui ne connaissent pas les problèmes spécifiques d'IAM, cela peut aider.

0
mbarlocker

Peut-être un peu tard, mais pour ceux qui ont encore du mal à voir les journaux lambda dans cloudwatch. J'ai remarqué ceci à propos du rôle d'exécution de la fonction lambda: "Vous pouvez utiliser un rôle existant avec cette fonction. Notez que le rôle doit être assumé par Lambda et doit avoir les autorisations Cloudwatch Logs." Ainsi, dans IAM, j’ai accordé à "CloudWatchLogsFullAccess" le rôle que j’ai attribué à ma fonction. puis dans cloudwatch, sous journaux, vous verrez les journaux des fonctions affectées à ce rôle.

0
Clive Sargeant

J'ai rencontré ce problème mais aucune des réponses ci-dessus n'a résolu mon problème. Il s'est avéré que la région était en quelque sorte configurée en Ohio lorsque j'ai lancé CloudWatch pour la première fois. Après que je l'ai changé pour US East (N. Virginie), tout fonctionne bien.

0
xfx