

# CloudFormation에서 Git 동기화 작동 방식
<a name="git-sync-concepts-terms"></a>

이 주제에서는 Git 동기화의 작동 방식을 설명하고 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>

스택 배포 파일은 CloudFortation 스택을 관리하는 파라미터 및 값이 포함된 JSON(JavaScript Object Notation) 또는 YAML 표준 형식의 파일입니다. 이 파일의 변경 사항이 모니터링됩니다. 파일의 변경 사항이 리포지토리에 커밋되면 관련 스택이 자동으로 업데이트됩니다.

스택 배포 파일에는 다음과 같이 하나의 키-값 페어와 두 개의 사전이 포함되어 있습니다.
+ `template-file-path`

  CloudFormation 템플릿 파일의 전체 리포지토리 경로입니다. 템플릿 파일은 이 배포 파일과 연결된 CloudFormation 스택의 리소스를 선언합니다.
+ `parameters`

  parameters 사전에는 스택의 리소스를 구성하는 키-값 페어가 포함됩니다. 스택 배포 파일에는 최대 50개의 파라미터가 포함될 수 있습니다.
+ `tags`

  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 템플릿 및 스택 배포 파일의 변경 사항을 모니터링합니다.