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é.
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
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.
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.
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
.
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).
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
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.
Il se peut que vous vous connectiez déjà, nous ne trouvions pas les journaux que nous attendions.
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.
CloudWatch
& CloudWatch Logs
sont des autorisations différentes, vous devez ajouter CloudWatch Logs
à la stratégie qui s'est jointe à votre rôle.
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.
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.
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.