Envoi des journaux de fonction Lambda à Amazon S3 - AWS Lambda

Envoi des journaux de fonction Lambda à Amazon S3

Vous pouvez configurer votre fonction Lambda pour envoyer des journaux directement à Amazon S3 à l’aide de la console Lambda. Cette fonctionnalité fournit une solution rentable pour le stockage des journaux à long terme et permet d’utiliser de puissantes options d’analyse à l’aide de services comme Athena.

Note

Vous pouvez configurer les journaux de fonction Lambda à envoyer à Amazon S3 à l’aide de la console Lambda, AWS CLI, AWS CloudFormation et de tous les SDK AWS.

Tarification

Pour plus d’informations de tarification, consultez Tarification d’Amazon CloudWatch.

Autorisations requises pour la destination du journal Amazon S3

Lorsque vous utilisez la console Lambda pour configurer Amazon S3 comme destination de journal de votre fonction, vous devez :

  1. Avoir les autorisations IAM requises pour utiliser CloudWatch Logs avec Lambda.

  2. Pour Configurer un filtre d’abonnements CloudWatch Logs pour envoyer les journaux de fonction Lambda à Amazon S3. Ce filtre définit quels événements de journal sont fournis à votre compartiment Amazon S3.

Configurer un filtre d’abonnements CloudWatch Logs pour envoyer les journaux de fonction Lambda à Amazon S3

Pour envoyer des journaux depuis CloudWatch Logs vers Amazon S3, vous devez créer un filtre d’abonnement. Ce filtre définit quels événements de journal sont fournis à votre compartiment Amazon S3. Le groupe de journaux doit se trouver dans la même région  que votre compartiment Amazon S3.

Pour créer un filtre d’abonnements pour Amazon S3

  1. Créez un compartiment Amazon Simple Storage Service (Amazon S3). Nous vous recommandons d'utiliser un compartiment qui a été créé spécifiquement pour CloudWatch Logs. Toutefois, si vous souhaitez utiliser un compartiment existant, passez directement à l'étape 2.

    Exécutez la commande suivante en remplaçant l'espace réservé à la région par la région que vous voulez utiliser :

    aws s3api create-bucket --bucket amzn-s3-demo-bucket2 --create-bucket-configuration LocationConstraint=region
    Note

    amzn-s3-demo-bucket2 est un exemple de nom de compartiment Amazon S3. Il est réservé. Pour que cette procédure fonctionne, vous devez le remplacer par le nom unique de votre compartiment Amazon S3.

    Voici un exemple de sortie :

    { "Location": "/amzn-s3-demo-bucket2" }
  2. Créez le rôle IAM qui accorde à CloudWatch Logs l’autorisation de placer des données dans votre compartiment Amazon S3. Cette politique comprend une clé de contexte de condition aws:SourceArn globale pour aider à prévenir le problème de sécurité du député confus. Pour plus d’informations consultez Prévention du problème de l’adjoint confus.

    1. Utilisez un éditeur de texte pour créer une politique d’approbation dans un fichier ~/TrustPolicyForCWL.json comme suit :

      { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } }, "Action": "sts:AssumeRole" } }
    2. Utilisez la commande create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation. Notez la valeur retournée de Role.Arn, car vous en aurez besoin ultérieurement :

      aws iam create-role \ --role-name CWLtoS3Role \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:region:123456789012:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoS3Role", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoS3Role" } }
  3. Créez une politique d'autorisations pour définir les actions permises à CloudWatch Logs sur votre compte. D'abord, utilisez un éditeur de texte pour créer une stratégie d'autorisations dans un fichier   ~/PermissionsForCWL.json:

    { "Statement": [ { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket2/*"] } ] }

    Associez la politique d’autorisations au rôle à la commande put-role-policy suivante :

    aws iam put-role-policy --role-name CWLtoS3Role --policy-name Permissions-Policy-For-S3 --policy-document file://~/PermissionsForCWL.json
  4. Créez un groupe de journaux Delivery ou utilisez un groupe de journaux Delivery existant.

    aws logs create-log-group --log-group-name my-logs --log-group-class DELIVERY --region REGION_NAME
  5. PutSubscriptionFilter pour configurer la destination

    aws logs put-subscription-filter --log-group-name my-logs --filter-name my-lambda-delivery --filter-pattern "" --destination-arn arn:aws:s3:::amzn-s3-demo-bucket2 --role-arn arn:aws:iam::123456789012:role/CWLtoS3Role --region REGION_NAME

Envoi de journaux de fonction Lambda à Amazon S3

Dans la console Lambda, vous pouvez envoyer des journaux de fonction directement à Amazon S3 après avoir créé une nouvelle fonction. Pour ce faire, effectuez ces étapes :

  1. Connectez-vous à Gestion de la console AWS et ouvrez la console Lambda.

  2. Choisissez le nom de votre fonction.

  3. Cliquez sur l’onglet Configuration.

  4. Choisissez l’onglet Outils de surveillance et d’exploitation.

  5. Dans le volet « Configuration de la journalisation », choisissez Modifier.

  6. Dans la section « Contenu du journal », sélectionnez un format de journal.

  7. Dans la section « Destination du journal » procédez comme suit :

    1. Sélectionnez un service de destination.

    2. Choisissez Créer un nouveau groupe de journaux ou utilisez un Groupe de journaux existant.

      Note

      Si vous choisissez un groupe de journaux existant pour une destination Amazon S3, assurez-vous que le groupe de journaux que vous choisissez est un type de groupe de journaux Delivery.

    3. Choisissez un compartiment Amazon S3 comme destination pour vos journaux de fonction.

    4. Le groupe de journaux Delivery CloudWatch s’affichera.

  8. Choisissez Enregistrer.

Note

Si le rôle IAM fourni dans la console ne dispose pas des autorisations requises, la configuration de la destination échouera. Pour résoudre ce problème, reportez-vous à la section Autorisations requises pour la destination du journal Amazon S3.

Journalisation entre comptes

Vous pouvez configurer Lambda pour envoyer des journaux vers un compartiment Amazon S3 dans un autre compte AWS. Cela nécessite de définir une destination et de configurer les autorisations appropriées dans les deux comptes.

Pour obtenir des instructions détaillées sur la configuration de la journalisation entre comptes, y compris les rôles et politiques IAM requis, consultez Configuration d’un nouvel abonnement entre comptes dans la documentation CloudWatch Logs.