1. CDK Cli 설치 및 CDK bootstrap
AWS CDK CLI를 설치하려면 먼저 Node Package Manager(NPM)가 설치되어 있어야 합니다.
# npm으로 aws-cdk 설치
npm install -g aws-cdk
# 성공적으로 설치 되었는지 확인
cdk --version
# > 2.20.0 (build 738ef49)
배포하게 될 대개의 AWS CDK 스택들은 스택과 함께 배포되는 외부 파일(예: AWS Lambda 함수나 Docker 이미지) 등의 자산을 포함하고 있습니다. CDK는 이를 Amazon S3 버킷 또는 기타 컨테이너에 업로드하여 배포 중에 AWS CloudFormation에서 사용할 수 있게 합니다. 배포하려면 이러한 컨테이너가 AWS 계정 및 배포하려는 리전에 이미 존재해야 합니다. 이러한 컨테이너를 생성하는 작업을 부트스트래핑이라고 합니다. AWS 계정(및 해당 리전)을 부트스트랩하려면 다음을 실행합니다.
cdk bootstrap
# Output
⏳ Bootstrapping environment aws://123456789012/us-east-1...
CDKToolkit: creating CloudFormation changeset...
✅ Environment aws://328159166015/us-west-2 bootstrapped.
부트스트랩을 실행하고 나면 AWS 계정의 Cloudformation 서비스에서 CDKToolKit이라는 스택을 확인할 수 있습니다.
이는 aws 리소스 배포에 필요한 S3 버킷, IAM, ECR 등을 포함합니다.
부트스트랩으로 생성된 리소스를 확인하려면 Cloudformation > CDK ToolKit > '리소스' 탭을 보면 됩니다.
❗ 이 때 생성된 리소스를 임의로 지우면 cdk 기반의 deploy가 정상적으로 진행되지 않습니다!
관련 리소스를 확인해보시고 절대 지우지 마시고..
혹시 지우셨다면 관련 리소스를 아예 다 지운다음에 새로 cdk deploy를 해야 합니다.
2. AWS Configure
로컬 PC에서 aws리소스에 접근하기 위해서 필요한 절차입니다.
AWS 콘솔에서 사용자를 추가해주세요
IAM > 액세스관리 > 사용자 > '사용자 추가'
AWS 자격 증명 유형 : 액세스키 - 프로그래밍 방식 엑세스
권한설정 : Administrator Access
[1]
[2]
[3]
이렇게 발급받은 액세스 키 ID와 비밀 엑세스 키를 local pc에 등록해줍니다.
로컬 터미널 창에서 aws configure 명령을 입력 후 정보를 등록해주세요.
$ aws configure
AWS Access Key ID : [발급받은 Access key id 입력]
AWS Secret Access Key : [발급받은 Access key pw 입력]
Default region name [None]: ap-northeast-2
Default output format [None]: json
3. CDK 프로젝트 생성하기
CDK프로젝트를 만들 새로운 디렉토리를 생성해줍니다.
디렉토리 이름은 cdk-pardon으로 하였습니다. (지금 생성한 디렉토리 이름과 동일한 이름의 CDK프로젝트가 생성됩니다.)
CDK 는 다양한 언어를 지원하는데 typescript 기반으로 생성하겠습니다.
mkdir cdk-pardon
cd cdk-pardon
cdk init --language typescript
이런 파일 구조로 cdk 프로젝트가 생성됩니다.
- bin/cdk-project.ts - CDK 애플리케이션에 대한 진입 포인트입니다. lib/* 하위에 정의한 모든 스택을 로드/생성합니다.
- lib/cdk-project-stack.ts - 주요 CDK 애플리케이션이 정의되는 지점입니다. 리소스 및 그 속성이 여기로 이동할 수 있습니다.
- package.json - 프로젝트 종속 파일, 그리고 일부 추가 정보를 정의하고 스크립트를 구축하는 지점입니다(npm build, npm test, npm watch).
- cdk.json - 이 파일은 애플리케이션은 물론 CDK 및 프로젝트에 관련된 일부 추가 설정 및 파라미터를 실행하는 방법에 대한 도구 키트를 알려줍니다.
코드 작성의 시작점은 lib/cdk-project-stack.ts 파일입니다.
4. 디폴트 코드 수정(lib/cdk-project.ts, lib/cdk-project-stack.ts)
lib/cdk-project.ts, lib/cdk-project-stack.ts 의 코드를 모두 삭제하고 아래 코드로 바꿔줍니다.
// bin/cdk-project.ts
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { Cdk2PardonStack } from '../lib/cdk2-pardon-stack';
const app = new cdk.App();
new Cdk2PardonStack(app, 'Cdk2PardonStack', {
/* If you don't specify 'env', this stack will be environment-agnostic.
* Account/Region-dependent features and context lookups will not work,
* but a single synthesized template can be deployed anywhere. */
/* Uncomment the next line to specialize this stack for the AWS Account
* and Region that are implied by the current CLI configuration. */
// env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
/* Uncomment the next line if you know exactly what Account and Region you
* want to deploy the stack to. */
// env: { account: '123456789012', region: 'us-east-1' },
/* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */
});
app.synth();
// lib/cdk-project-stack.ts
import { App, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
export class Cdk2PardonStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
}
}
❗ this 를 넘겨줄 때 나는 에러 해결
Argument of type 'this' is not assignable to parameter of type 'Construct'.
라는 에러메시지와 함께 this에 빨간줄이 그어지는 경우가 있습니다.
이럴 땐 리소스를 리소스 임포트를
와 같이 'aws-cdk-lib/' 에서 했는지 확인해보세요.
이렇게 '@aws-cdk/' 에서 리소스를 임포트 하면 버전 오류가 나서 this가 정상적으로 전달되지 않습니다.
4. S3, dynamoDB생성
일단은 각 리소스에 대한 별다른 세팅 없이 생성을 확인해보겠습니다.
lib/cdk-project-stack.ts 를 아래와 같이 작성해줍니다.
import { App, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class CdkPardonStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// dynamoDB 생성
const table = new dynamodb.Table(this, 'PrdPardonDdbMain', {
tableName: 'PrdPardonDdbMain',
partitionKey: { name: 'pk', type: dynamodb.AttributeType.STRING },
});
// 버킷 생성
const bucket = new s3.Bucket(this, 'prd-pardon-main', {
bucketName: 'prd-pardon-main'
});
}
}
이렇게 작성한 리소스 스택을 aws상에 배포하려면 aws deploy명령어를 실행합니다.
cdk deploy
AWS 콘솔에 가보면 리소스들이 정상적으로 생성된 것을 확인할 수 있습니다.
참고)
AWS AWS Cloud Development Kit(CDK) 설치
https://aws.amazon.com/ko/getting-started/guides/setup-cdk/module-two/
CDK 프로젝트 생성
https://aws.amazon.com/ko/getting-started/guides/setup-cdk/module-three/
Argument of type 'this' is not assignable to parameter of type 'Construct'. 이슈 관련
'개발 > AWS' 카테고리의 다른 글
Docker로 Lambda 이미지 만들어 배포하기 (0) | 2023.03.19 |
---|---|
[AWS] S3 정적 호스팅을 CloudFront에 연결하기, https 설정, 가비아 도메인 연결 (0) | 2022.10.22 |
[AWS] 컨테이너 기반 Lambda 생성하기, Lambda에서 S3업로드 (0) | 2022.04.23 |
[AWS] Lamda + API Gateway 시작하기 | GET, Query String 전달, json.dumps 한글 깨짐 해결 (0) | 2022.03.29 |
[AWS] AWS CDK 시작하기 (1) | Javascript, AWS Configure, CDK Init, CDK deploy, lambda, api gateway (0) | 2022.03.12 |