

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

# 為 CodeCommit 來源 (CLI) 建立 EventBridge 規則
<a name="pipelines-trigger-source-repo-changes-cli"></a>

呼叫 **put-rule** 命令，並指定：
+ 可唯一識別您所建立規則的名稱。此名稱在您使用與 AWS 帳戶相關聯的 CodePipeline 建立的所有管道中必須是唯一的。
+ 規則所使用來源和詳細資訊欄位的事件模式。如需詳細資訊，請參閱 [Amazon EventBridge 和事件模式](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-events.html)。<a name="proc-cli-event-codecommit"></a>

**使用 CodeCommit 作為事件來源和 CodePipeline 作為目標來建立 EventBridge 規則**

1. 新增 EventBridge 使用 CodePipeline 叫用規則的許可。如需詳細資訊，請參閱[使用 Amazon EventBridge 的資源型政策](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-resource-based.html)。

   1. 使用下列範例建立信任政策，允許 EventBridge 擔任服務角色。將信任政策命名為 `trustpolicyforEB.json`。

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

****  

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

------

   1. 使用下列命令來建立 `Role-for-MyRule` 角色，並連接信任政策。

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

   1. 為名為 `MyFirstPipeline` 的管道建立許可政策 JSON，如這個範例所示。將許可政策命名為 `permissionspolicyforEB.json`。

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

****  

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

------

   1. 使用執行以下命令，將 `CodePipeline-Permissions-Policy-for-EB` 許可政策連接到 `Role-for-MyRule` 角色。

      **為什麼我會做出此變更？** 將此政策新增至角色會建立 EventBridge 的許可。

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

1. 呼叫 **put-rule** 命令，並包含 `--name`、`--event-pattern` 和 `--role-arn` 參數。

   **為什麼我會做出此變更？** 此命令可讓 CloudFormation 建立事件。

   以下範例命令會建立名為 `MyCodeCommitRepoRule` 的規則。

   ```
   aws events put-rule --name "MyCodeCommitRepoRule" --event-pattern "{\"source\":[\"aws.codecommit\"],\"detail-type\":[\"CodeCommit Repository State Change\"],\"resources\":[\"repository-ARN\"],\"detail\":{\"referenceType\":[\"branch\"],\"referenceName\":[\"main\"]}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
   ```

1. 若要新增 CodePipeline 做為目標，請呼叫 **put-targets**命令並包含下列參數：
   + `--rule` 參數與您使用 **put-rule** 所建立的 `rule_name` 搭配使用。
   + `--targets` 參數與目標清單中目標的清單 `Id` 和目標管道的 `ARN` 搭配使用。

   以下命令範例指定名為 `MyCodeCommitRepoRule` 的規則，該目標 `Id` 是由數字 1 組成，指出在規則的目標清單中，這是目標 1。此範例命令也會指定管道的範例 `ARN`。儲存庫中若發生變更，管道就會啟動。

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

1. （選用） 若要為特定映像 ID 設定具有來源覆寫的輸入轉換器，請在 CLI 命令中使用下列 JSON。下列範例會設定覆寫，其中：
   + 在此`actionName``Source`範例中， 是在管道建立時定義的動態值，不是衍生自來源事件。
   + 在此`revisionType``COMMIT_ID`範例中， 是在管道建立時定義的動態值，不是衍生自來源事件。
   + 此範例中的 `revisionValue`<*revisionValue*> 衍生自來源事件變數。

   ```
   {
       "Rule": "my-rule",
       "Targets": [
           {
               "Id": "MyTargetId",
               "Arn": "pipeline-ARN",
               "InputTransformer": {
                   "sourceRevisions": {
                       "actionName": "Source",
                       "revisionType": "COMMIT_ID",
                       "revisionValue": "<revisionValue>"
                   },
                   "variables": [
                       {
                           "name": "Branch_Name",
                           "value": "value"
                       }
                   ]
               }
           }
       ]
   }
   ```<a name="proc-cli-flag-codecommit"></a>

**編輯管道的 PollForSourceChanges 參數**
**重要**  
當您使用這個方法建立管道時，如果沒有明確設為 false，則 `PollForSourceChanges` 參數會預設為 true。當新增基於事件的變更偵測時，您必須將該參數新增到輸出，並將其設為 false 以停用輪詢。否則，您的管道會針對單一來源變更啟動兩次。如需詳細資訊，請參閱[`PollForSourceChanges` 參數的有效設定](PollForSourceChanges-defaults.md)。

1. 執行 **get-pipeline** 命令，將管道結構複製到 JSON 檔案。例如，針對名為 `MyFirstPipeline` 的管道，執行下列命令：

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

   此命令不會傳回任何內容，但您建立的檔案應該會顯示在您執行命令的目錄中。

1. 在任何純文字編輯器中開啟 JSON 檔案，然後將 `PollForSourceChanges` 參數變更為 `false`，來編輯來源階段，如這個範例所示。

   **為什麼我會做出此變更？** 將此參數變更為 `false` 會關閉定期檢查，因此您只能使用事件型變更偵測。

   ```
   "configuration": {
       "PollForSourceChanges": "false",
       "BranchName": "main",
       "RepositoryName": "MyTestRepo"
   },
   ```

1. 如果您使用的是使用 **get-pipeline** 命令擷取的管道結構，請從 JSON 檔案中移除 `metadata` 行。否則，**update-pipeline** 命令無法使用它。移除 `"metadata": { }` 行，以及 `"created"`、`"pipelineARN"` 和 `"updated"` 欄位。

   例如，從結構中移除下列幾行：

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

   儲存檔案。

1. 若要套用您的變更，請執行 **update-pipeline** 命令、指定管道 JSON 檔案：
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

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

   此命令會傳回所編輯管道的整個結構。
**注意**  
**update-pipeline** 命令將終止管道。若在您執行 **update-pipeline** 命令時有修訂正在透過管道執行，該執行將停止。您必須手動啟動管道，以透過更新的管道執行該修訂。使用 **`start-pipeline-execution`** 命令來手動啟動您的管道。