BLOG

AWS CloudFormation의 신규 기능 소개… 기존 리소스를 CloudFormation 스택으로 가져 오기
작성일: 2019-12-24

AWS CloudFormation을 사용하면 텍스트 파일로 전체 인프라를 모델링할 수 있습니다. 이러한 방식으로 인프라를 코드로 취급하고 버전 관리 하에 배치하거나 배치 전에 팀과 아키텍처 변경을 검토하는 등 소프트웨어 개발 모범 사례를 적용할 수 있습니다.

 

때때로 콘솔 또는 AWS Command Line Interface (CLI)를 사용하여 생성된 AWS 리소스는 CloudFormation을 사용하여 관리해야 합니다. 예를 들어, 사용자(또는 다른 팀)는 마이그레이션 초기 단계에서 IAM역할, Virtual Private Cloud또는 RDS 데이터베이스를 생성한 다음 최종 단계와 동일한 스택에 포함하기 위해 시간을 소비해야 합니다. 이러한 경우 CloudFormation을 사용하여 리소스를 처음부터 다시 만든 다음 원래 리소스에서 구성 및 데이터를 마이그레이션하는 경우가 자주 있습니다.

 

고객이 이러한 단계를 쉽게 수행 할 수 있도록 이제 기존 리소스를 CloudFormation 스택으로 가져올 수 있습니다!

 

DeletionPolicy를 Retain으로 설정하면, 삭제하지 않고 스택에서 리소스를 제거할 수 있습니다. 이는 새로운 가져 오기 작업과 함께 새로운 가능성을 가능하게 합니다. 예를 들면, 이제 다음의 사항들이 가능합니다.

 

  • 기존 리소스를 가져 오는 새 스택을 만듭니다.
  • 이미 생성 된 스택에서 기존 리소스를 가져옵니다.
  • 스택 전체에서 리소스를 마이그레이션합니다.
  • 감지된 드리프트를 수정합니다.
  • 상위에서 하위 스택 1개를 삭제 한 다음, 다른 상위 스택으로 가져 와서 중첩 스택을 리팩터링 합니다.

 

기존 리소스를 CloudFormation 스택으로 가져 오려면 다음을 제공해야 합니다.

 

  • 가져올 리소스와 이미 스택의 일부인 리소스를 포함하여 전체 스택을 설명하는 템플릿.
  • 가져올 각 리소스에는 DeletionPolicy 속성이 있어야 합니다. 이를 통해 완전히 안전한 방식으로 작업을 쉽게 되돌릴 수 있습니다.
  • 각 대상 리소스의 고유 식별자. 예를 들어 가져올 Amazon DynamoDB테이블 또는 Amazon Simple Storage Service (S3) 버킷의 이름

 

리소스 가져 오기 작업 중 CloudFormation은 다음을 확인합니다.

 

  • 가져온 리소스가 같은 리전의 다른 스택에 속해 있지 않습니다 (IAM 역할과 같은 글로벌 리소스에는 주의)
  • 타겟 리소스가 존재하며 작업을 수행 할 수 있는 충분한 권한이 있습니다.
  • 속성 및 설정 값은 리소스 타입 스키마에 대해 유효합니다. 스키마는 필수, 허용 가능한 특성 및 지원되는 값을 정의합니다.

 

리소스 가져 오기 작업에서는 템플릿 구성과 실제 구성이 같은지 확인하지 않습니다. 가져 오기는 드리프트 검출과 같은 리소스 타입을 지원하고 있기 때문에, 리소스를 스택에 가져온 후, 드리프트 검출을 실행 하는 것이 좋습니다.

 

기존 스택을 새 스택으로 가져 오기

AWS 계정에는 일부 데이터가 포함된 S3 버킷과 DynamoDB 테이블이 있으며 양쪽 모두 내부에 데이터가 있습니다. CloudFormation을 사용하여 관리하고 싶을 경우, CloudFormation의 콘솔에는 두 가지 새로운 옵션이 있습니다:

 

  • 기존 리소스를 가져 오는 새 스택을 만들 수 있습니다.

 

  • 기존 스택에 리소스를 가져올 수 있습니다.

이 경우 처음부터 다시 시작하고자 하므로, 새 스택을 만듭니다. 다음 단계로는 가져올 리소스를 템플릿에 지정합니다.

 

가져올 두 가지 리소스가 포함된 DynamoDB 테이블과 S3 버킷으로 다음 템플릿을 업로드 합니다.

 

AWSTemplateFormatVersion: “2010-09-09”

Description: Import test

Resources:

 

  ImportedTable:

    Type: AWS::DynamoDB::Table

    DeletionPolicy: Retain

    Properties:

      BillingMode: PAY_PER_REQUEST

      AttributeDefinitions:

        – AttributeName: id

          AttributeType: S

      KeySchema:

        – AttributeName: id

          KeyType: HASH

 

  ImportedBucket:

    Type: AWS::S3::Bucket

    DeletionPolicy: Retain

 

이 템플릿에서는 두 리소스 모두 DeletionPolicy를 Retain로 설정하고 있습니다. 이런 식으로 스택에서 이들을 제거하면 삭제되지 않습니다. 실수로, 삭제하고 싶지 않았던 데이터를 포함한 리소스 혹은 나중에 다른 스택으로 옮기려는 리소스에 적합한 옵션입니다. 가져온 리소스에는 설정 되어 있는 것이 필수이기 때문에, 작업을 안전하고 쉽게 되돌릴 수 있으며 다른 사람이 가져온 리소스를 실수로 삭제하지 않도록 보호할 수 있습니다.

 

이제 템플릿의 논리적 ID를 기존 리소스와 매핑하려면 식별자를 제공해야 합니다. 이 경우 DynamoDB 테이블 이름과 S3 버킷 이름을 사용합니다. 다른 리소스 유형의 경우, 이를 식별하는 여러 가지 방법이 있을 수 있으며, 드롭 다운 메뉴에서 사용할 속성을 선택할 수 있습니다.

 

최종 요약에서는 변경 사항을 적용하기 전에 검토합니다. 여기에서 올바른 식별자로 가져올 올바른 리소스를 타겟팅 하고 있는지 확인합니다. 이것은 실제로 리소스를 가져올 때 실행될 CloudFormation 변경 세트입니다.

 

기존 스택으로 리소스를 가져올 때 스택의 기존 리소스를 추가 변경할 수 없습니다. 가져오기 조작은 가져오기의 변경 세트 조치만 허용됩니다. 매개 변수의 변경은 기존 리소스 내의 속성 값을 변경 하지 않은 한 허용됩니다. 기존 리소스의 템플릿을 변경하여 가져온 리소스로의 참조에서 하드 코딩된 값을 변경 가능합니다. 예를 들어 콘솔을 사용하여 생성된 기존 IAM 역할을 사용하여 EC2 인스턴스를 가진 스택이 있을 수 있습니다. 이제 IAM 역할을 스택으로 가져 와서 템플릿에서 Ref와 함께 EC2 인스턴스로 사용되는 하드 코딩된 값을 역할로 대체할 수 있습니다.

 

계속해서 각 리소스의 대응하는 가져오기 이벤트가 CloudFormation 콘솔에 있습니다.

 

가져 오기가 완료되면 리소스탭에서 S3 버킷과 DynamoDB 테이블이 이제 스택의 일부가 됩니다.

 

가져온 리소스가 스택 템플릿과 동기화되도록 드리프트 감지를 사용합니다.

 

자동 생성된 태그를 포함하여 모든 스택 수준의 태그는 CloudFormation이 지원 하는 리소스로 전파됩니다. 예를 들어 AWS CLI를 사용하여 방금 스택으로 가져온 S3버킷 과 관련된 태그 세트를 가져올 수 있습니다. 이러한 태그는 CloudFormation 스택 이름과 ID 및 스택 템플릿에 있는 리소스의 논리적 ID를 제공합니다.

 

$ aws s3api get-bucket-tagging –bucket danilop-toimport

 

{

  “TagSet”: [

    {

      “Key”: “aws:cloudformation:stack-name”,

      “Value”: “imported-stack”

    },

    {

      “Key”: “aws:cloudformation:stack-id”,

      “Value”: “arn:aws:cloudformation:eu-west-1:123412341234:stack/imported-stack/…”

    },

    {

      “Key”: “aws:cloudformation:logical-id”,

      “Value”: “ImportedBucket”

    }

  ]

}

 

정식 출시

서울을 포함한 다음의 AWS 리전에서 콘솔, AWS Command Line Interface (CLI) 또는 AWS SDKs를 통해 새로운 CloudFormation 가져 오기 작업을 사용할 수 있습니다. 미국 동부 (오하이오), 미국 동부 (버지니아 북부), 미국 서부 (캘리포니아 북부), 미국 서부 (오레곤), 캐나다 (중부), 아시아 태평양 (뭄바이), 아시아 태평양 (서울), 아시아 태평양 (싱가포르), 아시아 태평양 (시드니), 아시아 태평양 (도쿄), EU (프랑크푸르트), EU (아일랜드), EU (런던), EU (파리) 및 남미 (상파울루).

 

이제 인프라를 코드로 관리하는 것이 더 간단해졌습니다. 오늘 주제에 대해 더 알고 싶으시다면 ‘bringing existing resources into CloudFormation management in the documentation(문서에서 기존 리소스를 CloudFormation 관리로 가져오기)’ 페이지를 방문해 주시기 바랍니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/aws/new-import-existing-resources-into-a-cloudformation-stack/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.