Amazon Web Services 한국 블로그

AWS CloudFormation 스택으로 기존 리소스 가져오기 기능 출시 (서울 리전 포함)

AWS CloudFormation을 사용하면 손쉬운 코드 파일로 전체 인프라를 구성할 수 있습니다. 이러한 방식으로 인프라를 코드로 취급(Infra as a code)하고 버전 관리 하에 배포하거나 배포 전에 팀과 아키텍처 변경을 검토하는 등 소프트웨어 개발 모범 사례를 적용할 수 있습니다.

콘솔 또는 AWS 명령줄 인터페이스(CLI)를 사용하여 처음 생성된 AWS 리소스를 CloudFormation을 사용하여 관리해야 할 경우가 있습니다. 예를 들어, 여러분이나 다른 팀이 마이그레이션의 초기 단계에서 IAM 역할, 가상 사설 클라우드 또는 RDS 데이터베이스를 생성한 경우 이들을 최종 애플리케이션과 동일한 스택에 포함하기 위해 많은 시간을 할애해야 할 수 있습니다. 이런 경우 CloudFormation을 사용하여 처음부터 리소스를 다시 생성한 후 원래 리소스에서 구성과 데이터를 마이그레이션하는 경우가 종종 있습니다.

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

DeletionPolicyRetain으로 설정해 리소스를 삭제하지 않고 스택에서 제거하는 것은 기존에도 가능했습니다. 이 옵션을 새로운 가져오기 작업과 함께 사용하면 여러 가지 가능성이 열립니다. 예를 들어, 이제 다음 작업을 수행할 수 있습니다.

  • 기존 리소스를 가져올 새로운 스택 생성
  • 이미 생성한 스택에 기존 리소스 가져오기
  • 스택 간 리소스 마이그레이션
  • 감지된 드리프트 해결
  • 상위 스택에서 하위 스택을 삭제한 후 다른 상위 스택으로 가져오는 방식으로 중첩 스택 리팩터링

기존 리소스를 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

이 템플릿에서 DeletionPolicyRetain으로 설정하겠습니다. 이런 방식으로 스택에서 삭제 정책을 제거하면 삭제되지 않습니다. 이 옵션은 실수로 삭제하지 않아야 할 데이터가 포함된 리소스나 나중에 다른 스택으로 이동하려는 리소스에 유용합니다. 가져온 리소스에 반드시 삭제 정책을 설정해야 안전하고 쉽게 작업을 되돌릴 수 있으며 다른 사용자가 가져온 리소스를 실수로 삭제하는 일이 없도록 보호할 수 있습니다.

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

마지막으로, 템플릿을 적용하기 전에 변경 사항을 검토하겠습니다. 가져올 올바른 리소스를 올바른 식별자를 사용하여 지정했는지 확인하겠습니다. 이는 실제로는 리소스를 가져올 때 실행될 CloudFormation 변경 세트입니다.

리소스를 기존 스택으로 가져올 때 스택의 기존 리소스에 대해서는 변경이 허용되지 않습니다. 가져오기 작업에서는 가져오기의 변경 세트 작업만 허용합니다. 파라미터의 경우 변경으로 인해 기존 리소스의 확인된 속성 값이 변경되지만 않는다면 변경이 허용됩니다. 기존 리소스의 템플릿을 변경해 하드코딩된 값을 가져올 리소스에 대한 Ref로 바꿀 수 있습니다. 예를 들어, 스택에 콘솔을 사용하여 생성된 기존 IAM 역할을 사용하는 EC2 인스턴스가 있을 수 있습니다. IAM 역할을 스택으로 가져온 후 EC2 인스턴스에서 사용하는 템플릿의 하드코딩된 값을 역할에 대한 Ref로 바꿀 수 있습니다.

계속해서, 각 리소스는 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"
    }
  ]
}

정식 출시
신규 CloudFormation 가져오기 작업을 콘솔, AWS 명령줄 인터페이스(CLI) 또는 AWS SDK를 통해 미국 동부(오하이오), 미국 동부(버지니아 북부), 미국 서부(캘리포니아 북부), 미국 서부(오레곤), 캐나다(중부), 아시아 태평양(뭄바이), 아시아 태평양(서울), 아시아 태평양(싱가포르), 아시아 태평양(시드니), 아시아 태평양(도쿄), EU(프랑크푸르트), EU(아일랜드), EU(런던), EU(파리) 및 남아메리카(상파울루) 리전에서 사용할 수 있습니다.

코드형 인프라의 관리가 더욱 간소화되었습니다. 자세한 내용은 설명서에서 Bringing Existing Resources Into CloudFormation Management를 참조하십시오.

Danilo