StackSets를 사용하여 여러 계정 및 리전의 스택 관리 - AWS CloudFormation

StackSets를 사용하여 여러 계정 및 리전의 스택 관리

AWS CloudFormation StackSets에서는 단일 작업으로 여러 계정과 AWS 리전에 대해 스택을 생성, 업데이트 또는 삭제할 수 있도록 하여 스택의 기능을 확장합니다. 관리자 계정을 사용하여 CloudFormation 템플릿을 정의 및 관리하고, 템플릿을 지정된 AWS 리전에 대해 선택한 대상 계정으로 스택을 프로비저닝하기 위한 기본으로 사용합니다.

스택 세트는 여러 계정과 리전에 배포되는 템플릿의 리소스 모음입니다.

StackSets 리전 지원에 대한 자세한 내용은 StackSets 리전 지원을 참조하세요.

이 섹션은 StackSets 사용을 시작하는 데 도움이 되며, 스택 세트 생성, 업데이트 및 삭제 작업을 수행하는 방법 및 문제 해결에 대한 일반적인 질문에 대한 답변을 제공합니다.

StackSets 개념

StackSets를 사용하는 경우에는 스택 세트, 스택 인스턴스스택으로 작업합니다.

관리자 및 대상 계정

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

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

AWS CloudFormation StackSets

스택 세트를 사용하면 단일 CloudFormation 템플릿을 사용하여 여러 리전에 대해 AWS 계정에서 스택을 생성할 수 있습니다. 스택 세트의 CloudFormation 템플릿은 각 스택의 모든 리소스를 정의합니다. 스택 세트를 생성할 때 템플릿에 필요한 파라미터 및 기능에 더해 사용할 템플릿을 지정합니다.

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

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

스택 세트에 대한 권한 모델

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

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

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

AWS Organizations는 CloudFormation과 통합되며 AWS 리소스 조정 및 확장 시 중앙에서 환경을 관리하고 통제하는 데 도움이 됩니다.

  • 관리 계정은 조직을 생성할 때 사용하는 계정입니다. 자세한 내용을 알아보려면 AWS Organizations 용어 및 개념을 참조하세요.

  • 위임된 관리자 - 호환되는 AWS 서비스는 조직의 AWS 멤버 계정을, 해당 서비스에서 조직 계정의 관리자로 등록할 수 있습니다. 자세한 내용을 알아보려면 AWS Organizations로 작업하는 AWS 서비스를 참조하세요.

서비스 관리형 권한으로 스택 세트를 생성하고 관리하는 방법에 대한 자세한 내용은 다음 주제를 참조하세요.

스택 인스턴스

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

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

스택 세트에서는 여러 계정 및 리전의 스택 인스턴스 및 스택을 생성, 업데이트 또는 삭제할 수 있습니다.

스택 세트 작업

스택 세트에 대해 다음 작업을 수행할 수 있습니다.

스택 세트 생성

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

스택 세트 업데이트

스택 세트를 업데이트하면 스택 세트의 스택으로 변경 사항을 푸시합니다. 다음 방법 중 하나로 스택 세트를 업데이트할 수 있습니다. 템플릿 업데이트는 항상 모든 스택에 영향을 줍니다. 스택 세트의 일부 스택에 대한 템플릿을 선택적으로 업데이트할 수 없지만 그 이외에는 가능합니다.

  • 템플릿의 기존 설정을 변경하거나 특정 서비스에 대한 파라미터 설정 업데이트 또는 새 Amazon EC2 인스턴스 추가 등의 새 리소스를 추가합니다.

  • 템플릿을 다른 템플릿으로 바꿉니다.

  • 기존 또는 추가 리전의 기존 또는 추가 대상 계정에 스택을 추가합니다.

스택 삭제

스택을 삭제하면 지정한 리전 내의 지정한 대상 계정에서 스택과 이와 관련된 모든 리소스가 제거됩니다. 스택을 삭제하는 방법은 다음과 같습니다.

  • 일부 대상 계정에서 스택을 삭제하고 다른 대상 계정에서 다른 스택을 계속 실행합니다.

  • 일부 리전에서 스택을 삭제하고 다른 리전에서 스택을 계속 실행합니다.

  • 스택 세트에서 스택을 삭제하지만, 스택 보관(Retain Stacks) 옵션을 선택하여 스택 세트와 상관없이 스택이 계속 실행되도록 해당 스택을 저장합니다. 그런 다음 AWS CloudFormation의 스택 세트 외부에 보관된 스택을 관리할 수 있습니다.

  • 전체 스택 세트를 삭제하기 위해 스택 세트에서 모든 스택을 삭제합니다.

스택 세트 삭제

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

스택 세트 작업 옵션

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

최대 동시 계정

생성, 업데이트 및 삭제 워크플로에 사용 가능한 이 설정은 작업이 한 번에 수행되는 대상 계정의 최대 수 또는 비율을 지정할 수 있습니다. 낮은 수 또는 비율은 한 번에 더 적은 대상 계정에서 작업이 수행됨을 의미합니다. 작업은 Deployment order(배포 순서) 상자에 지정된 순서에 따라 한 번에 한 리전에서 수행됩니다. 예를 들어, 두 리전 내의 대상 계정 10개에 스택을 배포할 경우 Maximum concurrent accounts(최대 동시 계정)를 50By percentage(백분율 기준)로 설정하면 첫 번째 리전의 계정 5개에 스택을 배포한 다음 첫 번째 계정 내의 나머지 계정 5개에 배포한 후, 다음 리전으로 이동하여 첫 번째 5개 대상 계정에 배포를 시작합니다.

[백분율 기준(By percentage)]을 선택할 때 지정된 비율이 지정된 계정의 전체 수를 나타내지 않으면 CloudFormation에서는 내림합니다. 예를 들어, 대상 계정 10개에 스택을 배포하고 [최대 동시 계정(Maximum concurrent accounts)]을 [25] 및 [백분율 기준(By percentage)]으로 설정하면 CloudFormation에서는 2.5개 스택을 동시에 배포하는 것(가능하지 않음)에서 2개 스택을 동시에 배포하는 것까지 내림합니다.

이 설정을 사용하면 작업에 대한 최대값을 지정할 수 있습니다. 대규모 배포의 경우 특정 상황에서 동시에 실행된 실제 계정 수는 서비스 조절로 인해 낮아질 수 있습니다. 최대 배포 속도는 스택 세트당 100개의 동시 스택 인스턴스입니다.

최대 동시 계정동시성 모드에 따른 내결함성 값에 따라 달라질 수 있습니다. 동시성 모드엄격한 내결함성으로 설정된 경우 최대 동시 계정내결함성 설정보다 최대 하나 더 많을 수 있습니다.

동시성 모드

워크플로 생성, 업데이트 및 삭제 시 사용할 수 있는 이 설정을 사용하면 스택 세트 작업 중 동시성 수준이 작동하는 방식을 선택할 수 있습니다. 자세한 내용은 콘솔 또는 AWS CLI를 사용하여 동시성 모드 선택 단원을 참조하십시오.

내결함성

생성, 업데이트 및 삭제 워크플로우에 사용 가능한 이 설정은 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개 스택의 내결함성까지 내림합니다.

스택 보관

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

리전 동시성

워크플로 생성, 업데이트 및 삭제 시 사용할 수 있는 이 설정으로 StackSets가 리전에 배포되는 방식을 선택할 수 있습니다.

순차 - 리전의 배포 실패가 지정된 내결함성을 초과하지 않는 한 리전 배포 순서 상자에 지정된 대로 한 번에 한 리전에 StackSets 작업을 배포합니다. 기본 선택 항목은 [순차(Sequential)] 배포입니다.

병렬 - 리전의 배포 실패가 지정된 내결함성을 초과하지 않는 한 지정된 모든 리전에 StackSets 작업을 동시에 배포합니다.

Tags

키 및 값 페어를 지정하여 스택 세트 생성 및 업데이트 작업 중 태그를 추가할 수 있습니다. 태그는 결제 및 비용 할당을 위해 스택 세트 리소스를 정렬하고 필터링하는 데 유용합니다. AWS에서 태그를 사용하는 방법에 대한 자세한 내용을 알아보려면 AWS Billing and Cost Management 사용 설명서비용 할당 태그 사용을 참조하세요. 키-값 페어를 지정한 후에 +를 선택하여 태그를 저장합니다. 태그 오른쪽에 있는 빨간색 X를 선택하여 더 이상 사용하지 않는 태그를 삭제할 수 있습니다.

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

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

StackSets 상태 코드

AWS CloudFormation StackSets는 스택 세트 작업에 대한 상태 코드를 생성합니다.

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

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

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

스택 인스턴스 상태 코드

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

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

CURRENT

스택이 스택 세트와 함께 최신 상태입니다.

OUTDATED

다음 이유 중 하나로 인해 스택이 스택 세트와 함께 최신 상태가 아닙니다.

INOPERABLE

DeleteStackInstances 작업이 실패했으며 스택이 불안정한 상태입니다. 이 상태의 스택은 향후 UpdateStackSet 작업에서 제외됩니다. DeleteStackInstancesRetainStacks로 설정된 true 작업을 수행하여 스택 인스턴스를 삭제한 다음 스택을 수동으로 삭제해야 할 수 있습니다.

CANCELLED

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

FAILED

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

FAILED_IMPORT

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

PENDING

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

RUNNING

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

SKIPPED_SUSPENDED_ACCOUNT

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

SUCCEEDED

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