

# Git 동기화를 사용하여 Git 리포지토리에 저장된 소스 코드와 스택 동기화
<a name="git-sync"></a>

Git 동기화를 사용하면 소스 제어를 통해 CloudFormation 스택을 관리할 수 있습니다. 이렇게 하려면 Git 리포지토리를 모니터링하도록 CloudFormation을 구성합니다. 리포지토리에서 다음 두 파일의 변경 사항을 모니터링합니다.
+ 스택을 정의하는 CloudFormation 템플릿 파일
+ 스택을 구성하는 파라미터가 포함된 스택 배포 파일

Git 동기화를 사용하면 풀 요청과 버전 추적을 사용하여 중앙 위치에서 CloudFormation 스택을 구성, 배포 및 업데이트할 수 있습니다. 변경 사항을 템플릿 또는 배포 파일에 커밋하면 CloudFormation이 스택을 자동으로 업데이트합니다. 풀 요청을 사용하는 경우 CloudFormation은 실제로 스택을 업데이트하기 전에 스택에 어떤 변경 사항이 적용될지 설명하는 코멘트를 풀 요청에 남길 수 있습니다. 그러나 먼저 이 기능을 활성화해야 합니다.

Git 동기화에서 제공하는 콘솔 인터페이스를 통해 리포지토리로 연결되는 링크를 사용하고, 스택 배포 파일을 생성하고, CloudFormation 템플릿을 업데이트하고, 리포지토리에 풀 요청을 제출할 수 있습니다. 또한 Git 동기화는 활성 Git 동기화 스택 배포의 모니터링, 편집 및 문제 해결에 사용할 수 있는 상태 대시보드도 제공합니다. Git 동기화는 [스택을 생성](cfn-console-create-stack.md)할 때 [CloudFormation 콘솔](https://console.aws.amazon.com/cloudformation/)을 통해 액세스할 수 있습니다. 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)

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

# 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은 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을 통한 권한도 부여해야 합니다.

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 콘솔에 이러한 작업이 존재하지 않는다는 경고가 표시될수 있습니다. 이 경고를 무시해도 정책이 성공적으로 생성됩니다. 이러한 권한은 IAM 콘솔에서 인식되지 않더라도 특정 Git 동기화 작업에 필요합니다.

# 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 Management Console에 로그인하여 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)에서 CloudFormation 콘솔을 엽니다.

1. 화면 상단의 탐색 모음에서 스택을 생성할 AWS 리전을 선택합니다.

1. **스택** 페이지에서 **스택 생성**을 선택하고 **새 리소스 사용(표준)**을 선택합니다.

1. **스택 생성** 페이지에서 다음을 수행합니다.

   1. **사전 조건 - 템플릿 준비**의 경우 **기존 템플릿 선택**을 선택한 상태로 유지합니다.

   1. **템플릿 지정**에서 **Git에서 동기화**를 선택하고 **다음**을 선택합니다.

1. **스택 세부 정보 지정** 페이지에서 **스택 이름**에 스택의 이름을 입력합니다. 스택 이름에는 문자(A\$1Z 및 a\$1z), 숫자(0\$19), 대시(-)를 포함할 수 있습니다.

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에서 스택 업데이트에 대한 풀 요청에 변경 세트를 게시하도록 하려면 **풀 요청에서 주석 활성화** 토글을 켠 상태로 유지합니다.
   + 이 토글을 끄면 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 Management Console에 로그인하여 [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**
+ **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`  |  스택 업데이트를 실패한 이후에 하나 이상의 스택을 이전 작업 상태로 되돌리지 못했습니다. 이 상태에서는 스택 또는 [continue rollback](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`  |  가져오기가 이전 템플릿 구성으로 성공적으로 롤백되었습니다.  | 