본문 바로가기
IT/Serverless

CloudFormation / Serverless Framework 삭제시 리소스 유지

by DOSGamer 2019. 7. 30.
반응형

CloudFormation 삭제시 리소스 유지

AWS CloudFormation 으로 테이블 만들고 인프라 만들고 하는데

CloudFormation 을 삭제하면 한번에 싹 지워지기 때문에 좋기는 한데

다른 CloudFormation 과 공유해서 사용하는 자원들의 경우 삭제 하면 안될 경우가 있습니다

그 때를 위해서 STACK 삭제시에도 유지하는 DeletionPolicy 라는 옵션이 있네요

DeletionPolicy 옵션의 값은 3가지가 있습니다

  • [Retain] 옵션을 지정하면 스택 삭제 시 리소스가 유지됩니다
  • [Snapshot] 옵션을 지정하면 해당 리소스를 삭제하기 전에 리소스의 스냅샷을 생성합니다
    참고: 이 옵션은 스냅샷을 지원하는 리소스에만 사용할 수 있습니다.
  • [Delete] 옵션을 지정하면 스택과 함께 리소스가 삭제됩니다.

JSON

{
  "Description": "AWS CloudFormation DeletionPolicy demo",
  "Resources": {
    "SGroup1": {
      "Type": "AWS::EC2::SecurityGroup",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupDescription": "EC2 Instance access"
      }
    },
    "SGroup2": {
      "Type": "AWS::EC2::SecurityGroup",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupDescription": "EC2 Instance access"
      }
    },
    "SGroup1Ingress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupName": {
          "Ref": "SGroup1"
        },
        "IpProtocol": "tcp",
        "ToPort": "80",
        "FromPort": "80",
        "CidrIp": "0.0.0.0/0"
      }
    },
    "SGroup2Ingress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "DeletionPolicy": "Retain",
      "Properties": {
        "GroupName": {
          "Ref": "SGroup2"
        },
        "IpProtocol": "tcp",
        "ToPort": "80",
        "FromPort": "80",
        "CidrIp": "0.0.0.0/0"
      }
    }
  }
}

YAML

Description: AWS CloudFormation DeletionPolicy demo
Resources:
  SGroup1:
    Type: 'AWS::EC2::SecurityGroup'
    DeletionPolicy: Retain
    Properties:
      GroupDescription: EC2 Instance access
  SGroup2:
    Type: 'AWS::EC2::SecurityGroup'
    DeletionPolicy: Retain
    Properties:
      GroupDescription: EC2 Instance access
  SGroup1Ingress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    DeletionPolicy: Retain
    Properties:
      GroupName: !Ref SGroup1
      IpProtocol: tcp
      ToPort: '80'
      FromPort: '80'
      CidrIp: 0.0.0.0/0
  SGroup2Ingress:
    Type: 'AWS::EC2::SecurityGroupIngress'
    DeletionPolicy: Retain
    Properties:
      GroupName: !Ref SGroup2
      IpProtocol: tcp
      ToPort: '80'
      FromPort: '80'
      CidrIp: 0.0.0.0/0

보안그룹에 대한 설정값인데 이게 사라지면 난리 나겠지요

그러니 DeletionPolicy: Retain 으로 지정해서 삭제되지 않게 합시다

 

Serverless Framework 삭제시 리소스 유지

serverless.yml

resources:
  Resources:
    PushDynamoDbTable:
      Type: 'AWS::DynamoDB::Table'
      DeletionPolicy: Retain
      Properties:
        TableName: ${self:custom.DYNAMODB_TABLE}
        AttributeDefinitions:
          - AttributeName: id
            AttributeType: S
        KeySchema:
          - AttributeName: id
            KeyType: HASH
        BillingMode: PAY_PER_REQUEST

PUSH 서비스를 만드는 중인데 테이블이 필요해서 설정했는데

문제는 sls remove 시에 테이블이 삭제 되어 버립니다

그러니 sls remove 시에도 테이블이 삭제되지 않도록

DeletionPolicy: Retain 을 설정해놓습니다

 

참고사이트

https://aws.amazon.com/ko/premiumsupport/knowledge-center/delete-cf-stack-retain-resources/

반응형