View a markdown version of this page

Buat EventBridge aturan untuk CodeCommit sumber (CloudFormation templat) - AWS CodePipeline

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Buat EventBridge aturan untuk CodeCommit sumber (CloudFormation templat)

Untuk digunakan CloudFormation untuk membuat aturan, perbarui template Anda seperti yang ditunjukkan di sini.

Untuk memperbarui pipeline Anda CloudFormation template dan buat EventBridge aturan
  1. Di template, di bawahResources, gunakan AWS::IAM::Role CloudFormation sumber daya untuk mengonfigurasi peran IAM yang memungkinkan acara Anda memulai pipeline Anda. Entri ini membuat peran yang menggunakan dua kebijakan:

    • Kebijakan pertama memungkinkan peran untuk diasumsikan.

    • Kebijakan kedua memberikan izin untuk memulai pipeline.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::IAM::Role sumber daya memungkinkan CloudFormation untuk membuat izin untuk EventBridge. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    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. Di template, di bawahResources, gunakan AWS::Events::Rule CloudFormation sumber daya untuk menambahkan EventBridge aturan. Pola peristiwa ini menciptakan peristiwa yang memantau perubahan push ke repositori Anda. Saat EventBridge mendeteksi perubahan status repositori, aturan akan dipanggil StartPipelineExecution pada pipeline target Anda.

    Mengapa saya membuat perubahan ini? Menambahkan AWS::Events::Rule sumber daya CloudFormation memungkinkan untuk membuat acara. Sumber daya ini ditambahkan ke CloudFormation tumpukan Anda.

    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. (Opsional) Untuk mengonfigurasi transformator input dengan penggantian sumber untuk ID gambar tertentu, gunakan cuplikan YAML berikut. Contoh berikut mengonfigurasi penggantian di mana:

    • Dalam actionName contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. Source

    • Dalam revisionType contoh ini, adalah nilai dinamis, didefinisikan pada pembuatan pipeline, bukan berasal dari peristiwa sumber. COMMIT_ID

    • revisionValue, < revisionValue > dalam contoh ini, diturunkan dari variabel peristiwa sumber.

    • Variabel output untuk BranchName dan Value ditentukan.

    Rule: my-rule Targets: - Id: MyTargetId Arn: pipeline-ARN InputTransformer: sourceRevisions: actionName: Source revisionType: COMMIT_ID revisionValue: <revisionValue> variables: - name: BranchName value: value
  4. Simpan template yang diperbarui ke komputer lokal Anda, lalu buka CloudFormation konsol.

  5. Pilih tumpukan Anda, lalu pilih Buat Set Perubahan untuk Tumpukan Saat Ini.

  6. Unggah template, lalu lihat perubahan yang tercantum di CloudFormation. Ini adalah perubahan yang harus dilakukan pada tumpukan. Anda harus melihat sumber daya baru Anda dalam daftar.

  7. Pilih Eksekusi.

Untuk mengedit PollForSourceChanges parameter pipeline
penting

Dalam banyak kasus, PollForSourceChanges parameter default menjadi true saat Anda membuat pipeline. Saat menambahkan deteksi perubahan berbasis peristiwa, Anda harus menambahkan parameter ke output dan menyetelnya ke false untuk menonaktifkan polling. Jika tidak, pipeline Anda dimulai dua kali untuk satu perubahan sumber. Lihat perinciannya di Pengaturan yang valid untuk PollForSourceChanges parameter.

  • Di template, ubah PollForSourceChanges kefalse. Jika Anda tidak menyertakan PollForSourceChanges dalam definisi pipeline Anda, tambahkan dan setel kefalse.

    Mengapa saya membuat perubahan ini? Mengubah parameter ini untuk false mematikan pemeriksaan berkala sehingga Anda dapat menggunakan deteksi perubahan berbasis peristiwa saja.

    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 } ] },