Création d'une EventBridge règle pour une CodeCommit source (AWS CloudFormation modèle) - AWS CodePipeline

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.

Création d'une EventBridge règle pour une CodeCommit source (AWS CloudFormation modèle)

AWS CloudFormation Pour créer une règle, mettez à jour votre modèle comme indiqué ici.

Pour mettre à jour votre AWS CloudFormation modèle de pipeline et créer une EventBridge règle
  1. Dans le modèle, ci-dessousResources, utilisez la AWS::IAM::Role AWS 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 de la AWS::IAM::Role ressource permet AWS CloudFormation de créer des autorisations pour EventBridge. Cette ressource est ajoutée à votre AWS 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" } ] ...
  2. Dans le modèle, sousResources, utilisez la AWS::Events::Rule AWS CloudFormation ressource pour ajouter une EventBridge règle. Ce modèle d'événement crée un événement qui surveille les modifications push apportées à votre référentiel. Lorsqu'un changement d'état du référentiel est EventBridge détecté, la règle est invoquée StartPipelineExecution sur votre pipeline cible.

    Pourquoi est-ce que je fais ce changement ? L'ajout de la AWS::Events::Rule ressource AWS CloudFormation permet de créer l'événement. Cette ressource est ajoutée à votre AWS CloudFormation pile.

    YAML
    EventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.codecommit detail-type: - 'CodeCommit Repository State Change' resources: - !Join [ '', [ 'arn:aws:codecommit:', !Ref 'AWS::Region', ':', !Ref 'AWS::AccountId', ':', !Ref RepositoryName ] ] detail: event: - referenceCreated - referenceUpdated referenceType: - branch referenceName: - main 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.codecommit" ], "detail-type": [ "CodeCommit Repository State Change" ], "resources": [ { "Fn::Join": [ "", [ "arn:aws:codecommit:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "RepositoryName" } ] ] } ], "detail": { "event": [ "referenceCreated", "referenceUpdated" ], "referenceType": [ "branch" ], "referenceName": [ "main" ] } }, "Targets": [ { "Arn": { "Fn::Join": [ "", [ "arn:aws:codepipeline:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":", { "Ref": "AppPipeline" } ] ] }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } },
  3. Enregistrez le modèle mis à jour sur votre ordinateur local, puis ouvrez la console AWS CloudFormation .

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

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

  6. Sélectionnez Execute (Exécuter).

Pour modifier le PollForSourceChanges paramètre de votre pipeline
Important

Dans de nombreux cas, le paramètre PollForSourceChanges prend la valeur Vrai par défaut lorsque vous créez un pipeline. 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 plus de détails, consultez Réglages valides pour le PollForSourceChanges paramètre.

  • 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 de ce paramètre 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: CodeCommit OutputArtifacts: - Name: SourceOutput Configuration: BranchName: !Ref BranchName RepositoryName: !Ref RepositoryName PollForSourceChanges: false RunOrder: 1
    JSON
    { "Name": "Source", "Actions": [ { "Name": "SourceAction", "ActionTypeId": { "Category": "Source", "Owner": "AWS", "Version": 1, "Provider": "CodeCommit" }, "OutputArtifacts": [ { "Name": "SourceOutput" } ], "Configuration": { "BranchName": { "Ref": "BranchName" }, "RepositoryName": { "Ref": "RepositoryName" }, "PollForSourceChanges": false }, "RunOrder": 1 } ] },