

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

# 使用 Git 同步功能，將堆疊與儲存在 Git 儲存庫中的來源程式碼同步
<a name="git-sync"></a>

使用 Git 同步，您可以使用原始碼控制來管理 CloudFormation 堆疊。可以設定 CloudFormation 以監視 Git 儲存庫來執行此操作。系統會監視儲存庫是否有對兩個檔案的變更：
+ 定義堆疊的 CloudFormation 範本檔案
+ 包含設定堆疊之參數的堆疊部署檔案

使用 Git 同步功能，就可以使用提取請求和版本追蹤，從集中位置中設定、部署和更新 CloudFormation 堆疊。當您對範本或部署檔案遞交變更時，CloudFormation 會自動更新堆疊。如果使用提取請求，CloudFormation 可以在提取請求上留下註解，說明在實際更新堆疊之前要對堆疊進行哪些變更。不過，需要先啟用此功能。

Git 同步提供主控台介面，您可以使用它來連結至儲存庫、產生堆疊部署檔案、更新 CloudFormation 範本，以及將提取請求提交至儲存庫。Git 同步也提供了一個狀態儀表板，您可以用來監視、編輯和疑難排解作用中的 Git 同步堆疊部署。當您[建立堆疊](cfn-console-create-stack.md)時，會透過 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)存取 Git 同步。也可以使用 CodeConnections 來存取 Git 同步。如需詳細資訊，請參閱《開發人員工具主控台使用者指南**》中的[使用連結儲存庫的同步組態](https://docs.aws.amazon.com/dtconsole/latest/userguide/configurations.html)。

Git 同步支援 [GitHub](https://github.com/)、[GitHub Enterprise](https://github.com/enterprise)、[GitLab](https://about.gitlab.com/)、[Bitbucket](https://bitbucket.org) 以及 [GitLab 自我管理的](https://docs.gitlab.com/subscriptions/self_managed/)儲存庫。

**注意**  
Git 同步可在下列區域使用：美國東部 (維吉尼亞北部)、美國東部 (俄亥俄)、美國西部 (加利佛尼亞北部)、美國西部 (奧勒岡)、加拿大 (中部)、亞太區域 (孟買)、亞太區域 (東京)、亞太區域 (首爾)、亞太區域 (新加坡)、亞太區域 (雪梨)、歐洲 (愛爾蘭)、、歐洲 (倫敦)、歐洲 (巴黎)、歐洲 (斯德哥爾摩)、歐洲 (法蘭克福)、歐洲 (米蘭) 和南美洲 (聖保羅)。

如需有關搭配使用 Git 同步與多帳戶策略的詳細資訊，請參閱下列部落格文章[使用 CloudFormation Git 同步來設定客戶帳戶中的資源](https://aws.amazon.com/blogs/devops/use-aws-cloudformation-git-sync-to-configure-resources-in-customer-accounts/)。

**Topics**
+ [Git 同步的運作方式](git-sync-concepts-terms.md)
+ [先決條件](git-sync-prereq.md)
+ [從儲存庫原始程式碼建立堆疊](git-sync-create-stack-from-repository-source-code.md)
+ [啟用提取請求的註解](gitsync-enable-comments-on-pull-requests.md)
+ [狀態儀表板](git-sync-status.md)

# Git 同步如何與 CloudFormation 搭配運作
<a name="git-sync-concepts-terms"></a>

本主題說明 Git 同步的運作方式，並介紹使用它所需的重要概念。

**Topics**
+ [Git 同步的運作方式](#git-sync-concepts-terms-how)
+ [提取請求的註解](#git-sync-comments-on-pull-requests)
+ [堆疊部署檔案](#git-sync-concepts-terms-depoyment-file)
+ [CloudFormation 範本檔案](#git-sync-concepts-terms-template-file)
+ [範本定義儲存庫](#git-sync-concepts-terms-template-definition-repository)

## Git 同步的運作方式
<a name="git-sync-concepts-terms-how"></a>

若要使用 Git 同步，必須先使用 [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) 服務將 Git 提供者連線至 CloudFormation。在本指南的程序中，透過 CodeConnections 主控台建立連線。或者，也可以使用 AWS CLI來建立連線。可以使用下列任何 Git 提供者：
+ [GitHub](https://github.com/)
+ [GitHub Enterprise](https://github.com/enterprise/)
+ [GitLab](https://about.gitlab.com/)
+ [Bitbucket](https://bitbucket.org)
+ [GitLab 自我管理](https://docs.gitlab.com/subscriptions/self_managed/)

接下來，建立一個可定義堆疊的 CloudFormation 範本，並將其新增至您的儲存庫。此範本檔案會受到監控。CloudFormation 會在堆疊遞交變更時自動更新堆疊。

在 CloudFormation 主控台中，您會建立新堆疊，然後選擇**從 Git 同步**，以指示 CloudFormation 使用 Git 同步。您將指定要 CloudFormation 監控的儲存庫和分支，並在定義堆疊的儲存庫中指定 CloudFormation 範本。

在設定過程中，您可以從儲存庫提供自己的堆疊部署檔案，也可以讓 Git 同步為您生成一個檔案。堆疊部署檔案包含設定堆疊中資源的參數和值。此堆疊部署檔案會受到監控。CloudFormation 會在堆疊遞交變更時自動更新堆疊。

Git 同步會在您的儲存庫中建立一個提取請求，以便將您的堆疊與 CloudFormation 範本檔案和堆疊部署檔案同步。如果 Git 同步為您生成堆疊部署檔案，則檔案會透過 Git 同步提交到您的儲存庫。

然後，將提取請求合併至儲存庫，讓 CloudFormation 佈建堆疊、使用您的部署參數設定堆疊，並開始監控儲存庫以瞭解是否有任何變更。

從那時起，每當變更範本檔案或堆疊部署檔案並將其遞交至儲存庫時，CloudFormation 都會自動偵測變更。如果您的團隊使用提取請求，則團隊成員就可以在部署變更之前檢閱和核准變更。接受提取請求後，CloudFormation 會部署變更。

在 CloudFormation 主控台中，您可監視堆疊的 Git 同步組態的狀態，並查看套用至堆疊的遞交歷史記錄。主控台也提供重新設定 Git 同步和疑難排解問題的工具。

## 提取請求的註解
<a name="git-sync-comments-on-pull-requests"></a>

您可以選擇讓 CloudFormation 透過 CodeConnections 服務在提取請求中建立程式碼變更的摘要，方法是在主控台中開啟**對提取請求啟用註解**選項。提供提取請求中的變更摘要意味著團隊成員可以在合併提取請求之前輕鬆檢閱和了解提議修改的影響。如需詳細資訊，請參閱[讓 CloudFormation 在提取請求中發佈堆疊變更的摘要](gitsync-enable-comments-on-pull-requests.md)。

## 堆疊部署檔案
<a name="git-sync-concepts-terms-depoyment-file"></a>

堆疊部署檔案是 JavaScript 物件標記法 (JSON) 或 YAML 標準格式檔案，其中包含管理 CloudFormation 堆疊的參數和值。它受到是否有任何變更的監控。當檔案的變更遞交至儲存庫時，關聯的堆疊會自動更新。

堆疊部署檔案包含鍵值組及兩部字典：
+ `template-file-path`

  這是 CloudFormation 範本檔案的完整儲存庫路徑。範本檔案會針對與此部署檔案關聯的 CloudFormation 堆疊宣告資源。
+ `parameters`

  參數字典包含堆疊中設定資源的鍵值組。堆疊部署檔案最多可以有 50 個參數。
+ `tags`

  標籤字典包含選用鍵值組，您可以用來識別和分類堆疊中的資源。堆疊部署檔案最多可以有 50 個標籤。

您可以提供自己的堆疊部署檔案，或讓 Git 同步為您建立一個檔案，然後自動將提取要求提交至您的儲存庫。您可以透過編輯堆疊部署檔案並將變更遞交至儲存庫的方式來管理參數和標籤。

以下是 Git 同步堆疊部署檔案的範例：

```
template-file-path: fargate-srvc/my-stack-template.yaml

parameters: 
    image: public.ecr.aws/lts/nginx:latest
    task_size: x-small
    max_capacity: 5
    port: 8080
    env: production
tags:
    cost-center: '123456'
    org: 'AWS'
```

## CloudFormation 範本檔案
<a name="git-sync-concepts-terms-template-file"></a>

範本檔案包含組成 CloudFormation 堆疊 AWS 的資源宣告。運用 Git 同步，範本檔案會儲存在 Git 儲存庫中，並由堆疊部署檔案參照。您可以透過編輯範本檔案並將變更遞交至儲存庫的方式來管理堆疊。

如需詳細資訊，請參閱[使用 CloudFormation 範本](template-guide.md)。

## 範本定義儲存庫
<a name="git-sync-concepts-terms-template-definition-repository"></a>

範本定義儲存庫是透過 Git 同步連結到 CloudFormation 的 Git 儲存庫。儲存庫會受到是否有對 CloudFormation 範本和堆疊部署檔案進行任何變更的監控。當您遞交對檔案的變更時，關聯的堆疊會自動更新。

**重要**  
當您在 Git 同步主控台中設定範本定義儲存庫時，請從 Git 連線選取正確的*儲存庫*和*分支*。Git 同步只會監控已設定的儲存庫和分支是否有對 CloudFormation 範本和堆疊部署檔案的變更。

# 使用 Git 同步功能將堆疊同步至 Git 儲存庫的先決條件
<a name="git-sync-prereq"></a>

將 CloudFormation 堆疊同步至 Git 儲存庫之前，請確認滿足下列要求。

**Topics**
+ [Git 儲存庫](#git-sync-prereq-repo)
+ [CloudFormation 範本](#git-sync-prereq-template)
+ [Git 同步服務角色](#git-sync-prereq-iam)
+ [主控台使用者的 IAM 許可](#git-sync-prereq-user-permissions)

## Git 儲存庫
<a name="git-sync-prereq-repo"></a>

必須在下列其中一個平台上託管 Git 儲存庫。
+ [GitHub](https://github.com/)
+ [GitHub Enterprise](https://github.com/enterprise)
+ [GitLab](https://about.gitlab.com/)
+ [Bitbucket](https://bitbucket.org)
+ [GitLab 自我管理](https://docs.gitlab.com/subscriptions/self_managed/)

儲存庫可以是公有或私有。可以透過[連線主控台](https://console.aws.amazon.com/codesuite/settings/connections)將 Git 儲存庫連線至 CloudFormation。

## CloudFormation 範本
<a name="git-sync-prereq-template"></a>

Git 儲存庫必須擁有一個 [CloudFormation 範本檔案](git-sync-concepts-terms.md#git-sync-concepts-terms-template-file)，該範本檔案已簽入到您想要與 Git 同步連線的分支中。[堆疊部署檔案](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)將參考此範本。

## Git 同步服務角色
<a name="git-sync-prereq-iam"></a>

Git 同步需要 IAM 角色。可以選擇在設定 Git 同步時為堆疊建立 IAM 角色，也可以使用現有角色。

**注意**  
自動產生的 IAM 角色僅會將許可套用至為其產生角色的堆疊。若要重複使用自動產生的 IAM 角色，您必須編輯新堆疊的角色。

### Git 同步服務角色所需的許可
<a name="git-sync-prereq-permissions"></a>

您為 Git 同步提供的 IAM 角色需要下列許可。
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ValidateTemplate`
+ `events:PutRule`
+ `events:PutTargets`

**注意**  
上述必要許可會自動新增至 Git 同步產生的 IAM 角色。

下列 IAM 角色範例包含 Git 同步的先決條件許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SyncToCloudFormation",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PolicyForManagedRules",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:PutTargets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                "events:ManagedBy": ["cloudformation.sync.codeconnections.amazonaws.com"]
                }
            }
        },
        {
            "Sid": "PolicyForDescribingRule",
            "Effect": "Allow",
            "Action": "events:DescribeRule",
            "Resource": "*"
        }
    ]
}
```

------

#### 信任政策
<a name="git-sync-prereq-trust-policy"></a>

當您建立角色以定義信任關係時，必須提供以下信任政策。

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

****  

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

------

建議您使用 `aws:SourceArn` 和 `aws:SourceAccount` 條件金鑰，保護自己免受混淆代理人問題的困擾。來源帳戶是您的帳戶 ID，而來源 ARN 是允許 CloudFormation 連線至 Git 儲存庫的 [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) 服務中的連線 ARN。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CfnGitSyncTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.sync.codeconnections.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:codeconnections:us-east-1:123456789012:connection/EXAMPLE64-8aad-4d5d-8878-dfcab0bc441f"
        }
      }
    }
  ]
}
```

------

如需有關混淆代理人問題的詳細資訊，請參閱 [預防跨服務混淆代理人](cross-service-confused-deputy-prevention.md)。

## 主控台使用者的 IAM 許可
<a name="git-sync-prereq-user-permissions"></a>

若要透過 CloudFormation 主控台成功設定 Git 同步，還必須透過 IAM 授予最終使用者許可。

需要下列 `codeconnections` 許可才能建立和管理 Git 儲存庫的連線。
+ `codeconnections:CreateRepositoryLink`
+ `codeconnections:CreateSyncConfiguration`
+ `codeconnections:DeleteRepositoryLink`
+ `codeconnections:DeleteSyncConfiguration`
+ `codeconnections:GetRepositoryLink`
+ `codeconnections:GetSyncConfiguration`
+ `codeconnections:ListRepositoryLinks`
+ `codeconnections:ListSyncConfigurations`
+ `codeconnections:ListTagsForResource`
+ `codeconnections:TagResource`
+ `codeconnections:UntagResource`
+ `codeconnections:UpdateRepositoryLink`
+ `codeconnections:UpdateSyncBlocker`
+ `codeconnections:UpdateSyncConfiguration`
+ `codeconnections:UseConnection`

主控台使用者也必須具備下列 `cloudformation` 許可，才能在 Git 同步設定程序期間檢視和管理堆疊。
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:GetTemplate`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ListStacks`
+ `cloudformation:ValidateTemplate`

**注意**  
雖然僅使用主控台可能並不嚴格要求變更集許可 (`cloudformation:CreateChangeSet`、`cloudformation:DeleteChangeSet`、`cloudformation:DescribeChangeSet`、`cloudformation:ExecuteChangeSet`)，但建議您啟用全堆疊檢查和管理功能。

下列範例 IAM 政策包含透過主控台設定 Git 同步所需的使用者許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CodeConnectionsPermissions",
            "Effect": "Allow",
            "Action": [
                "codeconnections:CreateRepositoryLink",
                "codeconnections:CreateSyncConfiguration",
                "codeconnections:DeleteRepositoryLink",
                "codeconnections:DeleteSyncConfiguration",
                "codeconnections:GetRepositoryLink",
                "codeconnections:GetSyncConfiguration",
                "codeconnections:ListRepositoryLinks",
                "codeconnections:ListSyncConfigurations",
                "codeconnections:ListTagsForResource",
                "codeconnections:TagResource",
                "codeconnections:UntagResource",
                "codeconnections:UpdateRepositoryLink",
                "codeconnections:UpdateSyncBlocker",
                "codeconnections:UpdateSyncConfiguration",
                "codeconnections:UseConnection",
                "codeconnections:CreateForcedTargetSync",
                "codeconnections:CreatePullRequestForResource"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CloudFormationConsolePermissions",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注意**  
建立包含 `codeconnections:CreateForcedTargetSync` 和 `codeconnections:CreatePullRequestForResource` 許可的 IAM 政策時，可能會在 IAM 主控台中看到警告，指出這些動作不存在。可以忽略此警告，且仍會成功建立政策。即使 IAM 主控台無法辨識，某些 Git 同步操作仍需要這些許可。

# 使用 Git 同步從儲存庫原始程式碼建立堆疊
<a name="git-sync-create-stack-from-repository-source-code"></a>

本主題說明如何建立 CloudFormation 堆疊，它透過 Git 同步功能同步至 Git 儲存庫。

**重要**  
繼續操作之前，請先完成上一節中的所有[先決條件](git-sync-prereq.md)。

## 從儲存庫原始程式碼建立堆疊
<a name="create-stack-from-repository-source-code"></a>

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇要在其中 AWS 區域 建立堆疊的 。

1. 在**堆疊**頁面中，選擇**建立堆疊**，並選擇**使用新資源 (標準)**。

1. 在 **Create stack** (建立堆疊) 頁面上，執行下列動作：

   1. 對於**先決條件 - 準備範本**，保持選取**選擇現有範本**。

   1. 針對**指定範本**，選擇**從 Git 同步**，然後選擇**下一步**。

1. 在**指定堆疊詳細資訊**頁面的**堆疊名稱**中，輸入堆疊名稱。堆疊名稱可包含字母 (A-Z 和 a-z)、數字 (0-9) 和破折號 (-)。

1. 對於**堆疊部署檔案**，**部署檔案建立**：
   + 如果*尚未*建立堆疊部署檔案並將其新增至儲存庫，請選擇**使用下列參數建立檔案，並將其放在我的儲存庫中。**
   + 如果儲存庫中有堆疊部署檔案，請選擇**我在儲存庫中提供自己的檔案。**

1. 針對**範本定義儲存庫**，選取**選擇連結的 Git 儲存庫**以選擇已連結至 CloudFormation 的 Git 儲存庫，或選擇**連結 Git 儲存庫**以連結新的儲存庫。如果選擇**連結 Git 儲存庫**，請執行下列動作：

   1. 在**選取儲存庫提供者**中，選擇下列其中一項：
      + **GitHub**
      + **GitHub Enterprise Server**
      + **GitLab**
      + **Bitbucket**
      + **GitLab 自我管理**

   1. 在**連線**中，請從清單中選擇一個連線。如果**連線**清單中沒有出現任何選項，請選擇**新增一個新連線**，以轉至[連線主控台](https://console.aws.amazon.com/codesuite/settings/connections)並建立與儲存庫的連線。

1. 在**儲存庫**清單中，選取包含堆疊範本檔案的 Git 儲存庫。

1. 在**分支**清單中，選取您希望 Git 同步監視的分支。
**注意**  
Git 同步只會監控所選分支是否有對 CloudFormation 範本和堆疊部署檔案的變更。您想要套用至堆疊的任何變更，均必須遞交到此分支。

1. 若為**部署檔案路徑**，請指定完整路徑，包含儲存庫分支根目錄中的堆疊部署檔案名稱。

   如果 CloudFormation 正在為您產生檔案，這就是檔案將在您的儲存庫中遞交的位置。如果您要提供檔案，這是檔案在儲存庫中的位置。

1. 新增 **IAM 角色**。IAM 角色包含 CloudFormation 從 Git 儲存庫同步堆疊所需的許可。選擇**新的 IAM 角色**來產生新角色，或選擇**現有 IAM 角色**，從 AWS 帳戶中選取現有角色。如果您選擇產生新角色，所需的許可會包含在角色中。

1. 啟用或關閉提取請求的註解：
   + 若要讓 CloudFormation 在提取請求中發佈變更集資訊以進行堆疊更新，請保持**啟用提取請求的註解**開關開啟。
   + 如果關閉此開關，當 repo 檔案更新時，CloudFormation 不會說明目前堆疊組態與提取請求中所提議變更之間的差異。

1. 若為**範本檔案路徑**，請為堆疊範本檔案指定儲存庫根目錄的完整路徑。

1. (選用) 若要指定堆疊參數，請選擇**新增參數**，為每個參數提供索引鍵和值，然後選擇**下一步**。如需詳細資訊，請參閱[堆疊部署檔案](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)。

   例如，若要在堆疊部署檔案中指定 **port=8080** 參數，請執行下列動作：

   1. 選擇 **Add parameter (新增參數)**。

   1. 在 **Key** (索引鍵) 欄位，輸入 **port**。

   1. 針對**數值**，輸入 **8080**。

1. (選用) 若要指定堆疊標籤，選取**新增新標籤**，提供每個標籤的標籤鍵和值，然後選擇**下一步**。如需詳細資訊，請參閱[堆疊部署檔案](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)。

1. 選擇**下一步**繼續**設定堆疊選項**。如需組態堆疊選項的相關資訊，請參閱 [設定堆疊選項](cfn-console-create-stack.md#configure-stack-options)。

   完成堆疊組態後，請選擇**下一步**以繼續。

1. 檢閱堆疊設定並確認下列事項：
   + 堆疊範本已正確設定，並設為**從 Git 同步**。
   + 部署檔案設定正確。
   + 範本定義儲存庫已正確設定，尤其是選取了正確的**儲存庫**和**分支名稱**。
   + 部署檔案的預覽是正確的，且包含預期的參數與值。

1. 選擇**提交**以建立堆疊。

   選擇**提交**後，會在 Git 儲存庫中自動建立一個提取請求。必須將此提取請求合併到 Git 儲存庫中，才能建立堆疊。建立堆疊之後，CloudFormation 會監控 Git 儲存庫是否有變更。

## 從 Git 儲存庫中更新堆疊
<a name="update-stack-from-repository-source-code"></a>

若要更新堆疊，請直接變更範本檔案或 Git 儲存庫中的堆疊部署檔案。將變更遞交至受監控分支後，CloudFormation 會自動更新堆疊。如果使用提取請求，會在更新堆疊之前，在您的 Git 儲存庫中自動建立提取請求。必須將此提取請求合併到 Git 儲存庫中，才能更新堆疊。

在 CloudFormation 控制台中，可以選取堆疊並選擇 **Git 同步**索引標籤，以檢視堆疊狀態和同步事件的相關資訊。如需詳細資訊，請參閱[Git 同步狀態儀表板](git-sync-status.md)。

# 讓 CloudFormation 在提取請求中發佈堆疊變更的摘要
<a name="gitsync-enable-comments-on-pull-requests"></a>

本主題說明如何讓 CloudFormation 在 Git 儲存庫的提取請求中發佈堆疊變更的摘要。

透過啟用提取請求功能的註解，可以允許 CloudFormation 發佈註解，以便在儲存庫檔案更新時，描述目前堆疊組態與所提議變更之間的差異。此註解提供將新增、修改或刪除的資源摘要，可讓您在合併提取請求之前執行徹底的程式碼檢閱。

**若要對新堆疊的提取請求啟用註解 (主控台)**  
建立堆疊時，請在**指定堆疊詳細資訊**頁面的**範本定義儲存庫**下，確定開啟**啟用提取請求的註解**開關。這是新堆疊的預設設定。

**若要對現有堆疊的提取請求啟用註解 (主控台)**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇您在其中建立堆疊 AWS 區域 的 。

1. 在**堆疊**頁面中，選擇要更新的執行中堆疊。

1. 選擇 **Git 同步**索引標籤，然後選擇**編輯**。

1. 在**編輯 Git 同步設定**頁面的**範本定義儲存庫**下，開啟**啟用提取請求的註解**開關。

1. 選擇 **Update configuration (更新組態)**。

# Git 同步狀態儀表板
<a name="git-sync-status"></a>

若要檢視 AWS CloudFormation Git 同步部署的狀態，請在 CloudFormation 主控台中選取堆疊，然後選擇 **Git 同步**索引標籤。

Git 同步索引標籤分為兩個面板：**Git 同步狀態**和**最新同步事件**。

## Git 同步狀態
<a name="git-sync-status-info"></a>

頂端面板提供下列有關堆疊的 Git 同步組態之資訊。

****儲存庫****  
 連接到 Git 同步的儲存庫連結

****儲存庫提供者****  
儲存庫提供者的名稱

****分支****  
Git 同步正在監視的分支名稱

****部署檔案路徑****  
此堆疊之堆疊部署檔案的完整路徑

****儲存庫同步狀態****  
最近一次同步操作的狀態

****儲存庫同步狀態訊息****  
最近一次同步操作的訊息

****Git 同步狀態****  
此堆疊的 Git 同步狀態

****佈建狀態****  
佈建操作的狀態

在面板的右上角，使用下列按鈕來修改或更新 Git 同步：
+ **編輯** - 編輯 Git 同步組態。
+ **重試最新遞交** - 根據最新遞交到儲存庫來更新堆疊。
+ **中斷連線** - 中斷 Git 同步與堆疊的連線。
+ **重新整理** - 重新整理 Git 同步狀態面板。

## 最新同步事件
<a name="git-sync-status-sync-events"></a>

**最新同步事件**面板會顯示已套用至堆疊的遞交之資料表。

您可以使用每個直欄標題中的方向鍵來排序資料表。資料表可以根據下列內容以遞增或遞減順序來排序：
+ **日期**
+ **遞交 ID**
+ **事件**
+ **日期**
+ **事件類型**

## 支援的堆疊狀態
<a name="git-sync-status-stack-state"></a>

只有當堆疊處於下列其中一種支援狀態時，才能為堆疊設定 Git 同步：
+ `CREATE_COMPLETE`
+ `UPDATE_COMPLETE`
+ `UPDATE_ROLLBACK_COMPLETE`
+ `IMPORT_COMPLETE`
+ `IMPORT_ROLLBACK_COMPLETE`

下列資料表包含具有描述的堆疊狀態代碼的完整清單：


| 堆疊狀態和選用的詳細狀態 | Description | 
| --- | --- | 
|  `CREATE_COMPLETE`  |  一或多個堆疊建立成功。  | 
|  `CREATE_IN_PROGRESS`  |  一或多個堆疊建立中。  | 
|  `CREATE_FAILED`  |  一或多個堆疊建立失敗。檢視堆疊事件，查看任何相關聯的錯誤訊息。建立失敗的可能原因包括權限不足，無法使用堆疊中的所有資源、 AWS 服務拒絕的參數值，或在資源建立期間逾時。  | 
|  `DELETE_COMPLETE`  |  一或多個堆疊成功刪除。刪除的堆疊仍保留，90 天內仍可檢視。  | 
|  `DELETE_FAILED`  |  一或多個堆疊刪除失敗。因為刪除失敗，所以您可能有一些資源仍在執行，但是您無法使用或更新堆疊。再次刪除堆疊，或檢視堆疊事件，查看任何相關聯的錯誤訊息。  | 
|  `DELETE_IN_PROGRESS`  |  一或多個堆疊移除中。  | 
| `REVIEW_IN_PROGRESS` | 一或多個堆疊建立中，這些堆疊具有預期的 StackId，但沒有任何範本或資源。 針對[最大可能堆疊數](cloudformation-limits.md)計數有此狀態碼的堆疊。  | 
|  `ROLLBACK_COMPLETE`  |  在堆疊建立失敗或明確取消建立堆疊之後，成功移除一或多個堆疊。堆疊返回到之前的工作狀態。在建立堆疊操作期間建立的所有資源都予以刪除。 此狀態只會在堆疊建立失敗後出現。此狀態表示來自所建立之部分堆疊的所有操作均已適當清除。在此狀態時，只能執行刪除操作。  | 
|  `ROLLBACK_FAILED`  |  在堆疊建立失敗或明確取消建立堆疊之後，移除一或多個堆疊失敗。刪除堆疊，或檢視堆疊事件，查看任何相關聯的錯誤訊息。  | 
|  `ROLLBACK_IN_PROGRESS`  |  在堆疊建立失敗或明確取消建立堆疊之後，持續移除一或多個堆疊。  | 
|  `UPDATE_COMPLETE`  | 一或多個堆疊更新成功。 | 
|  `UPDATE_COMPLETE_CLEANUP_IN_PROGRESS`  |  成功更新堆疊之後，持續移除一或多個堆疊的舊資源。針對需要替換資源的堆疊更新，CloudFormation 會先建立新資源，然後刪除舊資源，藉以減少任何堆疊中斷。在此狀態下，堆疊已更新且可用，但 CloudFormation 仍會刪除舊資源。  | 
|  `UPDATE_FAILED`  | 一或多個堆疊更新不成功。檢視堆疊事件，查看任何相關聯的錯誤訊息。 | 
|  `UPDATE_IN_PROGRESS`  |  持續更新一或多個堆疊。  | 
|  `UPDATE_ROLLBACK_COMPLETE`  |  堆疊更新失敗之後，成功將一或多個堆疊返回到之前的運作狀態。  | 
|  `UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS`  |  更新堆疊失敗之後，持續移除一或多個堆疊的新資源。在此狀態下，堆疊已復原到之前的運作狀態且可使用，但 CloudFormation 仍將刪除在堆疊更新期間建立的任何新資源。  | 
|  `UPDATE_ROLLBACK_FAILED`  |  堆疊更新失敗之後，將一或多個堆疊返回到之前的運作狀態失敗。在此狀態時，您可以刪除堆疊或[繼續復原](using-cfn-updating-stacks-continueupdaterollback.md)。您可能需要先修正錯誤，您的堆疊才能回到運作狀態。或者，您可以聯絡 將堆疊 支援 還原為可用狀態。  | 
|  `UPDATE_ROLLBACK_IN_PROGRESS`  |  堆疊更新失敗之後，持續將一或多個堆疊返回到之前的運作狀態。  | 
|  `IMPORT_IN_PROGRESS`  |  匯入操作正在進行。  | 
|  `IMPORT_COMPLETE`  |  已針對支援 `resource import` 堆疊中的所有資源順利完成匯入操作。  | 
|  `IMPORT_ROLLBACK_IN_PROGRESS`  |  匯入將復原回先前的範本組態。  | 
|  `IMPORT_ROLLBACK_FAILED`  |  堆疊中至少一個資源的匯入復原操作失敗。成功匯入資源 CloudFormation 的結果將可提供使用。  | 
|  `IMPORT_ROLLBACK_COMPLETE`  |  匯入已成功復原回先前的範本組態。  | 