콘텐츠로 이동

CDK 인프라

AWS CDK는 코드로 클라우드 인프라를 정의하고 AWS CloudFormation을 통해 프로비저닝할 수 있는 프레임워크입니다.

TypeScript 인프라 생성기는 TypeScript로 작성된 AWS CDK 인프라 애플리케이션을 생성합니다. 생성된 애플리케이션은 CFN Guard 검사를 통해 보안 모범 사례를 포함합니다.

새 인프라 프로젝트를 두 가지 방식으로 생성할 수 있습니다:

  1. 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
  2. VSCode에서 Nx 콘솔 열기
  3. 클릭 Generate (UI) "Common Nx Commands" 섹션에서
  4. 검색 @aws/nx-plugin - ts#infra
  5. 필수 매개변수 입력
    • 클릭 Generate
    매개변수 타입 기본값 설명
    name 필수 string - The name of the application.
    ruleSet string aws_prototyping Rule set to validate your AWS resources with.
    directory string packages The directory of the new application.

    생성기는 <directory>/<name> 디렉토리에 다음 프로젝트 구조를 생성합니다:

    • 디렉터리src
      • main.ts CDK 스택을 인스턴스화하는 애플리케이션 진입점
      • 디렉터리stacks CDK 스택 정의
        • application-stack.ts 메인 애플리케이션 스택
    • cdk.json CDK 설정 파일
    • project.json 프로젝트 설정 및 빌드 타겟

    src/stacks/application-stack.ts 파일 내에서 CDK 인프라 작성을 시작할 수 있습니다. 예시:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Bucket } from 'aws-cdk-lib/aws-s3'
    import { Construct } from 'constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // 인프라 리소스 선언
    new Bucket(this, 'MyBucket');
    }
    }

    tRPC API 또는 FastAPI 생성기를 사용하여 API를 생성한 경우, packages/common/constructs에 배포를 위한 구문(structures)이 이미 존재합니다.

    예를 들어 my-api라는 tRPC API를 생성한 경우, 구문을 임포트하고 인스턴스화하여 필요한 모든 인프라를 추가할 수 있습니다:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // API 인프라 추가
    new MyApi(this, 'MyApi');
    }
    }

    CloudScape 웹사이트 생성기를 사용한 경우, packages/common/constructs에 배포용 구문이 존재합니다. 예시:

    src/stacks/application-stack.ts
    import * as cdk from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite } from ':my-scope/common-constructs';
    export class ApplicationStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    // 웹사이트 인프라 추가
    new MyWebsite(this, 'MyWebsite');
    }
    }

    웹사이트 런타임 설정에 모든 API 설정이 포함되도록 하려면 API 구문을 선언한 후에 웹사이트를 선언해야 합니다.

    build 타겟의 일부로 기본 컴파일, 린트 및 테스트 타겟을 실행하는 동시에 인프라 프로젝트를 CloudFormation으로 _신서사이즈_합니다. 이는 synth 타겟을 실행하여 독립적으로 수행할 수도 있습니다:

    Terminal window
    pnpm nx run <my-infra>:synth

    신서사이즈된 클라우드 어셈블리는 루트 dist 폴더의 dist/packages/<my-infra-project>/cdk.out에서 확인할 수 있습니다.

    CDK 애플리케이션을 AWS 계정에 처음 배포할 때는 부트스트랩이 필요합니다.

    먼저 AWS 계정 자격 증명을 설정했는지 확인하세요.

    다음으로 cdk bootstrap 명령을 사용합니다:

    Terminal window
    npx cdk bootstrap aws://<account-id>/<region>

    자세한 내용은 CDK 문서를 참조하세요.

    빌드 후 deploy 타겟을 사용하여 인프라를 AWS에 배포할 수 있습니다.

    먼저 AWS 계정 자격 증명을 설정했는지 확인하세요.

    그 다음 deploy 타겟을 실행합니다:

    Terminal window
    pnpm nx run <my-infra>:deploy --all

    CI/CD 파이프라인의 일부로 AWS에 배포할 경우 deploy-ci 타겟을 사용하세요.

    Terminal window
    pnpm nx run <my-infra>:deploy-ci my-stack

    이 타겟은 일반 deploy 타겟과 달리 사전 신서사이즈된 클라우드 어셈블리를 배포하도록 보장합니다. 이를 통해 패키지 버전 변경으로 인한 비결정적 동작 문제를 방지하고 모든 파이프라인 단계에서 동일한 클라우드 어셈블리를 사용하여 배포할 수 있습니다.

    CDK에 대한 자세한 내용은 CDK 개발자 가이드API 레퍼런스를 참조하세요.