

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Envoi des journaux de fonction Lambda à Amazon S3
<a name="logging-with-s3"></a>

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
<a name="logging-s3-pricing"></a>

Pour plus d’informations de tarification, consultez [Tarification d’Amazon CloudWatch](https://aws.amazon.com/cloudwatch/pricing/#Vended_Logs).

## Autorisations requises pour la destination du journal Amazon S3
<a name="logging-s3-permissions"></a>

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](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs.html#monitoring-cloudwatchlogs-prereqs) pour utiliser CloudWatch Logs avec Lambda.

1. Pour [Configurer un filtre d’abonnements CloudWatch Logs pour envoyer les journaux de fonction Lambda à Amazon S3](#using-cwl-subscription-filter-lambda-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
<a name="using-cwl-subscription-filter-lambda-s3"></a>

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
<a name="create-subscription-filter-s3"></a>

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"
   }
   ```

1. 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Subscriptions-confused-deputy.html).

   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"
          } 
      }
      ```

   1. 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"
          }
      }
      ```

1. 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
   ```

1. 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
   ```

1. `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
<a name="logging-s3-setup"></a>

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.

1. Choisissez le nom de votre fonction.

1. Cliquez sur l’onglet **Configuration**.

1. Choisissez l’onglet **Outils de surveillance et d’exploitation**.

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

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

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

   1. Sélectionnez un service de destination.

   1. 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`.

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

   1. Le groupe de journaux `Delivery` CloudWatch s’affichera.

1. 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](#logging-s3-permissions).

## Journalisation entre comptes
<a name="cross-account-logging-s3"></a>

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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CrossAccountSubscriptions.html) dans la documentation CloudWatch Logs.