AWS에서 CloudFormation으로 인프라 자동화 시 발생하는 에러와 해결 방법 =========

AWS CloudFormation은 인프라를 코드로 자동화하여 관리할 수 있도록 도와주는 강력한 도구입니다. 하지만, 사용하다 보면 여러 가지 에러가 발생할 수 있습니다. 이번 글에서는 AWS CloudFormation을 사용할 때 자주 발생하는 에러와 그 해결 방법에 대해 살펴보겠습니다.

CloudFormation 스택 생성 시 발생하는 일반적인 에러

1. ValidationError

CloudFormation 템플릿을 작성할 때 가장 흔히 발생하는 에러 중 하나는 ValidationError입니다. 이 에러는 주로 YAML 또는 JSON 형식의 문법 오류에서 발생합니다.

예시:

Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Sub "${AWS::StackName}-bucket"
      VersioningConfiguration:   # <- 이 줄에서 잘못된 들여쓰기로 문제 발생
        Status: Enabled

해결 방법:

  • 템플릿의 문법을 확인하고, JSON 또는 YAML 형식이 올바른지 검토합니다.
  • AWS CloudFormation Linter를 사용하여 템플릿을 검증할 수 있습니다.
  • 2. InsufficientCapabilities

    IAM 역할이나 정책을 포함한 CloudFormation 스택을 생성할 때 InsufficientCapabilities 에러가 발생할 수 있습니다. 이는 IAM 리소스를 생성하기 위해 필요한 권한이 설정되지 않았을 때 발생합니다.

    예시:

    Resources:
      MyRole:
        Type: AWS::IAM::Role
        Properties:
          RoleName: MyRole
          AssumeRolePolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Principal:
                  Service: ec2.amazonaws.com
                Action: sts:AssumeRole

    해결 방법:

  • CloudFormation 스택을 생성할 때 --capabilities 플래그를 추가하여 IAM 리소스를 생성할 수 있는 권한을 명시적으로 지정합니다.
  • aws cloudformation create-stack --stack-name MyStack --template-body file://template.yaml --capabilities CAPABILITY_IAM

    3. ResourceConflict

    이미 존재하는 리소스를 생성하려고 할 때 ResourceConflict 에러가 발생합니다. 예를 들어, 동일한 이름의 S3 버킷을 두 번 생성하려 할 때 이 문제가 발생합니다.

    해결 방법:

  • 이미 존재하는 리소스의 이름을 확인하고, 다른 이름을 사용하여 리소스를 생성합니다.
  • 리소스 삭제 후 다시 생성하는 방법도 고려할 수 있습니다.
  • 4. Rollback 에러

    CloudFormation 스택을 생성 중에 에러가 발생하면 스택이 롤백됩니다. 이때 발생하는 ROLLBACK_COMPLETE 상태는 스택이 실패했음을 의미합니다. 동일한 스택 이름으로 재생성을 시도하면 에러가 발생할 수 있습니다.

    해결 방법:

  • CloudFormation 콘솔에서 스택의 이벤트를 검토하여 실패 원인을 파악합니다.
  • 이전 스택을 삭제한 후 새로 생성하거나, 스택 이름을 변경하여 재시도합니다.
aws cloudformation delete-stack --stack-name MyStack

마무리

AWS CloudFormation은 인프라 자동화에 큰 도움을 주지만, 다양한 에러가 발생할 수 있습니다. 위에서 언급한 에러와 해결 방법을 통해 CloudFormation을 보다 효율적으로 사용할 수 있을 것입니다.

복잡한 인프라를 관리할 때는 항상 템플릿을 소스 관리 시스템에 보관하고, 변경 사항을 주의 깊게 검토하는 것이 중요합니다. CloudFormation을 통해 인프라를 코드로 관리함으로써, 반복 가능하고 신뢰성 높은 서비스를 구축할 수 있기를 바랍니다.