

# 使用 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 同步与多账户策略结合使用的信息，请参阅以下博客文章 [Use CloudFormation Git sync to configure resources in customer accounts](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 Object Notation（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/)

存储库可以是公有的，也可以是私有的。您需要通过 [Connections 控制台](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 是 [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) 服务中允许 CloudFormation 连接到您的 Git 存储库的连接的 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 为最终用户授予权限。

创建和管理与 Git 存储库的连接需要以下 `codeconnections` 权限。
+ `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`

在 Git 同步设置过程中，控制台用户还必须拥有以下 `cloudformation` 权限才能查看和管理堆栈。
+ `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 控制台中看到一条警告，指出这些操作不存在。可以忽略此警告，策略仍将成功创建。某些 Git 同步操作需要这些权限，尽管 IAM 控制台可能无法识别它们。

# 使用 Git 同步从存储库源代码创建堆栈
<a name="git-sync-create-stack-from-repository-source-code"></a>

本主题介绍如何创建使用 Git 同步与 Git 存储库同步的 CloudFormation 堆栈。

**重要**  
在继续之前，请完成上一节中的所有[先决条件](git-sync-prereq.md)。

## 从存储库源代码创建堆栈
<a name="create-stack-from-repository-source-code"></a>

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在屏幕顶部的导航栏中，选择 AWS 区域以在其中创建堆栈。

1. 在**堆栈**页面上，选择**创建堆栈**，然后选择**使用新资源（标准）**。

1. 在**创建堆栈**页面上，执行以下操作：

   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. 对于**连接**，从列表中选择一个连接。如果**连接**列表中没有显示任何选项，请选择**添加新连接**以转到 [Connections 控制台](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 在堆栈更新的拉取请求中发布更改集信息，请将**启用拉取请求注释**开关保持开启状态。
   + 如果您关闭此开关，CloudFormation 将不会描述当前堆栈配置与更新存储库文件拉取请求中的建议更改之间的区别。

1. 对于**模板文件路径**，指定堆栈模板文件在存储库根目录下的完整路径。

1. （可选）要指定堆栈参数，请选择**添加参数**，为每个参数提供键和值，然后选择**下一步**。有关更多信息，请参阅 [堆栈部署文件](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)。

   例如，要在堆栈部署文件中指定 **port=8080** 参数，请执行以下操作：

   1. 选择 **Add parameter (添加参数)**。

   1. 对于**键**，输入 **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 会自动更新堆栈。如果您使用拉取请求，则系统会在 Stack 更新之前在 Git 存储库中自动创建拉取请求。必须将此拉取请求合并到您的 Git 存储库中才能更新您的堆栈。

在 CloudFormation 控制台中，您可以选择堆栈，然后选择 **Git 同步**选项卡，以查看有关堆栈状态和同步事件的信息。有关更多信息，请参阅 [Git 同步状态控制面板](git-sync-status.md)。

# 启用 CloudFormation 在拉取请求中发布堆栈更改摘要
<a name="gitsync-enable-comments-on-pull-requests"></a>

本主题展示了如何让 CloudFormation 在 Git 存储库的发布拉取请求中发布堆栈更改摘要。

通过启用拉取请求注释功能，您可以允许 CloudFormation 发布注释，描述当前堆栈配置与更新存储库文件时的建议更改之间的差异。此注释提供了将要添加、修改或删除的资源的摘要，让您能够在合并拉取请求之前进行全面的代码审查。

**为新堆栈启用拉取请求注释（控制台）**  
创建堆栈时，在**指定堆栈详细信息**页面的**模板定义存储库**下，确保**启用拉取请求注释**开关处于启用状态。对于新堆栈这是默认设置。

**为现有堆栈启用拉取请求注释（控制台）**

1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在屏幕顶部的导航栏中，选择您在其中创建了堆栈的 AWS 区域。

1. 在**堆栈**页面上，选择要更新的正在运行的堆栈。

1. 选择 **Git sync** 选项卡，然后选择**编辑**。

1. 在**编辑 Git sync 设置**页面的**模板定义存储库**下，打开**启用拉取请求注释**开关。

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**
+ **Event (事件)**
+ **日期**
+ **事件类型**

## 支持的堆栈状态
<a name="git-sync-status-stack-state"></a>

只有当堆栈处于以下受支持状态之一时，才能为堆栈配置 Git 同步：
+ `CREATE_COMPLETE`
+ `UPDATE_COMPLETE`
+ `UPDATE_ROLLBACK_COMPLETE`
+ `IMPORT_COMPLETE`
+ `IMPORT_ROLLBACK_COMPLETE`

下表包含堆栈状态代码的完整列表以及描述：


| 堆栈状态和可选的详细状态 | 描述 | 
| --- | --- | 
|  `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`  |  导入成功回滚到以前的模板配置。  | 