CloudFormation 문제 해결 - AWS CloudFormation

CloudFormation 문제 해결

AWS CloudFormation을 사용할 때 CloudFormation 스택 생성, 업데이트 또는 삭제 시 문제가 발생할 수 있습니다. 다음 단원은 발생할 수 있는 몇 가지 일반적인 문제를 해결하는 데 도움이 될 수 있습니다.

CloudFormation에 대한 일반적인 질문은 AWS CloudFormation FAQ를 참조하세요. AWS CloudFormation 포럼에서 답을 검색하고 질문을 올릴 수도 있습니다.

문제 해결 가이드

AWS CloudFormation에서 스택 생성, 업데이트 또는 삭제에 실패하면 오류 메시지 또는 로그를 보고 해당 문제에 대한 자세한 내용을 확인할 수 있습니다. 다음 태스크는 CloudFormation 문제 해결을 위한 일반적인 방법을 설명합니다. 구체적인 오류와 해결책에 대해서는 오류 해결 단원을 참조하십시오.

  • CloudFormation 콘솔을 사용하여 스택 상태를 볼 수 있습니다. 콘솔에서는 스택 생성, 업데이트 또는 삭제 중 스택 이벤트 목록을 볼 수 있습니다. 이 목록에서 실패 이벤트를 찾은 다음 해당 이벤트에 대한 상태 사유를 확인할 수 있습니다. 상태 사유에는 문제 해결에 도움이 될 수 있는 AWS CloudFormation 또는 특정 서비스의 오류 메시지가 포함되어 있을 수 있습니다. 스택 이벤트 보기에 대한 자세한 내용은 AWS Management Console에서 AWS CloudFormation 스택 데이터 및 리소스 보기 단원을 참조하십시오.

  • Amazon EC2 문제의 경우 cloud-init 및 cfn 로그를 확인하십시오. Amazon EC2 인스턴스에 대한 이러한 로그는 /var/log/ 디렉터리에 게시됩니다. 이러한 로그는 AWS CloudFormation에서 인스턴스를 설정하는 동안 발생하는 프로세스 및 명령 출력을 캡처합니다. Windows의 경우 %ProgramFiles%\Amazon\EC2ConfigService에서 EC2Configure 서비스를 보고, %ProgramData%\Amazon\EC2-Windows\Launch\Logs에서 EC2 Launch를 보고, %ProgramData%\Amazon\EC2Launch\log에서 EC2 Launch v2를 보고, C:\cfn\log에서 cfn 로그를 봅니다.

    또한 AWS Management Console에 로그를 표시하는 Amazon CloudWatch에 로그가 게시되도록 AWS CloudFormation 템플릿을 구성할 수 있습니다. 그러면 Amazon EC2 인스턴스에 연결할 필요가 없습니다. 자세한 내용은 Application Management 블로그의 View CloudFormation Logs in the Console을 참조하세요.

오류 해결

AWS CloudFormation 스택과 관련해 다음 오류가 발생하면 아래 해결책에 따라 문제의 원인을 찾아 해결할 수 있습니다.

스택 삭제 실패

이러한 상황을 해결하려면 다음 작업을 시도해 보십시오.

  • 삭제하려면 일부 리소스는 비어 있어야 합니다. 예를 들어, 버킷 또는 보안 그룹을 삭제하려면 Amazon S3 버킷의 객체를 모두 삭제하거나 Amazon EC2 보안 그룹의 인스턴스를 모두 제거해야 합니다.

  • 스택의 리소스를 삭제하려면 필수 IAM 권한이 있어야 합니다. AWS CloudFormation 권한 이외에 기본 서비스(예: Amazon S3 또는 Amazon EC2)를 사용할 수 있어야 합니다.

  • AWS CloudFormation에서 리소스를 삭제할 수 없어 스택이 DELETE_FAILED 상태인 경우 RetainResources 파라미터를 사용하여 삭제를 다시 실행한 다음 AWS CloudFormation에서 삭제할 수 없는 리소스를 지정합니다. AWS CloudFormation은 보존된 리소스를 삭제하지 않고 스택을 삭제합니다. 유지하려는 객체가 포함된 리소스(예: S3 버킷)를 삭제할 수 없지만 스택을 삭제하고자 하는 경우에 리소스를 보존하면 유용합니다.

    스택을 삭제한 후에는 연결된 AWS 서비스를 사용하여 보존한 리소스를 수동으로 삭제할 수 있습니다.

  • 종료 방지 기능이 활성화된 스택은 삭제할 수 없습니다. 종료 방지 기능이 활성화된 스택을 삭제하려고 시도하면 삭제가 실패하고 스택(상태 포함)은 변함없이 그대로 유지됩니다. 스택의 종료 방지 기능을 비활성화한 다음 삭제 작업을 다시 수행하십시오.

    여기에는 루트 스택의 종료 방지 기능이 활성화된 중첩 스택이 포함됩니다. 루트 스택의 종료 방지 기능을 비활성화한 다음 삭제 작업을 다시 수행합니다. 중첩 스택은 직접 삭제하지 말고 루트 스택과 모든 리소스를 삭제하는 과정에서 삭제하는 것이 좋습니다.

    자세한 내용은 스택 삭제 방지 단원을 참조하십시오.

  • 다른 모든 문제의 경우 AWS Support이 있으면 AWS Support 사례를 생성할 수 있습니다. Support에 문의 섹션을 참조하세요.

종속성 오류

종속성 오류를 해결하려면 템플릿의 기타 리소스에 따라 리소스에 DependsOn 속성을 추가합니다. 경우에 따라 AWS CloudFormation이 올바른 순서로 리소스를 생성 또는 삭제할 수 있도록 종속성을 명시적으로 선언해야 합니다. 예를 들어, 동일한 스택에서 인터넷 게이트웨이를 사용하여 탄력적 IP 및 VPC를 생성하는 경우 탄력적 IP는 인터넷 게이트웨이 연결에 따라 달라져야 합니다. 자세한 내용은 DependsOn 속성 섹션을 참조하세요.

목록 전달 시 발생하는 파라미터 구분 분석 오류

AWS Command Line Interface 또는 AWS CloudFormation을 사용하여 목록을 전달하는 경우 각 쉼표 앞에 이스케이프 문자(\)를 추가합니다. 다음 샘플은 AWS CLI를 사용하는 경우 입력 파라미터를 지정하는 방법을 보여줍니다.

ParameterKey=CIDR,ParameterValue='10.10.0.0/16\,10.10.0.0/24\,10.10.1.0/24'

IAM 권한 부족

AWS CloudFormation 스택 작업을 수행하는 경우 AWS CloudFormation 사용 권한 뿐만 아니라 템플릿에 설명된 기본 서비스 사용 권한도 있어야 합니다. 예를 들어, Amazon S3 버킷을 생성하거나 Amazon EC2 인스턴스를 생성하는 경우 Amazon S3 또는 Amazon EC2에 대한 권한이 필요합니다. IAM 정책을 검토하고 AWS CloudFormation 스택 작업을 수행하기 전에 필수 권한이 있는지 확인합니다. 자세한 내용을 알아보려면 AWS Identity and Access Management을(를) 통한 액세스 제어 섹션을 참조하세요.

잘못된 값 또는 지원되지 않는 리소스 속성

AWS CloudFormation 스택을 생성 또는 업데이트하는 경우 잘못된 입력 파라미터, 지원되지 않는 리소스 속성 이름 또는 지원되지 않는 리소스 속성 값으로 인해 스택에 오류가 발생할 수 있습니다. 입력 파라미터의 경우 리소스가 존재하는지 확인합니다. 예를 들어, Amazon EC2 키 페어 또는 VPC ID를 지정하는 경우 해당 리소스가 사용자 계정에 있어야 하고, 스택을 생성 또는 업데이트한 리전에 있어야 합니다. AWS 특정 파라미터 유형을 사용하여 올바른 값을 사용하는지 확인할 수 있습니다.

리소스 속성 이름 및 값의 경우 올바른 이름 및 값을 사용하도록 템플릿을 업데이트합니다. 전체 리소스 및 해당 속성 이름 목록은 AWS 리소스 및 속성 유형 참조 단원을 참조하십시오.

할당량 초과

리소스 할당량에 도달하지 않았는지 확인합니다. 예를 들어 시작할 수 있는 Amazon EC2 온디맨드 인스턴스의 최대 개수는 5개입니다. 계정 할당량보다 더 많은 Amazon EC2 온디맨드 인스턴스를 생성하려고 하면 인스턴스 생성에 실패하고 오류 Status=start_failed가 수신됩니다. 서비스별 기본 AWS 할당량을 보려면 AWS 일반 참조AWS Service Quotas를 참조하세요.

AWS CloudFormation 할당량 및 조정 전략은 AWS CloudFormation 할당량 섹션을 참조하세요.

또한 업데이트 중 리소스가 바뀌면 AWS CloudFormation은 이전 리소스를 삭제하기 전에 새 리소스를 생성합니다. 이로 인해 계정이 리소스 할당량을 초과할 수 있고, 결국 업데이트에 실패할 수 있습니다. 초과 리소스를 삭제하거나 할당량 증가를 요청할 수 있습니다.

중첩 스택이 UPDATE_COMPLETE_CLEANUP_IN_PROGRESS, UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS 또는 UPDATE_ROLLBACK_IN_PROGRESS 상태에서 정체됨

중첩 스택 롤백에 실패합니다. 중첩 스택 간의 잠재적인 리소스 종속성으로 인해 모든 중첩 스택이 업데이트되거나 롤백될 때까지 AWS CloudFormation에서 중첩 스택 리소스 정리를 시작하지 않습니다. 중첩 스택 롤백에 실패하면 AWS CloudFormation은 나머지 중첩 스택의 상태와 관계없이 작업을 모두 취소합니다. 업데이트 또는 롤백을 완료했으나 다른 중첩 스택의 롤백 실패로 인해 AWS CloudFormation으로부터 정리 시작 신호를 수신하지 못한 중첩 스택의 상태는 UPDATE_COMPLETE_CLEANUP_IN_PROGRESS 또는 UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS입니다. 업데이트에 실패했으나 롤백 신호를 수신하지 못한 중첩 스택의 상태는 UPDATE_ROLLBACK_IN_PROGRESS입니다.

스택 템플릿이 스택의 상태를 정확하게 반영하지 않은 경우 AWS CloudFormation 외부에서 수행된 변경 사항으로 인해 중첩 스택 롤백에 실패할 수 있습니다. 또한 그룹이 생성 또는 업데이트된 경우 중첩 스택의 Auto Scaling 그룹에 리소스 신호 제한 시간이 짧게 지정되어 있으면 중첩 스택에 실패할 수 있습니다.

스택을 수정하려면 AWS Support에 문의하세요.

수행할 업데이트 없음

AWS CloudFormation 스택을 업데이트하려면 템플릿 또는 파라미터 값 변경 사항을 AWS CloudFormation에 제출해야 합니다. 그러나 AWS CloudFormation은 일부 템플릿 변경 사항을 업데이트로 인식하지 않습니다(예: 삭제 정책, 업데이트 정책, 조건 선언 또는 출력 선언에 대한 변경 사항). 다른 변경 없이 이러한 변경을 수행해야 하는 경우 리소스에 대한 메타데이터 속성을 추가 또는 수정할 수 있습니다.

업데이트 중 템플릿 수정에 대한 자세한 내용은 스택 템플릿 수정 단원을 참조하십시오.

스택 생성, 업데이트 또는 삭제 작업 중 리소스 안정화에 실패

작업이 AWS CloudFormation 제한 시간을 초과했거나 AWS 서비스가 중단되어 리소스가 응답하지 않았습니다. 서비스 중단의 경우 관련 AWS 서비스가 실행 중인지 확인한 다음 스택 작업을 다시 시도합니다.

AWS 서비스가 성공적으로 실행된 경우에는 스택에 다음 리소스 중 하나가 포함되어 있는지 확인합니다.

  • AWS::AutoScaling::AutoScalingGroup(생성, 업데이트 및 삭제 작업의 경우)

  • AWS::CertificateManager::Certificate(생성 작업의 경우)

  • AWS::CloudFormation::Stack(생성, 업데이트 및 삭제 작업의 경우)

  • AWS::ElasticSearch::Domain(업데이트 작업의 경우)

  • AWS::RDS::DBCluster(생성 및 업데이트 작업의 경우)

  • AWS::RDS::DBInstance(생성, 업데이트 및 삭제 작업의 경우)

  • AWS::Redshift::Cluster(업데이트 작업의 경우)

이러한 리소스에 대한 작업은 기본 제한 시간보다 오래 걸릴 수 있습니다. 제한 시간은 사용하는 리소스와 자격 증명에 따라 달라집니다. 제한 시간을 연장하려면 스택 작업을 수행할 때 서비스 역할을 지정합니다. 이미 서비스 역할을 사용 중이거나 스택에 목록에 없는 리소스가 포함된 경우 AWS Support에 문의하세요.

스택 상태가 UPDATE_ROLLBACK_FAILED인 경우 업데이트 롤백 실패를 참조하십시오.

VPC에 보안 그룹이 없음

VPC에 지정한 보안 그룹이 있는지 확인합니다. 보안 그룹이 없으면 보안 그룹 이름이 아니라 보안 그룹 ID를 지정했는지 확인합니다. 예를 들어, AWS::EC2::SecurityGroupIngress 리소스에는 SourceSecurityGroupNameSourceSecurityGroupId 속성이 있습니다. VPC 보안 그룹의 경우 SourceSecurityGroupId 속성을 사용하고 보안 그룹 ID를 지정해야 합니다.

업데이트 롤백에 실패

종속 리소스가 원래 상태로 되돌아 갈 수 없으면 롤백에 실패합니다(UPDATE_ROLLBACK_FAILED 상태). 예를 들어, AWS CloudFormation 외부에서 삭제된 이전 데이터베이스 인스턴스로 롤백되는 스택이 있을 수 있습니다. AWS CloudFormation에서는 이 데이터베이스가 삭제되었는지 알지 못하므로 해당 데이터베이스 인스턴스가 존재하는 것으로 간주하고 롤백을 시도합니다. 따라서 업데이트 롤백에 실패합니다.

실패 원인에 따라 오류를 수동으로 수정하거나 계속해서 롤백할 수 있습니다. 계속해서 롤백하여 스택을 작업 상태(UPDATE_ROLLBACK_COMPLETE 상태)로 되돌린 다음 스택을 다시 업데이트해 볼 수 있습니다. 다음 목록에는 업데이트 롤백 실패를 일으키는 일반적인 오류에 대한 해결책이 나와 있습니다.

  • 필요한 신호 수 수신에 실패

    signal-resource 명령을 사용하여 성공 신호를 대기 중인 리소스에 필요한 수의 성공 신호를 수동으로 전송한 다음 계속해서 업데이트를 롤백합니다. 예를 들어 업데이트 롤백 중 Auto Scaling 그룹의 인스턴스가 지정된 제한 시간 이내에 성공 신호를 보내지 못할 수 있습니다. Auto Scaling 그룹에 성공 신호를 수동으로 전송합니다. 업데이트 롤백을 계속 진행하면 AWS CloudFormation에서 수동으로 보낸 신호를 감지해 롤백을 계속 진행합니다.

  • AWS CloudFormation 외부에서 리소스 변경이 수행됨

    원본 스택의 템플릿과 일치하도록 리소스를 수동으로 동기화한 다음 계속해서 업데이트를 롤백합니다. 예를 들어, AWS CloudFormation에서 롤백하려는 리소스를 수동으로 삭제한 경우 원본 스택과 이름 및 속성이 동일한 리소스를 수동으로 생성해야 합니다.

  • 권한 부족

    리소스를 수정할 IAM 권한이 충분한지 확인한 다음 업데이트 롤백을 계속 진행합니다. 예를 들어, IAM 정책이 S3 버킷의 생성은 허용하지만 해당 버킷의 수정은 허용하지 않을 수 있습니다. 정책에 수정 작업을 추가하십시오.

  • 잘못된 보안 토큰

    AWS CloudFormation에는 새로운 자격 증명 세트가 필요합니다. 아무 변경도 필요하지 않습니다. 계속해서 업데이트를 롤백하면 자격 증명이 갱신됩니다.

  • 제한 오류

    필요 없는 리소스를 삭제하거나 할당량 증가를 요청한 다음 계속해서 업데이트 롤백을 진행합니다. 예를 들어, EC2 온디맨드 인스턴스 개수에 대한 계정 할당량이 5개인데 업데이트 롤백이 이 할당량을 초과한 경우 롤백에 실패합니다.

  • 리소스가 안정화되지 않음

    작업이 AWS CloudFormation 제한 시간을 초과했거나 AWS 서비스가 중단되어 리소스가 응답하지 않았습니다. 아무 변경도 필요하지 않습니다. 리소스 작업이 완료되거나 AWS 서비스가 다시 작동 상태가 되면 계속해서 업데이트를 롤백합니다.

계속해서 업데이트를 롤백하려면 AWS CloudFormation 콘솔 또는 AWS 명령줄 인터페이스(AWS CLI)를 사용할 수 있습니다. 자세한 내용은 업데이트 롤백 계속 단원을 참조하십시오.

이러한 해결책을 모두 수행해도 문제가 해결되지 않으면 AWS CloudFormation에서 성공적으로 롤백할 수 없는 리소스를 건너뛸 수 있습니다. 자세한 내용은 AWS CloudFormation API 참조ContinueUpdateRollback API 작업에서 ResourcesToSkip 파라미터를 참조하세요. AWS CloudFormation에서는 지정된 리소스 상태를 UPDATE_COMPLETE로 설정하고 계속해서 스택을 롤백합니다. 롤백이 완료된 이후에는 건너뛴 리소스의 상태가 스택 템플릿에 있는 리소스의 상태와 일치하지 않게 됩니다. 다른 스택을 업데이트하기 전에 서로 일치하도록 리소스를 수정하거나 스택을 업데이트해야 합니다. 그렇지 않으면 후속 스택 업데이트에 실패할 수 있고, 이 경우 스택을 복구할 수 없습니다.

대기 조건이 Amazon EC2 인스턴스에서 필요한 수의 신호를 수신하지 못함

이러한 상황을 해결하려면 다음 작업을 시도해 보십시오.

  • 사용 중인 AMI에 AWS CloudFormation 헬퍼 스크립트가 설치되어 있는지 확인합니다. AMI에 헬퍼 스크립트가 포함되어 있지 않은 경우에는 인스턴스로 다운로드할 수 있습니다. 자세한 내용은 CloudFormation 헬퍼 스크립트 참조 단원을 참조하십시오.

  • 인스턴스에서 cfn-signal 명령이 성공적으로 실행되었는지 확인합니다. /var/log/cloud-init.log 또는 /var/log/cfn-init.log와 같은 로그를 보면 인스턴스 시작을 디버그하는 데 도움이 될 수 있습니다. 인스턴스에 로그인해 로그를 검색할 수 있지만 실패 시 롤백을 사용하지 않도록 설정하거나 그렇지 않으면 스택 생성 실패 후 AWS CloudFormation에서 인스턴스를 삭제합니다. 또한 Amazon CloudWatch에 로그를 게시할 수도 있습니다. Windows의 경우 C:\cfn\log에서 cfn 로그를, %ProgramFiles%\Amazon\EC2ConfigService에서 EC2Configure 서비스 로그를 확인할 수 있습니다.

  • 인스턴스가 인터넷에 연결되어 있는지 확인합니다. 인스턴스가 VPC에 있는 경우 인스턴스가 프라이빗 서브넷에 있는 경우에는 NAT 디바이스를 통해 또는 퍼블릭 서브넷에 있는 경우에는 인터넷 게이트웨이를 통해 인터넷에 연결할 수 있어야 합니다. 인스턴스의 인터넷 연결을 테스트하려면 퍼블릭 웹 페이지(예: http://aws.amazon.com)에 액세스해 봅니다. 예를 들어 인스턴스에서 다음 명령을 실행할 수 있습니다. 이 명령이 HTTP 200 상태 코드를 반환해야 합니다.

    curl -I https://aws.amazon.com

    NAT 디바이스 구성에 대한 내용은 Amazon VPC 사용 설명서NAT를 참조하세요.

리소스가 스택에서 제거되었지만 삭제되지 않음

스택 업데이트 중 CloudFormation이 스택에서 리소스를 제거했지만 리소스를 삭제하지 않았습니다. 리소스가 아직 남아 있지만 더 이상 CloudFormation을 통해 액세스할 수 없습니다. 스택 업데이트 중에 다음과 같은 경우에 문제가 발생할 수 있습니다.

  • CloudFormation이 기존 리소스를 교체해야 하므로, 먼저 새로운 리소스를 만들고 이전 리소스를 삭제하려고 시도합니다.

  • 스택 템플릿에서 리소스를 제거했기 때문에 CloudFormation이 스택에서 리소스를 삭제하려고 시도합니다.

그러나 CloudFormation이 리소스를 삭제하지 못하는 경우가 있습니다. 예를 들어 사용자가 특정 유형의 리소스를 삭제할 권한이 없을 수 있습니다.

CloudFormation은 세 번에 걸쳐 이전 리소스를 삭제하려고 시도합니다. CloudFormation이 이전 리소스를 삭제하지 못하면 스택에서 이전 리소스를 제거하고 스택 업데이트를 진행합니다. 스택 업데이트가 완료되면 CloudFormation이 UPDATE_COMPLETE 스택 이벤트를 실행하지만 하나 이상의 리소스를 삭제할 수 없다고 되어 있는 StatusReason이(가) 포함됩니다. CloudFormation은 특정 리소스에 대한 DELETE_FAILED 이벤트를 실행하는데, CloudFormation이 리소스 삭제에 실패한 이유가 자세히 나와 있는 해당 StatusReason도 제공됩니다.

이 문제를 해결하려면 콘솔 또는 API를 사용하여 기본 서비스에 대한 리소스를 직접 삭제하세요.

Support에 문의

AWS Support를 사용하는 경우 https://console.aws.amazon.com/support/home#/에서 기술 지원 사례를 생성할 수 있습니다. 지원 센터에 연락하기 전에 다음 정보를 수집합니다.

  • 스택의 ID. 스택 ID는 AWS CloudFormation 콘솔Overview(개요) 탭에서 확인할 수 있습니다. 자세한 내용은 AWS Management Console에서 AWS CloudFormation 스택 데이터 및 리소스 보기 단원을 참조하십시오.

    중요

    AWS CloudFormation 외부의 스택은 변경하지 마십시오. AWS CloudFormation 외부에서 스택을 변경하면 스택이 복구 불가능한 상태가 될 수 있습니다.

  • 모든 스택 오류 메시지. 스택 오류 메시지 보기에 대한 내용은 문제 해결 가이드 단원을 참조하십시오.

  • Amazon EC2 문제의 경우 cloud-init 및 cfn 로그를 수집하십시오. Amazon EC2 인스턴스에 대한 이러한 로그는 /var/log/ 디렉터리에 게시됩니다. 이러한 로그는 인스턴스를 설정하는 동안 발생하는 프로세스 및 명령 출력을 캡처합니다. Windows의 경우 %ProgramFiles%\Amazon\EC2ConfigServiceC:\cfn\log에서 EC2Configure 서비스 및 cfn 로그를 수집합니다.

AWS CloudFormation 포럼에서 답을 검색하고 질문을 올릴 수도 있습니다.