Aws Cdk란?

AWS CDK (Cloud Development Kit)는 인프라스트럭처를 코드로 정의하고 프로비저닝하는 도구입니다. CDK는 여러분이 원하는 AWS 리소스를 프로그래밍 언어로 작성할 수 있게 해주며, 이를 통해 인프라스트럭처를 관리하고 배포하는 프로세스를 자동화할 수 있습니다.

 

CDK는 여러 프로그래밍 언어를 지원하며, 주로 TypeScript, JavaScript, Python, Java, C# 등을 사용할 수 있습니다. 여러분이 선호하는 언어로 AWS 리소스를 정의하고, CDK 명령을 사용하여 해당 리소스를 프로비저닝할 수 있습니다.

 

CDK는 AWS CloudFormation을 기반으로 동작합니다. CDK로 작성한 코드는 CloudFormation 템플릿으로 변환되어 배포됩니다. 이를 통해 여러분은 AWS 리소스를 프로그래밍 방식으로 관리할 수 있으며, CloudFormation의 강력한 기능을 활용할 수 있습니다.

 

CDK는 다양한 AWS 서비스를 지원하며, 예를 들어 Amazon S3, Amazon EC2, AWS Lambda, Amazon DynamoDB, Amazon RDS 등과 같은 서비스를 코드로 정의하고 프로비저닝할 수 있습니다. 또한, 여러 서비스 간의 의존성을 정의하고, 환경 변수, 태그, IAM 역할 등을 관리할 수 있습니다.

 

CDK는 AWS CLI와 함께 사용되며, 여러분은 CDK 명령을 사용하여 코드를 빌드하고 배포할 수 있습니다. CDK는 배포 전에 변경 사항을 검토하고, 스택을 업데이트하거나 롤백하는 등의 작업을 수행할 수 있습니다.

AWS CDK는 인프라스트럭처를 코드로 관리하고 프로비저닝하는 강력한 도구로, 개발자들이 AWS 리소스를 더 쉽게 관리하고 배포할 수 있도록 도와줍니다.

 

Aws Cdk 활용 사례 (Lambda와 Websocket Api Gateway 배포하기)

  1. CDK 프로젝트 설정:
    • CDK를 설치하고 프로젝트 디렉토리를 생성합니다.
    • 프로젝트 디렉토리에서 cdk init 명령을 실행하여 CDK 프로젝트를 초기화합니다.(기존 프로젝트의 경우, 생략)
    • 필요한 언어를 선택(언어 선택에 따라, 프로젝트 구조가 결정된다.)하고, 프로젝트의 기본 구조를 생성합니다.
    • CDK 설치:
      • CDK를 사용하기 위해 먼저 Node.js와 npm을 설치해야 합니다. Node.js는 공식 웹사이트(https://nodejs.org)에서 다운로드하여 설치할 수 있습니다.
      • Node.js와 npm이 설치되었다면, 터미널 또는 명령 프롬프트에서 npm install -g aws-cdk 명령을 실행하여 CDK를 전역으로 설치합니다.
      1. CDK 프로젝트 생성(신규):
        • CDK 프로젝트를 생성할 디렉토리를 선택하고, 해당 디렉토리로 이동합니다.
        • 터미널 또는 명령 프롬프트에서 cdk init 명령을 실행합니다.
        • cdk init 명령을 실행하면 프로젝트의 기본 구조가 생성됩니다. 이때 언어를 선택할 수 있으며, TypeScript, JavaScript, Python, Java, C# 등을 선택할 수 있습니다.
      2. CDK 프로젝트 생성(기존):
        • 이미 구성되어 있으므로, cdk init이 필요없음
      3. CDK 프로젝트 구성:
        • CDK 프로젝트의 구성 파일은 cdk.json입니다. 이 파일은 CDK 애플리케이션의 설정을 정의합니다.
        • cdk.json 파일을 열고, app 속성에 CDK 애플리케이션의 진입점을 지정합니다. 기본적으로 lib 디렉토리의 my-stack.ts 파일이 지정되어 있습니다.
      4. CDK 종속성 설치:
        • CDK 프로젝트에서 사용할 AWS CDK 모듈 및 관련 종속성을 설치해야 합니다.
        • 프로젝트 디렉토리에서 npm install 명령을 실행하여 package.json 파일에 명시된 종속성을 설치합니다.
      5. CDK 프로젝트 구조:
        • CDK 프로젝트의 기본 구조는 다음과 같습니다:
          • bin 디렉토리: CDK 애플리케이션의 진입점인 app.ts 파일이 위치합니다.
          • lib 디렉토리: CDK 스택을 정의하는 TypeScript 또는 JavaScript 파일이 위치합니다.
          • test 디렉토리: CDK 스택에 대한 테스트 파일이 위치합니다.
          • cdk.json: CDK 애플리케이션의 구성 파일입니다.
          • package.json: 프로젝트의 종속성 및 스크립트를 정의하는 파일입니다.
  2. CDK 코드 작성:
    • 프로젝트 디렉토리에서 CDK 코드를 작성합니다. 여기서는 TypeScript를 사용하는 예시를 보여드리겠습니다.
    • lib 디렉토리의 my-stack.ts 파일을 열고, import 문을 사용하여 필요한 AWS CDK 모듈을 가져옵니다.
    • MyStack 클래스를 생성하고, constructor 메서드에서 스택 이름을 정의합니다.
    • createLambdaFunction 메서드를 작성하여 람다 함수를 생성하고, createWebSocketApi 메서드를 작성하여 WebSocket API를 생성합니다.
    • 필요한 리소스를 정의하고 구성합니다.
  3. CDK 스택 배포:
    1.  cdk bootstrap <aws-account-id>/<aws-region> 명령어를 통해, 어떤 계정의 어떤 Region에 스택을 생성할 것인지 최초 1회 정의한다.(리전 변경 시 다시 호출 필요)
    2. 더보기
      • CDK를 사용하여 AWS 계정에 스택을 배포하기 전에, CDK가 필요한 리소스를 프로비저닝하기 위해 cdk bootstrap 명령을 사용해야 합니다. cdk bootstrap 명령은 다음과 같이 실행됩니다:

        cdk bootstrap <aws-account-id>/<aws-region>
        
        • <aws-account-id>: AWS 계정 ID를 입력합니다.
        • <aws-region>: 스택을 배포할 AWS 리전을 입력합니다.

        예를 들어, AWS 계정 ID가 123456789012이고 배포할 리전이 us-east-1인 경우, 다음과 같이 cdk bootstrap 명령을 실행합니다:

        cdk bootstrap 123456789012/us-east-1
        

         

        cdk bootstrap 명령을 실행하면 CDK는 CloudFormation 스택을 생성하여 필요한 리소스를 프로비저닝합니다. 이 과정에서는 보안 그룹, VPC, S3 버킷 등의 리소스가 생성될 수 있습니다.

         

        이 명령은 최초 한 번만 실행하면 되며, 이후에는 동일한 리전에서 다른 스택을 배포할 때 다시 실행할 필요가 없습니다.

    3. 프로젝트 디렉토리에서 cdk deploy 명령을 실행하여 CDK 스택을 배포합니다.
    4. CDK는 CloudFormation 템플릿을 생성하고, 해당 템플릿을 사용하여 스택을 프로비저닝합니다.
    5. 배포 과정에서 생성된 리소스의 상태를 확인하고, 변경 사항을 검토할 수 있습니다.
    6. 더보기
      • CDK 스택을 배포하기 전에, AWS 계정에 액세스할 수 있는 AWS 자격 증명을 설정해야 합니다. 이를 위해 AWS CLI를 사용하여 aws configure 명령을 실행하고, 액세스 키와 시크릿 키를 입력합니다.
      • 프로젝트 디렉토리에서 터미널 또는 명령 프롬프트를 열고, cdk deploy 명령을 실행합니다.
      • cdk deploy 명령을 실행하면 CDK는 CloudFormation 템플릿을 생성하고, 해당 템플릿을 사용하여 스택을 프로비저닝합니다.
      • 배포 과정에서 생성된 리소스의 상태를 확인하고, 변경 사항을 검토할 수 있습니다.
      • 배포가 완료되면, 생성된 리소스의 상태와 URL 등의 정보가 출력됩니다.
  • CDK 스택 정리하기
    • 배포된 스택 확인: 먼저, 현재 배포된 스택을 확인합니다. cdk ls 명령을 사용하여 현재 배포된 스택의 목록을 확인할 수 있습니다.
    • 스택 삭제: 정리할 스택을 선택하고, 해당 스택을 삭제합니다. cdk destroy <스택이름> 명령을 사용하여 스택을 삭제할 수 있습니다. 이 명령은 스택에 연결된 모든 리소스를 삭제하고, 스택 자체도 삭제합니다. 스택 이름은 cdk ls 명령으로 확인할 수 있습니다.

아래는 TypeScript를 사용하여 CDK 코드를 작성하는 예시입니다:

import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';

export class MyStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 람다 함수 생성
    const lambdaFunction = new lambda.Function(this, 'MyLambdaFunction', {
      runtime: lambda.Runtime.NODEJS_14_X,
      handler: 'index.handler',
      code: lambda.Code.fromAsset('lambda'),
    });

    // WebSocket API 생성
    const webSocketApi = new apigatewayv2.WebSocketApi(this, 'MyWebSocketApi', {
      connectRouteOptions: {
        integration: new apigatewayv2integrations.LambdaWebSocketIntegration({
          handler: lambdaFunction,
        }),
      },
    });

    // WebSocket API 배포
    const webSocketStage = new apigatewayv2.WebSocketStage(this, 'MyWebSocketStage', {
      webSocketApi,
      stageName: 'dev',
    });
  }
}

const app = new cdk.App();
new MyStack(app, 'MyStack');
app.synth();
 

위의 코드에서는 MyStack 클래스를 생성하고, constructor 메서드에서 스택 이름을 정의합니다.

 

그리고 createLambdaFunction 메서드를 사용하여 람다 함수를 생성하고, createWebSocketApi 메서드를 사용하여 WebSocket API를 생성합니다.

필요한 리소스를 정의하고 구성한 후, app.synth()를 호출하여 CDK 애플리케이션을 합성합니다.

 

마지막으로, 프로젝트 디렉토리에서 cdk deploy 명령을 실행하여 CDK 스택을 배포합니다. CDK는 CloudFormation 템플릿을 생성하고, 해당 템플릿을 사용하여 스택을 프로비저닝합니다.

 

이렇게 CDK를 사용하여 람다 함수와 WebSocket API를 정의하고 프로비저닝할 수 있습니다.

'[CDS] Cloud Service > AWS' 카테고리의 다른 글

Bedrock RAG의 정확도를 늘리는 방법  (0) 2024.02.01
AWS LLM FineTuning  (0) 2024.01.19
AWS Bedrock 이란?  (0) 2024.01.18
[AWS] Aws devops professional 자격증 준비하기  (0) 2023.02.06
[AWS] 2주차 공부 - 컴퓨팅(EC2)  (0) 2022.11.29
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기