

# StackSets 개념
<a name="stacksets-concepts"></a>

다음 용어와 개념은 StackSet의 이해와 사용에 매우 중요합니다.

**Topics**
+ [관리자 및 대상 계정](#stacksets-concepts-accts)
+ [CloudFormation StackSets](#stacksets-concepts-stackset)
+ [StackSet에 대한 권한 모델](#stacksets-concepts-stackset-permission-models)
+ [스택 인스턴스](#stacksets-concepts-stackinstances)
+ [StackSet 작업](#stacksets-concepts-ops)
+ [StackSet 작업 옵션](#stackset-ops-options)
+ [Tags](#stackset-concepts-tags)
+ [StackSets 상태 코드](#stackset-status-codes)
+ [스택 인스턴스 상태 코드](#stack-instance-status-codes)

## 관리자 및 대상 계정
<a name="stacksets-concepts-accts"></a>

*관리자 계정*은 StackSet를 생성하는 AWS 계정입니다. 서비스 관리형 권한이 있는 StackSet의 경우 관리자 계정은 조직의 관리 계정 또는 위임된 관리자 계정입니다. StackSet를 생성한 AWS 관리자 계정으로 로그인하여 StackSet를 관리할 수 있습니다.

*대상 계정*은 StackSet에서 하나 이상의 스택을 생성, 업데이트 또는 삭제할 계정입니다. StackSet를 사용하여 대상 계정에 스택을 생성하기 전에 관리자 계정과 대상 계정 간에 신뢰 관계를 설정합니다.

## CloudFormation StackSets
<a name="stacksets-concepts-stackset"></a>

*StackSet*는 지정된 AWS 계정 및 리전에 배포되는 여러 스택의 컨테이너 역할을 합니다. 각 스택은 동일한 CloudFormation 템플릿을 기반으로 하지만 파라미터를 사용하여 개별 스택을 사용자 지정할 수 있습니다.

StackSet를 정의하면 지정한 대상 계정과 AWS 리전에서 스택을 생성, 업데이트 또는 삭제할 수 있습니다. 스택을 생성, 업데이트 또는 삭제할 때 작업 기본 설정을 지정할 수도 있습니다. 예를 들어 작업을 수행하려는 리전의 순서, 스택 작업이 중지되기 전의 내결함성 임곗값, 스택 작업을 동시에 수행하는 계정 수를 포함시킵니다.

StackSet는 리전 리소스입니다. 한 AWS 리전에서 StackSet를 생성하면 해당 리전을 볼 때만 보거나 StackSet를 변경할 수 있습니다.

## StackSet에 대한 권한 모델
<a name="stacksets-concepts-stackset-permission-models"></a>

*자체 관리형* 권한 또는 *서비스 관리형* 권한을 사용하여 StackSet를 생성할 수 있습니다.

*자체 관리형* 권한을 사용하면 StackSets가 계정 및 리전 전체에 배포하는 데 필요한 IAM 역할을 생성할 수 있습니다. 이러한 역할은 StackSet를 관리하는 계정과 스택 인스턴스를 배포하는 계정 간에 신뢰 관계를 설정하는 데 필요합니다. 이 권한 모델을 사용하여 StackSets에서는 IAM 역할을 생성할 수 있는 권한이 있는 모든 AWS 계정에 배포할 수 있습니다.

*서비스 관리형* 권한을 사용하면 AWS Organizations에서 관리하는 계정에 스택 인스턴스를 배포할 수 있습니다. 이 권한 모델을 사용하면 필요한 IAM 역할을 생성할 필요가 없습니다. StackSets가 사용자를 대신하여 IAM 역할을 생성합니다. 이 모델을 사용하면 나중에 조직에 추가되는 계정에 자동 배포를 설정할 수도 있습니다.

AWS Organizations는 CloudFormation과 통합되며 AWS 리소스 조정 및 확장 시 중앙에서 환경을 관리하고 통제하는 데 도움이 됩니다.
+ 관리 계정은 조직을 생성할 때 사용하는 계정입니다. 자세한 내용은 [AWS Organizations 용어 및 개념](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)을 참조하세요.
+ 위임된 관리자 - 호환되는 AWS 서비스는 조직의 AWS 멤버 계정을, 해당 서비스에서 조직 계정의 관리자로 등록할 수 있습니다. 자세한 내용을 알아보려면 [AWS Organizations로 작업하는 AWS 서비스](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html)를 참조하세요.

서비스 관리형 권한으로 StackSet를 생성하고 관리하는 방법에 대한 자세한 내용은 다음 주제를 참조하세요.
+ [AWS Organizations를 사용하여 StackSet에 대한 신뢰할 수 있는 액세스 활성화](stacksets-orgs-activate-trusted-access.md)
+ [위임된 관리자 멤버 계정 등록](stacksets-orgs-delegated-admin.md)
+ [서비스 관리형 권한으로 CloudFormation StackSet 생성](stacksets-orgs-associate-stackset-with-org.md)

## 스택 인스턴스
<a name="stacksets-concepts-stackinstances"></a>

*스택 인스턴스*는 리전 내 대상 계정에서 스택에 대한 참조입니다. 스택 인스턴스는 스택 없이 존재할 수 있습니다. 예를 들어 몇 가지 이유로 인해 스택을 생성할 수 없는 경우 스택 인스턴스에 스택 생성 실패에 대한 이유가 표시됩니다. 스택 인스턴스는 하나의 StackSet에만 연결됩니다.

다음 그림에서는 StackSet, 스택 작업 및 스택 간의 논리적 관계를 보여줍니다. StackSet를 업데이트하면 연결된 *모든* 스택 인스턴스가 모든 계정 및 리전에서 업데이트됩니다.

![StackSet에서는 여러 계정 및 리전의 스택 인스턴스 및 스택을 생성, 업데이트 또는 삭제할 수 있습니다.](http://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/images/stack_sets_operations_stacks_sv.png)


## StackSet 작업
<a name="stacksets-concepts-ops"></a>

StackSet에 대해 다음 작업을 수행할 수 있습니다.

StackSet 생성  
새 StackSet 생성에는 스택을 생성하는 데 사용할 CloudFormation 템플릿 지정, 스택을 생성할 대상 계정 지정 및 대상 계정의 스택을 배포할 AWS 리전 식별이 포함됩니다. StackSet를 사용하면 동일한 스택 리소스를 동일한 설정으로 선택한 리전 내의 지정된 모든 대상 계정에 일관되게 배포할 수 있습니다.

StackSet 업데이트  
StackSet를 업데이트하면 StackSet의 스택으로 변경 사항을 푸시합니다. 다음 방법 중 하나로 StackSet를 업데이트할 수 있습니다. 템플릿 업데이트는 항상 모든 스택에 영향을 줍니다. StackSet의 일부 스택에 대한 템플릿을 선택적으로 업데이트할 수 없지만 그 이외에는 가능합니다.  
+ 템플릿의 기존 설정을 변경하거나 특정 서비스에 대한 파라미터 설정 업데이트 또는 새 Amazon EC2 인스턴스 추가 등의 새 리소스를 추가합니다.
+ 템플릿을 다른 템플릿으로 바꿉니다.
+ 기존 또는 추가 리전의 기존 또는 추가 대상 계정에 스택을 추가합니다.

 스택 삭제  
스택을 삭제하면 지정한 리전 내의 지정한 대상 계정에서 스택과 이와 관련된 모든 리소스가 제거됩니다. 스택을 삭제하는 방법은 다음과 같습니다.  
+ 일부 대상 계정에서 스택을 삭제하고 다른 대상 계정에서 다른 스택을 계속 실행합니다.
+ 일부 리전에서 스택을 삭제하고 다른 리전에서 스택을 계속 실행합니다.
+ StackSet에서 스택을 삭제하지만, **스택 보관** 옵션을 선택하여 StackSet와 상관없이 스택이 계속 실행되도록 해당 스택을 저장합니다. 그런 다음 의 StackSet 외부의 CloudFormation에 보관된 스택을 관리할 수 있습니다.
+ 전체 StackSet를 삭제하기 위해 StackSet에서 모든 스택을 삭제합니다.

StackSet 삭제  
StackSet에 스택 인스턴스가 없는 경우에만 StackSet를 삭제할 수 있습니다.

## StackSet 작업 옵션
<a name="stackset-ops-options"></a>

이 섹션에 설명된 옵션은 성공적인 StackSet 작업을 수행하는 데 허용된 실패의 수와 시간을 제어하고 스택 리소스의 손실을 방지하는 데 도움이 됩니다.

최대 동시 계정  
생성, 업데이트 및 삭제 워크플로에 사용 가능한 이 설정은 작업이 한 번에 수행되는 대상 계정의 최대 수 또는 비율을 지정할 수 있습니다. 낮은 수 또는 비율은 한 번에 더 적은 대상 계정에서 작업이 수행됨을 의미합니다. 작업은 **Deployment order**(배포 순서) 상자에 지정된 순서에 따라 한 번에 한 리전에서 수행됩니다. 예를 들어, 두 리전 내의 대상 계정 10개에 스택을 배포할 경우 **Maximum concurrent accounts**(최대 동시 계정)를 **50** 및 **By percentage**(백분율 기준)로 설정하면 첫 번째 리전의 계정 5개에 스택을 배포한 다음 첫 번째 계정 내의 나머지 계정 5개에 배포한 후, 다음 리전으로 이동하여 첫 번째 5개 대상 계정에 배포를 시작합니다.  
[**백분율 기준(By percentage)**]을 선택할 때 지정된 비율이 지정된 계정의 전체 수를 나타내지 않으면 CloudFormation에서는 내림합니다. 예를 들어, 대상 계정 10개에 스택을 배포하고 [**최대 동시 계정(Maximum concurrent accounts)**]을 [**25**] 및 [**백분율 기준(By percentage)**]으로 설정하면 CloudFormation에서는 2.5개 스택을 동시에 배포하는 것(가능하지 않음)에서 2개 스택을 동시에 배포하는 것까지 내림합니다.  
이 설정을 사용하면 작업에 대한 *최대값*을 지정할 수 있습니다. 대규모 배포의 경우 특정 상황에서 동시에 실행된 실제 계정 수는 서비스 조절로 인해 낮아질 수 있습니다.  
**최대 동시 계정**은 **동시성 모드**에 따른 **내결함성** 값에 따라 달라질 수 있습니다. **동시성 모드**가 **엄격한 내결함성**으로 설정된 경우 **최대 동시 계정**은 **내결함성** 설정보다 최대 하나 더 많을 수 있습니다.

동시성 모드  
워크플로 생성, 업데이트 및 삭제 시 사용할 수 있는 이 설정을 사용하면 StackSet 작업 중 동시성 수준이 작동하는 방식을 선택할 수 있습니다. 자세한 내용은 [CloudFormation StackSet에 대한 동시성 모드 선택](concurrency-mode.md) 섹션을 참조하세요.

내결함성  
생성, 업데이트 및 삭제 워크플로우에 사용 가능한 이 설정은 CloudFormation이 작업을 자동으로 중지하는 리전당 발생할 수 있는 스택 작업 실패의 최대 수 또는 비율을 지정할 수 있습니다. 낮은 수 또는 비율은 작업이 더 적은 스택에서 수행되지만 실패 작업의 문제 해결을 더 빠르게 시작할 수 있다는 의미입니다. 예를 들어, 리전 3개 내의 대상 계정 10개에서 스택 10개를 업데이트할 경우 **내결함성**을 **20** 및 **백분율 기준**(By percentage)으로 설정하면 작업을 계속하기 위해 리전에서 최대 2개의 스택 업데이트가 실패할 수 있습니다. 동일한 리전의 세 번째 스택이 실패할 경우 CloudFormation은 작업을 중지합니다. 첫 번째 리전에서 스택을 업데이트할 수 없는 경우 해당 리전에서 업데이트 작업이 계속되며 다음 리전으로 이동합니다. 두 번째 리전에서 스택 2개를 업데이트할 수 없는 경우 내결함성은 20%에 도달합니다. 리전에서 세 번째 스택이 실패하면 CloudFormation은 업데이트 작업을 중지하며, 후속 리전으로 이동하지 않습니다.  
[**백분율 기준(By percentage)**]을 선택할 때 지정된 비율이 각 리전 내에서 스택의 전체 수를 나타내지 않으면 CloudFormation에서는 내림합니다. 예를 들어 3개 리전에서 대상 계정 10개에 스택을 배포하고 [**내결함성(Failure tolerance)**]을 [**25**] 및 [**백분율 기준(By percentage)**]으로 설정하면 CloudFormation에서는 2.5 스택의 내결함성(가능하지 않음)에서 리전당 2개 스택의 내결함성까지 내림합니다.

스택 보관  
스택 삭제 워크플로에 사용 가능한 이 설정은 StackSet에서 스택을 제거한 후에도 스택 및 해당 리소스가 계속 실행되도록 할 수 있습니다. 스택을 보관할 경우 CloudFormation은 개별 계정 및 리전의 스택을 그대로 유지합니다. 스택은 StackSet에서 연결 해제되지만 스택과 해당 리소스를 저장합니다. 스택 삭제 작업이 완료된 후 스택을 생성한 대상 계정(관리자 계정 아님)의 CloudFormation에서 보관된 스택을 관리합니다.

리전 동시성  
워크플로 생성, 업데이트 및 삭제 시 사용할 수 있는 이 설정으로 StackSets가 리전에 배포되는 방식을 선택할 수 있습니다.  
*순차* - 리전의 배포 실패가 지정된 내결함성을 초과하지 않는 한 리전 **배포 순서** 상자에 지정된 대로 한 번에 한 리전에 StackSets 작업을 배포합니다. 기본 선택 항목은 [순차(Sequential)] 배포입니다.  
*병렬* - 리전의 배포 실패가 지정된 내결함성을 초과하지 않는 한 지정된 모든 리전에 StackSets 작업을 동시에 배포합니다.

## Tags
<a name="stackset-concepts-tags"></a>

키 및 값 페어를 지정하여 StackSet 생성 및 업데이트 작업 중 태그를 추가할 수 있습니다. 태그는 결제 및 비용 할당을 위해 StackSet 리소스를 정렬하고 필터링하는 데 유용합니다. AWS에서 태그를 사용하는 방법에 대한 자세한 내용은 *AWS 결제 및 비용 관리 사용 설명서*의 [Organizing and tracking costs using AWS cost allocation tags](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)를 참조하세요. 키-값 페어를 지정한 후에 **\+**를 선택하여 태그를 저장합니다. 태그 오른쪽에 있는 빨간색 **X**를 선택하여 더 이상 사용하지 않는 태그를 삭제할 수 있습니다.

StackSet에 적용하는 태그는 모든 스택과 스택에서 생성하는 리소스에 적용됩니다. CloudFormation의 스택 전용 수준에서 태그를 추가할 수도 있지만 해당 태그는 StackSets에 표시되지 않을 수 있습니다.

StackSets는 시스템 정의 태그를 추가하지 않지만 태그의 키 이름을 문자열 `aws:`로 시작하면 안 됩니다.

## StackSets 상태 코드
<a name="stackset-status-codes"></a>

CloudFormation StackSet는 StackSet 작업에 대한 상태 코드를 생성합니다.

다음 표에서는 StackSet 작업에 대한 상태 코드를 설명합니다.

`RUNNING`  
작업이 현재 진행되고 있습니다.

`SUCCEEDED`  
작업이 작업에 대한 내결함성을 초과하지 않고 완료되었습니다.

`FAILED`  
작업을 완료할 수 없는 스택의 수가 사용자 정의 내결함성을 초과했습니다. 작업에 대해 설정한 내결함성 값이 스택 생성 및 업데이트 작업 중 각 리전에 적용됩니다. 리전 내에서 실패한 스택의 수가 내결함성을 초과하는 경우 리전의 작업 상태가 `FAILED`로 변경됩니다. 작업의 전체 상태도 `FAILED`로 설정되며, CloudFormation은 나머지 리전에서 작업을 취소합니다.

`QUEUED`  
[`Service-managed permissions`] 작업 시퀀스가 필요한 자동 배포의 경우 작업이 수행을 위해 대기열에 들어갑니다. 예제:  
+ 한 조직 단위(OU) `OU1`에서 다른 `OU2`로 계정을 이동하면 자동 배포가 트리거됩니다. StackSets는 삭제 작업을 실행하여 대상 리전의 대상 `OU1` 계정에서 스택 인스턴스를 제거하고, 대상 리전의 대상 `OU2` 계정에 스택 인스턴스를 추가하는 생성 작업을 대기열에 넣습니다.
+ OU에 계정 `AccountA`를 추가하면 자동 배포가 트리거됩니다. StackSets는 대상 리전의 `AccountA`에 스택 인스턴스를 추가하는 생성 작업을 실행합니다. 이 생성 작업이 실행되는 동안 OU에 다른 계정 `AccountB`를 추가하면 StackSets가 두 번째 생성 작업을 대기열에 넣습니다. 첫 번째 생성 작업이 완료되면 StackSets가 두 번째 생성 작업을 실행하여 대상 리전의 `AccountB`에 스택 인스턴스를 추가합니다.

`STOPPING`  
사용자 요청에 따라 작업이 중지되고 있습니다.

`STOPPED`  
사용자 요청에 따라 작업이 중지되었습니다.

## 스택 인스턴스 상태 코드
<a name="stack-instance-status-codes"></a>

CloudFormation StackSets는 스택 인스턴스에 대한 상태 코드를 생성합니다.

다음 표에서는 StackSets 내의 스택 인스턴스에 대한 상태 코드를 설명합니다.

`CURRENT`  
스택이 StackSet와 함께 최신 상태입니다.

`OUTDATED`  
다음 이유 중 하나로 인해 스택이 StackSet와 함께 최신 상태가 아닙니다.  
+ 연결된 스택에 대한 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) 또는 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 작업이 실패했습니다.
+ 스택이 실패하거나 스택을 생성 또는 업데이트하기 전에 중지된 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStackSet.html) 또는 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 작업의 일부였습니다.

`INOPERABLE`  
[https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) 작업이 실패했으며 스택이 불안정한 상태로 남습니다. 이 상태의 스택은 향후 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStackSet.html) 작업에서 제외됩니다. `RetainStacks`가 `true`로 설정된 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStackInstances.html) 작업을 수행하여 스택 인스턴스를 삭제한 다음 스택을 수동으로 삭제해야 할 수 있습니다.

`CANCELLED`  
지정된 계정 및 리전의 작업이 취소되었습니다. 이는 사용자가 StackSet 작업을 중지했거나 StackSet 작업이 내결함성을 초과했기 때문에 발생합니다.

`FAILED`  
지정된 계정 및 리전의 작업이 실패했습니다. 한 리전 내의 충분한 계정에서 StackSet 작업이 실패하면 StackSet 작업 전체에 대한 내결함성을 초과될 수 있습니다.

`FAILED_IMPORT`  
지정된 계정 및 리전에서 스택 인스턴스 가져오기가 실패하여 스택이 불안정한 상태가 되었습니다. 실패를 유발하는 문제가 해결되면 가져오기 작업을 다시 시도할 수 있습니다. 리전 내의 충분한 계정에서 충분한 StackSet 작업이 실패하면 StackSet 작업 전체에 대한 내결함성을 초과될 수 있습니다.

`PENDING`  
지정된 계정 및 리전의 작업이 아직 시작되지 않았습니다.

`RUNNING`  
지정된 계정 및 리전의 작업이 현재 진행되고 있습니다.

`SKIPPED_SUSPENDED_ACCOUNT`  
작업할 때 계정이 일시 중지되었으므로 지정된 계정 및 리전의 작업을 건너뛰었습니다.

`SUCCEEDED`  
지정된 계정 및 리전의 작업이 성공적으로 완료되었습니다.