

# 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 模板和堆栈部署文件的更改。