Skip to content

CloudFormation 작동 방식


스택을 생성할 때 AWS CloudFormation에서는 AWS로 기본 서비스 호출을 전송하여 리소스를 프로비저닝하고 구성한다. CloudFormation은 사용자가 수행할 수 있는 권한이 있는 작업만 수행할 수 있다. 예를 들어 CloudFormation을 사용하여 EC2 인스턴스를 생성하려면 인스턴스를 생성할 권한이 필요하다. 인스턴스가 포함된 스택을 삭제하는 경우에도 인스턴스를 종료할 유사한 권한이 필요하다. AWS Identity and Access Management(IAM)를 사용하여 권한을 관리한다.

CloudFormation에서 실행하는 호출은 모두 템플릿으로 선언된다. 예를 들어 t2.micro 인스턴스 유형으로 EC2 인스턴스를 설명하는 템플릿이 있다고 가정해 보자. 이 템플릿을 사용해 스택을 생성하는 경우 CloudFormation에서는 Amazon EC2 인스턴스 생성 API를 생성하고 인스턴스 유형을 t2.micro로 지정한다. 다음 다이어그램은 CloudFormation의 스택 생성 워크플로우를 요약해서 보여준다.

001

  1. AWS CloudFormation Designer 또는 자체 텍스트 편집기를 사용하여 JSON 또는 YAML 형식으로 CloudFormation 템플릿을 생성하거나 수정할 수 있다. 또한 제공된 템플릿을 사용하도록 선택할 수도 있다. CloudFormation 템플릿에는 필요한 리소스와 해당하는 설정이 설명된다. 예를 들어 EC2 인스턴스를 생성하려고 한다고 가정해 보자. 다음 예에서처럼 템플릿에서 Amazon EC2 인스턴스를 선언하고 해당 인스턴스의 속성을 설명할 수 있다.

    예 JSON

    {
      "AWSTemplateFormatVersion" : "2010-09-09",
      "Description" : "A simple EC2 instance",
      "Resources" : {
        "MyEC2Instance" : {
          "Type" : "AWS::EC2::Instance",
          "Properties" : {
            "ImageId" : "ami-0ff8a91507f77f867",
            "InstanceType" : "t2.micro"
          }
        }
      }
    }
    

    예 YAML

    AWSTemplateFormatVersion: '2010-09-09'
    Description: A simple EC2 instance
    Resources:
      MyEC2Instance:
        Type: AWS::EC2::Instance
        Properties:
          ImageId: ami-0ff8a91507f77f867
          InstanceType: t2.micro
    
  2. 템플릿을 로컬에 또는 S3 버킷에 저장한다. 템플릿을 생성한 경우 .json, .yaml 또는 .txt와 같은 파일 확장명으로 저장한다.

  3. 템플릿 파일의 위치(예: 로컬 컴퓨터의 경로 또는 Amazon S3 URL)를 지정하여 CloudFormation 스택을 생성한다. 템플릿에 파라미터가 포함되어 있는 경우 스택을 생성할 때 입력 값을 지정할 수 있다. 파라미터를 통해 템플릿을 값을 전달하여 스택을 생성할 때마다 리소스를 사용자 지정할 수 있다.

    CloudFormation 콘솔, API 또는 AWS CLI를 사용하여 스택을 생성할 수 있다.

    Note

    템플릿 파일을 로컬에 저장하도록 지정한 경우 CloudFormation은 해당 파일을 AWS 계정의 S3 버킷에 업로드한다. CloudFormation은 템플릿 파일을 업로드하는 리전별로 버킷을 생성한다. AWS 계정에서 Amazon Simple Storage Service(Amazon S3) 권한이 있는 모든 사용자가 버킷에 액세스할 수 있다. CloudFormation에서 생성한 버킷이 이미 있는 경우, 해당 버킷에 템플릿이 추가된다.

    템플릿을 Amazon S3에 수동으로 업로드하여 자체 버킷을 사용하고 버킷의 권한을 관리할 수 있다. 그런 다음 스택을 생성하거나 업데이트할 때마다 템플릿 파일의 Amazon S3 URL을 지정한다.

CloudFormation에서는 템플릿에 설명된 AWS 서비스를 호출하여 리소스를 프로비저닝 및 구성한다.

모든 리소스가 생성된 후 CloudFormation에서는 스택이 생성되었음을 보고한다. 그러면 스택의 리소스를 사용할 수 있다. 스택 생성에 실패하면 CloudFormation에서는 생성한 리소스를 삭제하여 변경 사항을 롤백한다.


1. 변경 세트로 스택 업데이트

스택의 리소스를 업데이트해야 하는 경우 스택의 템플릿을 수정할 수 있다. 새 스택을 만들고 이전 스택은 삭제할 필요가 없다. 스택을 업데이트하려면 원본 스택 템플릿의 수정된 버전, 다른 입력 파라미터 또는 둘 다를 제출하여 변경 세트를 생성한다. CloudFormation에서는 수정된 템플릿을 원본 템플릿과 비교해 변경 세트를 생성한다. 변경 세트에는 제안된 변경 사항이 나열되어 있다. 변경 사항을 검토한 후 변경 세트를 시작해 스택을 업데이트하거나 새 변경 세트를 생성할 수 있다. 다음 다이어그램은 스택 업데이트 워크플로우를 요약해서 보여준다.

002

Warning

업데이트 시 중단이 발생할 수 있다. 업데이트 중인 리소스 및 속성에 따라 업데이트 시 기존 리소스가 중단되거나 대체될 수 있다. 자세한 내용은 AWS CloudFormation 스택 업데이트 단원을 참조한다.

  1. AWS CloudFormation Designer 또는 텍스트 편집기를 사용하여 CloudFormation 스택 템플릿을 수정할 수 있다. 예를 들어 EC2 인스턴스에 대한 인스턴스 유형을 변경하려는 경우 원본 스택의 템플릿에서 InstanceType 속성의 값을 변경한다.

    자세한 내용은 스택 템플릿 수정 섹션을 참조한다.

  2. CloudFormation 템플릿을 로컬 또는 S3 버킷에 저장한다.

  3. 업데이트하려는 스택과 수정된 템플릿의 위치(예: 로컬 컴퓨터의 경로 또는 Amazon S3 URL)를 지정하여 변경 세트를 생성한다. 템플릿에 파라미터가 포함되어 있는 경우 변경 세트를 생성할 때 값을 지정할 수 있다.

    변경 세트 생성에 대한 자세한 내용은 변경 세트를 사용하여 스택 업데이트 단원을 참조한다.

    Note

    로컬 컴퓨터에 저장되는 템플릿을 지정한 경우 CloudFormation에서는 해당 템플릿을 AWS 계정의 S3 버킷에 템플릿을 자동으로 업로드한다.

  4. 변경 세트를 보고 기대하는 변경을 CloudFormation에서 수행할지 확인한다. 예를 들어 CloudFormation에서 중요한 스택 리소스를 대체할지 확인한다. 원하는 변경 사항을 포함할 때까지 변경 세트는 필요한 만큼 생성할 수 있다.

    Warning

    변경 세트는 스택 업데이트에 성공했는지 여부는 나타내지 않는다. 예를 들어 변경 세트는 계정 할당량을 초과하는 경우, 업데이트를 지원하지 않는 리소스를 업데이트하는 경우 또는 리소스를 수정할 권한이 불충분한 경우를 확인하지 않는다. 이러한 경우 스택 업데이트 실패가 발생할 수 있다.

  5. 스택에 적용하려는 변경 세트를 시작한다. CloudFormation에서는 수정한 리소스만 업데이트하여 스택을 업데이트하고 스택 업데이트에 성공했다는 신호를 전송한다. 스택 업데이트에 실패하면 CloudFormation에서는 변경 사항을 롤백해 스택을 알려진 마지막 작동 상태로 복원한다.


2. 스택 삭제

스택을 삭제하는 경우 삭제할 스택을 지정하면 CloudFormation에서는 해당 스택과 스택 내 모든 리소스를 삭제한다. CloudFormation 콘솔, API 또는 AWS CLI를 사용하여 스택을 삭제할 수 있다.

스택은 삭제하지만 해당 스택 내 일부 리소스는 보존하려는 경우 삭제 정책을 사용하여 해당 리소스는 보존할 수 있다.

모든 리소스가 삭제된 후 CloudFormation에서는 스택이 성공적으로 삭제되었다는 신호를 전송한다. CloudFormation에서 리소스를 삭제할 수 없는 경우에는 스택이 삭제되지 않는다. 삭제되지 않은 모든 리소스는 스택을 성공적으로 삭제할 수 있을 때까지 보존된다.


References