為 Amazon ECR 源(AWS CloudFormation 模板)創建 EventBridge 規則 - AWS CodePipeline

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 Amazon ECR 源(AWS CloudFormation 模板)創建 EventBridge 規則

若要用 AWS CloudFormation 來建立規則,請使用範本程式碼片段,如下所示。

更新管線 AWS CloudFormation 範本並建立 EventBridge 規則
  1. 在範本中的下Resources,使用AWS::IAM::Role AWS CloudFormation 資源來配置允許事件啟動管道的IAM角色。此項目會建立一個使用兩個政策的角色:

    • 第一個政策允許要承擔的角色。

    • 第二個政策提供啟動管道的許可。

    為什麼我會做出此變更? 您必須創建一個可以假定的角色 EventBridge 才能在我們的管道中開始執行。

    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: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${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::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}" } } ] } } ] } } } ...
  2. 在範本的下Resources,使用AWS::Events::Rule AWS CloudFormation 資源為 Amazon ECR 來源新增 EventBridge 規則。此事件模式會建立一個事件,用於監視對儲存庫的提交。 EventBridge 偵測到存放庫狀態變更時,規則會StartPipelineExecution在您的目標管線上叫用。

    我為什麼要進行這項變更? 您必須使用規則來建立事件,該規則指定必須如何進行映像推送,以及命名要由事件啟動的管道的目標。

    此程式碼片段使用名為 eb-test 的映像,並具有 latest 標籤。

    YAML
    EventRule: Type: 'AWS::Events::Rule' Properties: EventPattern: detail: action-type: [PUSH] image-tag: [latest] repository-name: [eb-test] result: [SUCCESS] detail-type: [ECR Image Action] source: [aws.ecr] Targets: - Arn: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline} RoleArn: !GetAtt - EventRole - Arn Id: codepipeline-AppPipeline
    JSON
    { "EventRule": { "Type": "AWS::Events::Rule", "Properties": { "EventPattern": { "detail": { "action-type": [ "PUSH" ], "image-tag": [ "latest" ], "repository-name": [ "eb-test" ], "result": [ "SUCCESS" ] }, "detail-type": [ "ECR Image Action" ], "source": [ "aws.ecr" ] }, "Targets": [ { "Arn": { "Fn::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}" }, "RoleArn": { "Fn::GetAtt": [ "EventRole", "Arn" ] }, "Id": "codepipeline-AppPipeline" } ] } } },
    注意

    若要檢視 Amazon ECR 事件支援的完整事件模式,請參閱 Amazon ECR 活動和 EventBridgeAmazon 彈性容器登錄事件。

  3. 將更新的範本儲存到本機電腦,然後開啟 AWS CloudFormation 主控台。

  4. 選擇您的堆疊,然後選擇 Create Change Set for Current Stack (建立目前堆疊的變更集)

  5. 上傳範本,然後檢視 AWS CloudFormation中所列的變更。這些是會針對堆疊進行的變更。您應該會在清單中看到新資源。

  6. 選擇 Execute (執行)