

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.

# Connexion aux actions source Amazon S3 qui utilisent EventBridge et AWS CloudTrail
<a name="create-cloudtrail-S3-source"></a>

Les instructions de cette section indiquent les étapes à suivre pour créer l'action source S3 qui utilise AWS CloudTrail des ressources que vous devez créer et gérer. Pour utiliser l'action source S3 sans nécessiter de AWS CloudTrail ressources supplémentaires, utilisez les instructions de la CLI à l'adresse[Migrer les pipelines de sondage avec une source S3 activée pour les événements](update-change-detection.md#update-change-detection-S3-event). EventBridge 

**Important**  
Cette procédure décrit les étapes de création de l'action source S3 qui utilise AWS CloudTrail les ressources que vous devez créer et gérer. La procédure permettant de créer cette action sans AWS CloudTrail ressources n'est pas disponible dans la console. Pour utiliser la CLI, consultez[Migrer les pipelines de sondage avec une source S3 activée pour les événements](update-change-detection.md#update-change-detection-S3-event).

Pour ajouter une action source Amazon S3 CodePipeline, vous pouvez choisir de : 
+ Utilisez l'assistant de **création de pipeline** ([Création d'un pipeline personnalisé (console)](pipelines-create.md#pipelines-create-console)) ou la page **d'action Modifier** de la CodePipeline console pour choisir l'option du fournisseur **S3**. La console crée une EventBridge règle et un CloudTrail suivi qui démarrent votre pipeline lorsque la source change.
+ Utilisez le AWS CLI pour ajouter la configuration de l'`S3`action et créer des ressources supplémentaires comme suit :
  + Utilisez l'`S3`exemple de configuration d'action [Référence d'action source Amazon S3](action-reference-S3.md) pour créer votre action comme indiqué dans[Création d'un pipeline (interface de ligne de commande)](pipelines-create.md#pipelines-create-cli).
  + La méthode de détection des modifications consiste par défaut à démarrer le pipeline en interrogeant la source. Vous devez désactiver les contrôles périodiques et créer manuellement la règle de détection des modifications et le suivi. Utilisez l'une des méthodes suivantes : [Création d'une EventBridge règle pour une source Amazon S3 (console)](create-cloudtrail-S3-source-console.md)[Création d'une EventBridge règle pour une source Amazon S3 (CLI)](create-cloudtrail-S3-source-cli.md), ou[Création d'une EventBridge règle pour une source Amazon S3 (CloudFormation modèle)](create-cloudtrail-S3-source-cfn.md).

AWS CloudTrail est un service qui enregistre et filtre les événements sur votre compartiment source Amazon S3. Le suivi envoie les modifications de source filtrées à la EventBridge règle. La EventBridge règle détecte le changement de source, puis démarre votre pipeline. 

**Prérequis:**
+ Si vous ne créez pas de trace, utilisez une AWS CloudTrail trace existante pour enregistrer les événements dans votre compartiment source Amazon S3 et envoyer des événements filtrés à la EventBridge règle.
+ Créez ou utilisez un compartiment S3 existant dans lequel AWS CloudTrail stocker ses fichiers journaux. AWS CloudTrail doit disposer des autorisations requises pour envoyer les fichiers journaux dans un compartiment Amazon S3. Le compartiment ne peut pas être configuré en tant que compartiment [Paiement par le demandeur](https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.html). Lorsque vous créez un compartiment Amazon S3 dans le cadre de la création ou de la mise à jour d'un suivi dans la console AWS CloudTrail , vous associez les autorisations requises à un compartiment pour vous. Pour plus d'informations, consultez la [politique relative aux compartiments Amazon S3 pour CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html).

# Création d'une EventBridge règle pour une source Amazon S3 (console)
<a name="create-cloudtrail-S3-source-console"></a>

Avant de configurer une règle dans EventBridge, vous devez créer un AWS CloudTrail parcours. Pour plus d'informations, consultez [Création d'un journal de suivi dans la console](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html).

**Important**  
Si vous utilisez la console pour créer ou modifier votre pipeline, votre EventBridge règle et votre AWS CloudTrail historique sont créés pour vous.

**Pour créer un journal de suivi**

1. Ouvrez la AWS CloudTrail console.

1. Dans le panneau de navigation, choisissez **Journaux d'activité**.

1. Choisissez **Créer un journal d'activité)**. Pour **Trail name (Nom du journal de suivi)**, entrez un nom pour votre journal de suivi.

1. Sous **Storage location (Emplacement de stockage)**, créez ou spécifiez le compartiment à utiliser pour stocker les fichiers journaux. Par défaut, les objets et les compartiments Amazon S3 sont privés. Seul le propriétaire de la ressource (le AWS compte qui a créé le compartiment) peut accéder au compartiment et à ses objets. Le compartiment doit disposer d'une politique de ressources AWS CloudTrail autorisant l'accès aux objets qu'il contient.

1. Sous le **compartiment et le dossier du journal** de suivi, spécifiez un compartiment Amazon S3 et le préfixe d'objet (nom du dossier) pour enregistrer les événements de données pour tous les objets du dossier. Pour chaque journal de suivi, vous pouvez ajouter jusqu'à 250 objets Amazon S3. Renseignez les informations de clé de chiffrement requises et choisissez **Next**.

1. Dans **Type d'événement**, sélectionnez **Gestion des événements**.

1. Pour les **événements de gestion**, choisissez **Write**. Le journal enregistre l'activité de l'API au niveau de l'objet Amazon S3 (par exemple, `GetObject` et`PutObject`) sur le compartiment et le préfixe spécifiés.

1. Choisissez **Write (Écrire)**. 

1. Si le parcours vous convient, choisissez **Create trail**.

**Pour créer une EventBridge règle qui cible votre pipeline avec une source Amazon S3**

1. Ouvrez la EventBridge console Amazon à l'adresse [https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/).

1. Dans le panneau de navigation, choisissez **Rules**. Laissez le bus par défaut sélectionné ou choisissez un bus d'événements. Choisissez **Créer une règle**.

1. Dans **Nom**, saisissez le nom de votre règle.

1. Sous **Type de règle**, choisissez **Règle avec un modèle d'événement**. Choisissez **Suivant**.

1. Sous **Source de l'événement**, sélectionnez **AWS des événements ou des événements EventBridge partenaires**.

1. Sous **Exemple de type d'événement**, sélectionnez **AWS événements**.

1. Dans **Exemples d'événements**, saisissez S3 comme mot clé sur lequel filtrer. Choisissez **AWS l'API call via CloudTrail**.

1. Sous **Méthode de création**, choisissez **Customer pattern (éditeur JSON)**.

   Collez le modèle d'événement fourni ci-dessous. Assurez-vous d'ajouter le nom du compartiment et la clé d'objet S3 (ou le nom de clé) qui identifient de manière unique l'objet du compartiment en tant que tel`requestParameters`. Dans cet exemple, une règle est créée pour un compartiment nommé `amzn-s3-demo-source-bucket` et une clé d'objet de`my-files.zip`. Lorsque vous utilisez la fenêtre **Modifier** pour spécifier les ressources, votre règle est mise à jour pour utiliser un modèle événement personnalisé.

   Vous trouverez ci-dessous un exemple de modèle d'événement à copier et coller :

   ```
   {
       "source": [
           "aws.s3"
       ],
       "detail-type": [
           "AWS API Call via CloudTrail"
       ],
       "detail": {
           "eventSource": [
               "s3.amazonaws.com"
           ],
           "eventName": [
               "CopyObject",
               "CompleteMultipartUpload",
               "PutObject"
           ],
           "requestParameters": {
               "bucketName": [
                   "amzn-s3-demo-source-bucket"
               ],
               "key": [
                   "my-files.zip"
               ]
           }
       }
   }
   ```

1. Choisissez **Suivant**.

1. Dans **Types de cibles**, sélectionnez **AWS service**.

1. Dans **Sélectionnez une cible**, choisissez **CodePipeline**. Dans **ARN du pipeline**, entrez l'ARN du pipeline à démarrer selon cette règle.
**Note**  
Pour l'obtenir l'ARN de pipeline, exécutez la commande **get-pipeline**. L'ARN de pipeline apparaît dans la sortie. Il est créé dans ce format :   
arn:aws:codepipeline : : : *region* *account* *pipeline-name*  
Exemple d'ARN de pipeline :  
arn:aws:codepipeline:us-east- 2:80398 EXEMPLE : MyFirstPipeline 

1. Pour créer ou spécifier un rôle de service IAM autorisant EventBridge l'appel de la cible associée à votre EventBridge règle (dans ce cas, la cible est CodePipeline) : 
   + Choisissez **Créer un nouveau rôle pour cette ressource spécifique** afin de créer un rôle de service qui vous EventBridge autorise à démarrer les exécutions de votre pipeline.
   + Choisissez **Utiliser un rôle existant** pour saisir un rôle de service qui vous EventBridge autorise à démarrer les exécutions de votre pipeline.

1. (Facultatif) Pour spécifier les remplacements de source avec un ID d'image spécifique, utilisez le transformateur d'entrée pour transmettre les données sous forme de paramètres JSON. Vous pouvez également utiliser le transformateur d'entrée pour transmettre des variables de pipeline.
   + Développer **Additional settings (Paramètres supplémentaires)**.

     Sous **Configurer l'entrée cible**, choisissez **Configurer le transformateur d'entrée**.

     Dans la fenêtre de dialogue, choisissez **Enter my own**. Dans le champ **Chemin d'entrée**, tapez les paires clé-valeur suivantes.

     ```
     {"revisionValue": "$.detail.object.version-id"}
     ```
   + Dans le champ **Modèle**, tapez les paires clé-valeur suivantes.

     ```
                                     
                                     {
         "sourceRevisions": [
             {
                 "actionName": "Source",
                 "revisionType": "S3_OBJECT_VERSION_ID",
                 "revisionValue": "<revisionValue>"
             }
         ],
          "variables": [
             {
                 "name": "Variable_Name",
                 "value": "Variable_Value"
             }
         ]
     }
     ```
   + Choisissez **Confirmer**.

1. Choisissez **Suivant**.

1. Sur la page **Tags**, choisissez **Next**.

1. Sur la page **Réviser et créer**, passez en revue la configuration des règles. Si la règle vous convient, choisissez **Créer une règle**.

# Création d'une EventBridge règle pour une source Amazon S3 (CLI)
<a name="create-cloudtrail-S3-source-cli"></a><a name="proc-cli-event-s3-createtrail"></a>

**Pour créer un AWS CloudTrail parcours et activer la journalisation**

Pour utiliser le AWS CLI pour créer un parcours, appelez la **create-trail** commande en spécifiant :
+ Le nom du journal de suivi.
+ Le compartiment auquel vous avez déjà appliqué la stratégie de compartiment pour AWS CloudTrail.

Pour plus d'informations, consultez la section [Création d'un parcours à l'aide de l'interface de ligne de AWS commande](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail-by-using-the-aws-cli.html).

1. Appelez la commande **create-trail** et incluez les paramètres `--name` et `--s3-bucket-name`.

   **Pourquoi est-ce que j'effectue cette modification ?** Cela crée le journal de suivi CloudTrail requis pour votre compartiment source S3.

   La commande suivante utilise `--name` et `--s3-bucket-name` pour créer un journal de suivi nommé `my-trail` et un compartiment nommé `amzn-s3-demo-source-bucket`.

   ```
   aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
   ```

1. Appelez la commande **start-logging** et incluez le paramètre `--name`.

   **Pourquoi est-ce que je fais ce changement ?** Cette commande lance la CloudTrail journalisation de votre compartiment source et envoie les événements à EventBridge.

   Exemple :

   La commande suivante utilise `--name` pour démarrer la journalisation dans un journal de suivi nommé `my-trail`.

   ```
   aws cloudtrail start-logging --name my-trail
   ```

1. Appelez la commande **put-event-selectors** et incluez les paramètres `--trail-name` et `--event-selectors`. Utilisez les sélecteurs d'événements pour spécifier que vous souhaitez que votre journal enregistre les événements de données pour votre compartiment source et envoie les événements à la EventBridge règle.

   **Pourquoi est-ce que je fais ce changement ?** Cette commande filtre les événements.

   Exemple :

   Dans l'exemple suivant, la commande utilise `--trail-name` et `--event-selectors` pour spécifier des événements de données pour un compartiment source et un préfixe nommés `amzn-s3-demo-source-bucket/myFolder`.

   ```
   aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
   ```<a name="proc-cli-event-s3-createrule"></a>

**Pour créer une EventBridge règle avec Amazon S3 comme source d'événement et CodePipeline comme cible et appliquer la politique d'autorisations**

1. Accordez EventBridge des autorisations permettant CodePipeline d'invoquer la règle. Pour plus d'informations, consultez [Utiliser des politiques basées sur les ressources pour Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html). EventBridge

   1. Utilisez l'exemple suivant pour créer la politique de confiance permettant EventBridge d'assumer le rôle de service. Nommez-la `trustpolicyforEB.json`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "events.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. Utilisez la commande suivante pour créer le rôle `Role-for-MyRule` et attachez la stratégie d'approbation.

      **Pourquoi est-ce que j'effectue cette modification ?** L'ajout de cette politique de confiance au rôle crée des autorisations pour EventBridge.

      ```
      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
      ```

   1. Créez le JSON de stratégie d'autorisations, comme décrit ici, pour le pipeline nommé `MyFirstPipeline`. Nommez la stratégie d'autorisations `permissionspolicyforEB.json`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "codepipeline:StartPipelineExecution"
                  ],
                  "Resource": [
                      "arn:aws:codepipeline:us-west-2:111122223333:MyFirstPipeline"
                  ]
              }
          ]
      }
      ```

------

   1. Utilisez la commande suivante pour attacher la nouvelle stratégie d'autorisations `CodePipeline-Permissions-Policy-for-EB` au rôle `Role-for-MyRule` que vous avez créé.

      ```
      aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
      ```

1. Appelez la commande **put-rule** et incluez les paramètres `--name`, `--event-pattern` et `--role-arn`.

   L'exemple de commande suivant crée une règle nommée `MyS3SourceRule`.

   ```
   aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}}
    --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
   ```

1. Pour ajouter CodePipeline en tant que cible, appelez la **put-targets** commande et incluez les `--targets` paramètres `--rule` et.

   La commande suivante spécifie que pour la règle nommée `MyS3SourceRule`, l'`Id` cible est composé du numéro un, ce qui indique qu'il s'agit de la règle 1 dans une liste de cibles pour la règle. La commande spécifie également un exemple d'`ARN` pour le pipeline. Le pipeline démarre lorsque des modifications sont effectuées dans le référentiel.

   ```
   aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
   ```

1. (Facultatif) Pour configurer un transformateur d'entrée avec des remplacements de source pour un ID d'image spécifique, utilisez le code JSON suivant dans votre commande CLI. L'exemple suivant configure une dérogation dans laquelle :
   + `Source`Dans cet exemple`actionName`, il s'agit de la valeur dynamique, définie lors de la création du pipeline, qui n'est pas dérivée de l'événement source.
   + `S3_OBJECT_VERSION_ID`Dans cet exemple`revisionType`, il s'agit de la valeur dynamique, définie lors de la création du pipeline, qui n'est pas dérivée de l'événement source.
   + Dans cet exemple`revisionValue`, le, < *revisionValue* > est dérivé de la variable d'événement source.

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "ARN",
               "InputTransformer": {
                   "InputPathsMap": {
                       "revisionValue": "$.detail.object.version-id"
                   },
                   "InputTemplate": {
                       "sourceRevisions": {
                           "actionName": "Source",
                           "revisionType": "S3_OBJECT_VERSION_ID",
                           "revisionValue": "<revisionValue>"
                       }
                   }
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-s3"></a>

**Pour modifier le PollForSourceChanges paramètre de votre pipeline**
**Important**  
Lorsque vous créez un pipeline avec cette méthode, le paramètre `PollForSourceChanges` prend la valeur Vrai par défaut s'il n'est pas explicitement défini sur Faux. Lorsque vous ajoutez la détection des modifications basée sur les événements, vous devez ajouter le paramètre à votre sortie et le configurer sur Faux pour désactiver l'interrogation. Sinon, votre pipeline démarre deux fois pour une seule modification de source. Pour en savoir plus, consultez [Réglages valides pour le `PollForSourceChanges` paramètre](PollForSourceChanges-defaults.md).

1. Exécutez la commande **get-pipeline** pour copier la structure de pipeline dans un fichier JSON. Par exemple, pour un pipeline nommé `MyFirstPipeline`, exécutez la commande suivante : 

   ```
   aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
   ```

   Cette commande ne renvoie rien, mais le fichier que vous avez créé doit apparaître dans le répertoire où vous avez exécuté la commande.

1. Ouvrez le fichier JSON dans un éditeur de texte brut et modifiez l'étape source en remplaçant la valeur du paramètre `PollForSourceChanges` pour un compartiment nommé `amzn-s3-demo-source-bucket` par `false`, comme illustré dans cet exemple.

   **Pourquoi est-ce que j'effectue cette modification ?** La définition de ce paramètre sur `false` désactive les vérifications périodiques, ce qui vous permet d'utiliser la détection des modifications basée sur les événements uniquement.

   ```
   "configuration": {
       "S3Bucket": "amzn-s3-demo-source-bucket",
       "PollForSourceChanges": "false",
       "S3ObjectKey": "index.zip"
   },
   ```

1. Si vous utilisez la structure de pipeline extraite à l'aide de la commande **get-pipeline**, vous devez supprimer les lignes `metadata` du fichier JSON. Sinon, la commande **update-pipeline** ne peut pas l'utiliser. Supprimez les lignes `"metadata": { }` et les champs `"updated"`, `"created"` et `"pipelineARN"`.

   Par exemple, supprimez les lignes suivantes de la structure :

   ```
   "metadata": {
       "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name",
       "created": "date",
       "updated": "date"
   },
   ```

   Enregistrez le fichier.

1. Pour appliquer les modifications, exécutez la commande **update-pipeline** en spécifiant le fichier JSON du pipeline :
**Important**  
N'oubliez pas d'inclure `file://` devant le nom du fichier. Il est nécessaire dans cette commande.

   ```
   aws codepipeline update-pipeline --cli-input-json file://pipeline.json
   ```

   Cette commande affiche toute la structure du pipeline mise à jour.
**Note**  
La commande **update-pipeline** interrompt le pipeline. Si une révision est exécutée dans le pipeline lorsque vous exécutez la commande **update-pipeline** celle-ci est interrompue. Vous devez lancer manuellement le pipeline pour exécuter cette révision dans le pipeline mis à jour. Utilisez la commande **start-pipeline-execution** pour démarrer manuellement votre pipeline.

# Création d'une EventBridge règle pour une source Amazon S3 (CloudFormation modèle)
<a name="create-cloudtrail-S3-source-cfn"></a>

 CloudFormation Pour créer une règle, mettez à jour votre modèle comme indiqué ici.<a name="proc-cfn-event-s3-createrule"></a>

**Pour créer une EventBridge règle avec Amazon S3 comme source d'événement et CodePipeline comme cible et appliquer la politique d'autorisations**

1. Dans le modèle, ci-dessous`Resources`, utilisez la `AWS::IAM::Role` CloudFormation ressource pour configurer le rôle IAM qui permet à votre événement de démarrer votre pipeline. Cette entrée crée un rôle qui utilise deux stratégies :
   + La première stratégie autorise le rôle à être endossé.
   + La deuxième stratégie fournit des autorisations pour démarrer le pipeline.

   **Pourquoi est-ce que j'effectue cette modification ?** L'ajout `AWS::IAM::Role` de ressources CloudFormation permet de créer des autorisations pour EventBridge. Cette ressource est ajoutée à votre CloudFormation pile.

------
#### [ YAML ]

   ```
     EventRole:
       Type: AWS::IAM::Role
       Properties:
         AssumeRolePolicyDocument:
           Version: 2012-10-17		 	 	 
           Statement:
             -
               Effect: Allow
               Principal:
                 Service:
                   - events.amazonaws.com
               Action: sts:AssumeRole
         Path: /
         Policies:
           -
             PolicyName: eb-pipeline-execution
             PolicyDocument:
               Version: 2012-10-17		 	 	 
               Statement:
                 -
                   Effect: Allow
                   Action: codepipeline:StartPipelineExecution
                   Resource: !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
   
   
   ...
   ```

------
#### [ JSON ]

   ```
     "EventRole": {
       "Type": "AWS::IAM::Role",
       "Properties": {
         "AssumeRolePolicyDocument": {
           "Version": "2012-10-17",		 	 	 
           "Statement": [
             {
               "Effect": "Allow",
               "Principal": {
                 "Service": [
                   "events.amazonaws.com"
                 ]
               },
               "Action": "sts:AssumeRole"
             }
           ]
         },
         "Path": "/",
         "Policies": [
           {
             "PolicyName": "eb-pipeline-execution",
             "PolicyDocument": {
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                 {
                   "Effect": "Allow",
                   "Action": "codepipeline:StartPipelineExecution",
                   "Resource": {
                     "Fn::Join": [
                       "",
                       [
                         "arn:aws:codepipeline:",
                         {
                           "Ref": "AWS::Region"
                         },
                         ":",
                         {
                           "Ref": "AWS::AccountId"
                         },
                         ":",
                         {
                           "Ref": "AppPipeline"
                         }
                       ]
                     ]
   
   ...
   ```

------

1. Utilisez la `AWS::Events::Rule` CloudFormation ressource pour ajouter une EventBridge règle. Ce modèle d'événement crée un événement qui surveille `CopyObject` `PutObject` et `CompleteMultipartUpload` sur votre compartiment source Amazon S3. En outre, incluez une cible de votre pipeline. Lorsque `CopyObject`, `PutObject` ou `CompleteMultipartUpload` se produit, cette règle appelle `StartPipelineExecution` sur votre pipeline cible.

   **Pourquoi est-ce que j'effectue cette modification ?** L'ajout de la `AWS::Events::Rule` ressource CloudFormation permet de créer l'événement. Cette ressource est ajoutée à votre CloudFormation pile.

------
#### [ YAML ]

   ```
     EventRule:
       Type: AWS::Events::Rule
       Properties:
         EventPattern:
           source:
             - aws.s3
           detail-type:
             - 'AWS API Call via CloudTrail'
           detail:
             eventSource:
               - s3.amazonaws.com
             eventName:
               - CopyObject
               - PutObject
               - CompleteMultipartUpload
             requestParameters:
               bucketName:
                 - !Ref SourceBucket
               key:
                 - !Ref SourceObjectKey
         Targets:
           -
             Arn:
               !Join [ '', [ 'arn:aws:codepipeline:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref AppPipeline ] ]
             RoleArn: !GetAtt EventRole.Arn
             Id: codepipeline-AppPipeline
   
   
   ...
   ```

------
#### [ JSON ]

   ```
     "EventRule": {
       "Type": "AWS::Events::Rule",
       "Properties": {
         "EventPattern": {
           "source": [
             "aws.s3"
           ],
           "detail-type": [
             "AWS API Call via CloudTrail"
           ],
           "detail": {
             "eventSource": [
               "s3.amazonaws.com"
             ],
             "eventName": [
               "CopyObject",
               "PutObject",
               "CompleteMultipartUpload"
             ],
             "requestParameters": {
               "bucketName": [
                 {
                   "Ref": "SourceBucket"
                 }
               ],
               "key": [
                 {
                   "Ref": "SourceObjectKey"
                 }
               ]
             }
           }
         },
         "Targets": [
           {
             "Arn": {
               "Fn::Join": [
                 "",
                 [
                   "arn:aws:codepipeline:",
                   {
                     "Ref": "AWS::Region"
                   },
                   ":",
                   {
                     "Ref": "AWS::AccountId"
                   },
                   ":",
                   {
                     "Ref": "AppPipeline"
                   }
                 ]
               ]
             },
             "RoleArn": {
               "Fn::GetAtt": [
                 "EventRole",
                 "Arn"
               ]
             },
             "Id": "codepipeline-AppPipeline"
           }
         ]
       }
     }
   },
   
   ...
   ```

------

1. Ajoutez cet extrait à votre premier modèle pour autoriser les fonctionnalités entre piles :

------
#### [ YAML ]

   ```
   Outputs:
     SourceBucketARN:
       Description: "S3 bucket ARN that Cloudtrail will use"
       Value: !GetAtt SourceBucket.Arn
       Export:
         Name: SourceBucketARN
   ```

------
#### [ JSON ]

   ```
     "Outputs" : {
       "SourceBucketARN" : {
         "Description" : "S3 bucket ARN that Cloudtrail will use",
         "Value" : { "Fn::GetAtt": ["SourceBucket", "Arn"] },
         "Export" : {
           "Name" : "SourceBucketARN"
         }
       }
   
   ...
   ```

------

1. (Facultatif) Pour configurer un transformateur d'entrée avec des remplacements de source pour un ID d'image spécifique, utilisez l'extrait de code YAML suivant. L'exemple suivant configure une dérogation dans laquelle :
   + `Source`Dans cet exemple`actionName`, il s'agit de la valeur dynamique, définie lors de la création du pipeline, qui n'est pas dérivée de l'événement source.
   + `S3_OBJECT_VERSION_ID`Dans cet exemple`revisionType`, il s'agit de la valeur dynamique, définie lors de la création du pipeline, qui n'est pas dérivée de l'événement source.
   + Dans cet exemple`revisionValue`, le, < *revisionValue* > est dérivé de la variable d'événement source.

   ```
   ---
   Rule: my-rule
   Targets:
   - Id: MyTargetId
     Arn: pipeline-ARN
     InputTransformer:
       InputPathsMap:
         revisionValue: "$.detail.object.version-id"
       InputTemplate:
         sourceRevisions:
           actionName: Source
           revisionType: S3_OBJECT_VERSION_ID
           revisionValue: '<revisionValue>'
   ```

1. Enregistrez le modèle mis à jour sur votre ordinateur local et ouvrez la CloudFormation console. 

1. Choisissez votre pile, puis **Créer un jeu de modifications pour la pile actuelle**. 

1. Chargez votre modèle mis à jour, puis affichez les modifications répertoriées dans CloudFormation. Il s'agit des modifications qui seront apportées à la pile. Vos nouvelles ressources doivent figurer dans la liste.

1. Sélectionnez **Execute (Exécuter)**.<a name="proc-cfn-flag-s3"></a>

**Pour modifier le PollForSourceChanges paramètre de votre pipeline**
**Important**  
Lorsque vous créez un pipeline avec cette méthode, le paramètre `PollForSourceChanges` prend la valeur Vrai par défaut s'il n'est pas explicitement défini sur Faux. Lorsque vous ajoutez la détection des modifications basée sur les événements, vous devez ajouter le paramètre à votre sortie et le configurer sur Faux pour désactiver l'interrogation. Sinon, votre pipeline démarre deux fois pour une seule modification de source. Pour en savoir plus, consultez [Réglages valides pour le `PollForSourceChanges` paramètre](PollForSourceChanges-defaults.md).
+ Dans le modèle, remplacez la valeur du paramètre `PollForSourceChanges` par `false`. Si vous n'avez pas inclus `PollForSourceChanges` dans votre définition de pipeline, ajoutez ce paramètre et définissez-le sur `false`.

  **Pourquoi est-ce que j'effectue cette modification ?** Le remplacement de la valeur du paramètre `PollForSourceChanges` par `false` désactive les vérifications périodiques, ce qui vous permet d'utiliser la détection des modifications basée sur les événements uniquement.

------
#### [ YAML ]

  ```
            Name: Source
            Actions: 
              - 
                Name: SourceAction
                ActionTypeId: 
                  Category: Source
                  Owner: AWS
                  Version: 1
                  Provider: S3
                OutputArtifacts: 
                  - Name: SourceOutput
                Configuration: 
                  S3Bucket: !Ref SourceBucket
                  S3ObjectKey: !Ref SourceObjectKey
                  PollForSourceChanges: false
                RunOrder: 1
  ```

------
#### [ JSON ]

  ```
   {
      "Name": "SourceAction",
      "ActionTypeId": {
        "Category": "Source",
        "Owner": "AWS",
        "Version": 1,
        "Provider": "S3"
      },
      "OutputArtifacts": [
        {
          "Name": "SourceOutput"
        }
      ],
      "Configuration": {
        "S3Bucket": {
          "Ref": "SourceBucket"
        },
        "S3ObjectKey": {
          "Ref": "SourceObjectKey"
        },
        "PollForSourceChanges": false
      },
      "RunOrder": 1
    }
  ```

------<a name="proc-cfn-event-s3-createtrail"></a>

**Pour créer un deuxième modèle pour les CloudTrail ressources de votre pipeline Amazon S3**
+ Dans un modèle distinct, sous`Resources`, utilisez les `AWS::CloudTrail::Trail` CloudFormation ressources `AWS::S3::Bucket``AWS::S3::BucketPolicy`, et pour fournir une définition de compartiment et un suivi simples pour CloudTrail.

  **Pourquoi est-ce que je fais ce changement ?** Étant donné la limite actuelle de cinq sentiers par compte, le CloudTrail sentier doit être créé et géré séparément. (Voir [Limites dans AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/WhatIsCloudTrail-Limits.html).) Cependant, vous pouvez inclure de nombreux compartiments Amazon S3 sur un seul parcours, de sorte que vous pouvez créer le suivi une seule fois, puis ajouter des compartiments Amazon S3 pour d'autres pipelines si nécessaire. Collez ce qui suit dans votre deuxième exemple de fichier de modèle.

------
#### [ YAML ]

  ```
  ###################################################################################
  # Prerequisites: 
  #   - S3 SourceBucket and SourceObjectKey must exist
  ###################################################################################
  
  Parameters:
    SourceObjectKey:
      Description: 'S3 source artifact'
      Type: String
      Default: SampleApp_Linux.zip
  
  Resources:
    AWSCloudTrailBucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: !Ref AWSCloudTrailBucket
        PolicyDocument:
          Version: 2012-10-17		 	 	 
          Statement:
            -
              Sid: AWSCloudTrailAclCheck
              Effect: Allow
              Principal:
                Service:
                  - cloudtrail.amazonaws.com
              Action: s3:GetBucketAcl
              Resource: !GetAtt AWSCloudTrailBucket.Arn
            -
              Sid: AWSCloudTrailWrite
              Effect: Allow
              Principal:
                Service:
                  - cloudtrail.amazonaws.com
              Action: s3:PutObject
              Resource: !Join [ '', [ !GetAtt AWSCloudTrailBucket.Arn, '/AWSLogs/', !Ref 'AWS::AccountId', '/*' ] ]
              Condition: 
                StringEquals:
                  s3:x-amz-acl: bucket-owner-full-control
    AWSCloudTrailBucket:
      Type: AWS::S3::Bucket
      DeletionPolicy: Retain
    AwsCloudTrail:
      DependsOn:
        - AWSCloudTrailBucketPolicy
      Type: AWS::CloudTrail::Trail
      Properties:
        S3BucketName: !Ref AWSCloudTrailBucket
        EventSelectors:
          -
            DataResources:
              -
                Type: AWS::S3::Object
                Values:
                  - !Join [ '', [ !ImportValue SourceBucketARN, '/', !Ref SourceObjectKey ] ]
            ReadWriteType: WriteOnly
            IncludeManagementEvents: false
        IncludeGlobalServiceEvents: true
        IsLogging: true
        IsMultiRegionTrail: true
  
  
  ...
  ```

------
#### [ JSON ]

  ```
  {
    "Parameters": {
      "SourceObjectKey": {
        "Description": "S3 source artifact",
        "Type": "String",
        "Default": "SampleApp_Linux.zip"
      }
    },
    "Resources": {
      "AWSCloudTrailBucket": {
        "Type": "AWS::S3::Bucket",
          "DeletionPolicy": "Retain"
      },
      "AWSCloudTrailBucketPolicy": {
        "Type": "AWS::S3::BucketPolicy",
        "Properties": {
          "Bucket": {
            "Ref": "AWSCloudTrailBucket"
          },
          "PolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Sid": "AWSCloudTrailAclCheck",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "cloudtrail.amazonaws.com"
                  ]
                },
                "Action": "s3:GetBucketAcl",
                "Resource": {
                  "Fn::GetAtt": [
                    "AWSCloudTrailBucket",
                    "Arn"
                  ]
                }
              },
              {
                "Sid": "AWSCloudTrailWrite",
                "Effect": "Allow",
                "Principal": {
                  "Service": [
                    "cloudtrail.amazonaws.com"
                  ]
                },
                "Action": "s3:PutObject",
                "Resource": {
                  "Fn::Join": [
                    "",
                    [
                      {
                        "Fn::GetAtt": [
                          "AWSCloudTrailBucket",
                          "Arn"
                        ]
                      },
                      "/AWSLogs/",
                      {
                        "Ref": "AWS::AccountId"
                      },
                      "/*"
                    ]
                  ]
                },
                "Condition": {
                  "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                  }
                }
              }
            ]
          }
        }
      },
      "AwsCloudTrail": {
        "DependsOn": [
          "AWSCloudTrailBucketPolicy"
        ],
        "Type": "AWS::CloudTrail::Trail",
        "Properties": {
          "S3BucketName": {
            "Ref": "AWSCloudTrailBucket"
          },
          "EventSelectors": [
            {
              "DataResources": [
                {
                  "Type": "AWS::S3::Object",
                  "Values": [
                    {
                      "Fn::Join": [
                        "",
                        [
                          {
                            "Fn::ImportValue": "SourceBucketARN"
                          },
                          "/",
                          {
                            "Ref": "SourceObjectKey"
                          }
                        ]
                      ]
                    }
                  ]
                }
              ],
              "ReadWriteType": "WriteOnly",
              "IncludeManagementEvents": false
            }
          ],
          "IncludeGlobalServiceEvents": true,
          "IsLogging": true,
          "IsMultiRegionTrail": true
        }
      }
    }
  }
  
  ...
  ```

------