ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CDK로 AWS 인프라 구축하기 - #마지막
    개발 이야기/인프라 구축 및 운영 2022. 6. 28. 12:40
    728x90
    반응형

    원래 #5로 끝났지만 주의할 사항들이 몇 있어 간단히 정리하고 정말 마무리 하려 합니다.

    1. 여러 스택을 정의한 경우

    > cdk deploy/destroy stack01   // 이렇게 명시해서 특정 스택만 배포/삭제 
    > cdk deploy/destroy --all     // 정의된 모든 스택을 배포/삭제

    2. 분기 처리 방법

    local의 config, env 파일 등에 정의한 내용을 활용하여 내부 분기처리를 할수 있습니다. 예를들면 config.json 파일에 배포할 지역을 정의하고 이를 읽어 처리할 수 있습니다

    // config.json 의 예
    { 
        "regions" : ["us-east-2", "ap-northeast-2"]
    }

    혹은 위와 같은 내용은 ddb에 업데이트하고 deploy/destroy 시 이를 읽어 진행할 수도 있을 겁니다.

    .
      .
      const AWS = require('aws-sdk')
      AWS.config.update({region: 'us-east-2'});
      var ddb = new AWS.DynamoDB.DocumentClient();
      .
      .
      var params = {
        TableName: "your_table_name"
        Key : {
          name : "region_list"
        }
      }
      ddb.get(params, (err:any, data:any) => {
        if(!err){
          if(data.Item.regions){
            var regions = data.Item.regions.split(','); // "ap-northeast-2 , us-east-2" 이와 같이 ,로 구분되어 입력되었다고 가정
            for(var idx in regions){
              let region = regions[idx].trim();
              new RegionStack(app, 'stack-'+region, {   // stack이름이 같으면 안된다. region명으로 구분한다고 가정
                env: { account: 'your_account_id', region: region },
              });
            }
          }else{
            console.log("No regions. Check your table!");
          }    
        }
      });
      .
      .
      --------------

    (* region이 복수일 수 있으므로 실행 시 --all 옵션이 필요합니다.)

    위에 든 예시 외에도 필요한 환경에 따라 다양한 방법을 도입할 수 있습니다. 

    3. 변경되는 이름 주의

    리소스를 생성할 때 id를 지정하는데 일부는 지정한 id 자체로 명명되지만 (예, VPC) 대부분은 어떤 값이 추가되어 생성됩니다. (예, DynamoDB - DynamoDB 생성 시 TableName은 지정한 이름에 일별로 정해지는 별도의 텍스트가 추가되어 생성됩니다.) 이를 방지하기 위해서는 props 중 실제이름을 지정할 수 있는 속성값을 설정하세요.

    4. 중복 생성 주의

    예를들어 dynamodb를 아래와 같이 생성하면...

      const ddb_main = new dynamodb.Table(this, "testTable", {
        partitionKey: {name: "name", type:dynamodb.AttributeType.STRING},
        billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
      });

    처음은 정상적으로 생성되며, 바로 이어 다시 deploy를 시도하면

      ✅ testTable(no changes)

    위와 같은 메세지가 출력되면서 중복 생성되지 않습니다. 하지만 다음 날 시도하면 새로운 테이블이 생성됩니다.

    CDK에서 리소스를 생성 시 사용자가 지정한 id 뒤에 랜덤하게 붙는 텍스트(3번 참고)가 있습니다. deploy 혹은 destroy 시 TOKEN으로 명명된 랜덤 텍스트가 추가되는데 이게 일일 별로 변경되고 있어 발생하는 문제인 듯 합니다. 이를 방지하기 위해서는 props에 "tableName"값을 추가하여 테이블명을 명시하시기 바랍니다.

     DynamoDB 외에도 S3 등도 이와 유사한 이슈들이 있으니 참고하세요.

    5. DynamoDB가 Destroy 시 삭제되지 않는 이슈

    데이터 손실을 방지하기 위해 dynamodb의 테이블은 삭제되지 않습니다. 대신 stack에서는 분리됩니다. 이를 자동 삭제하기 위해서는 removePolicy를 아래와 같이 설정하면 되지만 추천하지는 않습니다.

    const ddb_main = new dynamodb.Table(this, "testTable", {
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      partitionKey: {name: "name", type:dynamodb.AttributeType.STRING},
      billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
    });

    이상입니다. 도움이 되셨기를 ... 

    반응형

    댓글 0

Designed by Tistory.