

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

# 建立核准規則範本
<a name="how-to-create-template"></a>

您可以建立一或多個核准規則範本，以協助您自訂跨儲存庫的開發工作流程。您可以建立多個範本，以設定自動建立核准規則，讓不同分支具有適當等級的核准和控制。例如，您可以為生產和開發分支建立不同的範本，並將這些範本套用至一或多個儲存庫。當使用者在這些儲存庫中建立提取請求時，將根據這些範本來評估請求。如果請求符合所套用範本中的條件，則會為提取請求建立核准規則。

您可以使用 主控台或 AWS CLI 來建立核准規則範本。如需 受管政策和核准規則範本許可的詳細資訊，請參閱 [核准規則範本上動作的許可](auth-and-access-control-permissions-reference.md#aa-art)和 [AWS CodeCommit 的 受管政策](security-iam-awsmanpol.md)。

**Topics**
+ [建立核准規則範本 （主控台）](#how-to-create-template-console)
+ [建立核准規則範本 (AWS CLI)](#how-to-create-template-cli)

## 建立核准規則範本 （主控台）
<a name="how-to-create-template-console"></a>

依預設，核准規則範本不會與任何儲存庫相關聯。您可以在建立範本時建立範本與一或多個儲存庫之間的關聯，或者稍後再新增關聯。<a name="create-template-console"></a>

## 建立核准規則範本 (主控台)
<a name="create-template-console"></a>

1. 在 https：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 選擇 **Approval rule templates (核准規則範本)**，然後選擇 **Create template (建立範本)**。

1. 在 **Approval rule template name (核准規則範本名稱)** 中，以描述性名稱來命名範本，讓您明白其用途。例如，如果一群資深開發人員中必須有一人核准提取請求，才能合併提取請求，您可以將規則命名為 **Require 1 approver from a senior developer**。

1. (選擇性) 在 **Description (描述)** 中，提供此範本的用途描述。這可以幫助其他人決定此範本是否適用於其儲存庫。

1. 在 **Number of approvals needed (需要的核准數目)** 中，輸入您要的數目。預設為 1。

1. (選擇性) 如果提取請求的核准必須來自特定使用者群組，請在 **Approval rule members (核准規則成員)** 中選擇 **Add (新增)**。在 **Approver type (核准者類型)** 中，選擇以下其中一項：
   + **IAM 使用者名稱或擔任的角色**：此選項會為您用來登入的帳戶預先填入 Amazon Web Services 帳戶 ID，而且只需要名稱。它可用於名稱符合所提供名稱的 IAM 使用者和聯合存取使用者。這是非常強大的選項，可提供極大的彈性。例如，如果您選擇此選項，並使用 Amazon Web Services 帳戶 123456789012 登入，並且您指定 **Mary\$1Major**，則以下所有項目都會計為來自該使用者的核准：
     + 帳戶中的 IAM 使用者 (`arn:aws:iam::123456789012:user/Mary_Major`)
     + 在 IAM 中識別為 Mary\$1Major (`arn:aws:sts::123456789012:federated-user/Mary_Major`) 的聯合身分使用者

     除非您包含萬用字元 (`*Mary_Major`)，否則此選項無法識別擔任角色 **CodeCommitReview** 且角色工作階段名稱為 Mary\$1Major (`arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major`) 的某人的作用中工作階段。您也可以明確指定角色名稱 (`CodeCommitReview/Mary_Major`)。
   + **完整 ARN**：此選項可讓您指定 IAM 使用者或角色的完整 Amazon Resource Name (ARN)。此選項也支援其他 AWS 服務所使用的擔任角色，例如 AWS Lambda 和 AWS CodeBuild。針對擔任的角色，ARN 格式應為 `arn:aws:sts::AccountID:assumed-role/RoleName` (若為角色) 和 `arn:aws:sts::AccountID:assumed-role/FunctionName` (若為函數)。

   如果您選擇 **IAM 使用者名稱或擔任的角色**作為核准者類型，請在**值**中輸入 IAM 使用者或角色的名稱，或輸入使用者或角色的完整 ARN。再次選擇 **Add (新增)**，以新增更多使用者或角色，直到核准要計入所需核准數目中的所有使用者或角色，都已新增為止。

   這兩種核准者類型都允許您在值中使用萬用字元 (\$1)。例如，如果您選擇 **IAM 使用者名稱或擔任的角色**選項，並指定 **CodeCommitReview/\$1**，則擔任 角色的所有使用者**CodeCommitReview**都會計入核准集區中。他們的個別角色工作階段名稱會計入所需的核准者數目。如此一來，Mary\$1Major 和 Li\$1Juan 在登入並擔任 `CodeCommitReview` 時都算作核准。如需 IAM ARNs、萬用字元和格式的詳細資訊，請參閱 [IAM 識別符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。
**注意**  
核准規則不支援跨帳戶核准。

1. (選擇性) 在 **Branch filters (分支篩選條件)** 中，輸入目的地分支名稱，以用來篩選能否建立核准規則。例如，如果您指定*主要*，只有在提取請求的目的地分支是名為*主要*的分支時，才會為關聯儲存庫中的提取請求建立核准規則。您可以在分支名稱中使用萬用字元 (\$1)，將核准規則套用至符合萬用字元案例的所有分支名稱。不過，您不能在分支名稱的開頭使用萬用字元。您最多可以指定 100 個分支名稱。如果您未指定任何篩選條件，範本會套用至相關聯儲存庫中的所有分支。

1. （選用） 在**關聯的儲存庫**中，在**儲存庫**清單中，選擇 AWS 區域 您要與此核准規則建立關聯的儲存庫。
**注意**  
您可以選擇在建立範本之後建立儲存庫的關聯。如需詳細資訊，請參閱[將核准規則範本與儲存庫建立關聯](how-to-associate-template.md)。

1. 選擇**建立**。

![\[核准規則範本，如果在名為主的分支上建立提取請求，且與兩個儲存庫相關聯，則需要來自已定義核准規則的 1 個核准者\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-approval-rule-template.png)


## 建立核准規則範本 (AWS CLI)
<a name="how-to-create-template-cli"></a>

您可以使用 AWS CLI 來建立核准規則範本。當您使用 時 AWS CLI，您可以指定範本的目的地參考，以便它僅適用於提取目的地分支與範本中分支相符的請求。<a name="create-template-cli"></a>

## 建立核准規則範本 (AWS CLI)
<a name="create-template-cli"></a>

1. 在終端機或命令列，執行 **create-approval-rule-template** 命令，並指定：
   + 核准規則範本的名稱。考慮使用能描述用途的名稱。
   + 核准規則範本的描述。與名稱一樣，請考慮提供詳細的描述。
   + 核准規則範本的 JSON 結構。此結構可包含目的地參考的需求 (套用核准規則之提取請求的目的地分支)，以及核准集區成員 (核准計入所需核准數目中的使用者)。

   建立核准規則的內容時，您有兩種方式在核准集區中指定核准者：
   + **CodeCommitApprovers**：此選項只需要 Amazon Web Services 帳戶和資源。它可用於名稱符合所提供資源名稱的 IAM 使用者和聯合存取使用者。這是非常強大的選項，可提供極大的彈性。例如，如果您指定 AWS 帳戶 123456789012 和 **Mary\$1Major**，則下列所有項目都會視為來自該使用者的核准：
     + 帳戶中的 IAM 使用者 (`arn:aws:iam::123456789012:user/Mary_Major`)
     + 在 IAM 中識別為 Mary\$1Major (`arn:aws:sts::123456789012:federated-user/Mary_Major`) 的聯合身分使用者

     除非您包含萬用字元 ()，否則此選項無法辨識擔任 *SeniorDevelopers* 角色且角色工作階段名稱為 *Mary\$1Major* (`arn:aws:sts::123456789012:assumed-role/SeniorDevelopers/Mary_Major`) 之某人的作用中工作階段`*Mary_Major`。
   + **完整 ARN**：此選項可讓您指定 IAM 使用者或角色的完整 Amazon Resource Name (ARN)。

   如需 IAM ARNs、萬用字元和格式的詳細資訊，請參閱 [IAM 識別符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

   下列範例建立名為 **2-approver-rule-for-main** 且描述為 **Requires two developers from the team to approve the pull request if the destination branch is main** 的核准規則範本。此範本需要兩位擔任角色 **CodeCommitReview** 使用者核准任何提取請求，提取請求才能合併至 **main** 分支：

   ```
   aws codecommit create-approval-rule-template --approval-rule-template-name 2-approver-rule-for-main --approval-rule-template-description "Requires two developers from the team to approve the pull request if the destination branch is main" --approval-rule-template-content "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}"
   ```

1. 如果此命令成功執行，您會看到類似如下的輸出傳回：

   ```
   {
       "approvalRuleTemplate": {
           "approvalRuleTemplateName": "2-approver-rule-for-main",
           "creationDate": 1571356106.936,
           "approvalRuleTemplateId": "dd8b17fe-EXAMPLE",
           "approvalRuleTemplateContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}",
           "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major",
           "approvalRuleTemplateDescription": "Requires two developers from the team to approve the pull request if the destination branch is main",
           "lastModifiedDate": 1571356106.936,
           "ruleContentSha256": "4711b576EXAMPLE"
       }
   }
   ```