CDK - EKS Cluster
By Bys on August 30, 2023
CDK
CDK란 AWS Cloud Development Kit로 소스코드 개발을 통해 CloudFormation을 배포하고 AWS리소스를 관리할 수 있다.
1. CDK 시작하기
# Init
project_name=eks-test
cd ~/workspace/cdk
mkdir $project_name
cd $project_name
cdk init --language typescript
커맨드를 수행하고 나면 bin, lib 등의 폴더 및 파일들이 생성된다.
- bin 폴더에는 $project_name.ts 파일이 생성된다. 일반적으로 이 곳에는 환경변수 등을 설정한다.
- lib 폴더에는 eks-test-stack.ts 파일이 생성된다. 일반적으로 이 곳에서 생성할 리소스를 정의한다.
AWS에서는 CDK에 필요한 여러 모듈을 기본적으로 제공해주고 있다. EKS같은 경우 aws-cdk-lib.aws_eks module를 통해 생성할 수 있으며 다양한 기본 샘플을 제공한다.
이러한 Lib를 추가하여 쉽게 AWS 리소스를 배포할 수 있으며 다음 장에서 실제 샘플 소스코드를 배포하는 방법을 확인한다.
2. CDK 소스 수정
- bin
- bin폴더에는 ${project_name}.ts 파일이 생성된다. 일반적으로 이 곳에는 환경변수 등을 설정한다.
import 'source-map-support/register'; import * as cdk from 'aws-cdk-lib'; import { EksTestStack } from '../lib/eks-test-stack'; const app = new cdk.App(); new EksTestStack(app, 'EksTestStack', { /* 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: '11111222223', region: 'ap-southeast-2' }, /* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */ });
- bin폴더에는 ${project_name}.ts 파일이 생성된다. 일반적으로 이 곳에는 환경변수 등을 설정한다.
- lib
- lib폴더에는 ${project_name}-stack.ts 파일이 생성된다. 일반적으로 이 곳에서 생성할 리소스를 정의한다.
import * as cdk from 'aws-cdk-lib'; //import * as iam from 'aws-cdk-lib/aws-iam'; import * as eks from 'aws-cdk-lib/aws-eks'; //import * as ec2 from 'aws-cdk-lib/aws-ec2'; //import * as lambda from 'aws-cdk-lib/aws-lambda'; import { KubectlV27Layer } from '@aws-cdk/lambda-layer-kubectl-v27'; import { Construct } from 'constructs'; // import * as sqs from 'aws-cdk-lib/aws-sqs'; export class EksTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const cluster = new eks.Cluster(this, 'test-eks', { version: eks.KubernetesVersion.V1_27, kubectlLayer: new KubectlV27Layer(this, 'kubectl'), albController: { version: eks.AlbControllerVersion.V2_5_1, // policy: document, //policy 추가 }, }); } }
- lib폴더에는 ${project_name}-stack.ts 파일이 생성된다. 일반적으로 이 곳에서 생성할 리소스를 정의한다.
- package.json
@aws-cdk/lambda-layer-kubectl-v27 다음 모듈을 package.json에 추가해주어야 한다."dependencies": { "@aws-cdk/lambda-layer-kubectl-v27": "^2.0.0", "aws-cdk-lib": "2.91.0", "constructs": "^10.0.0", "source-map-support": "^0.5.21" }
3. 배포하기
# Install dependencies in package.json
$ npm install
$ npm run build
$ cdk deploy
✨ Synthesis time: 2.5s
......
Do you wish to deploy these changes (y/n)? y
EksTestStack: deploying... [1/1]
EksTestStack: creating CloudFormation changeset...
✅ EksTestStack
✨ Deployment time: 966.01s
Stack ARN:
arn:aws:cloudformation:ap-southeast-2:558846430793:stack/EksTestStack/3e1292f0-4704-11ee-bcb5-025affa237e8
✨ Total time: 968.5s
이렇게 배포를 진행하게 되면 CloudFormation 스택을 생성하게 되며 CloudFormation을 통해 AWS 리소스를 배포하게 된다.
- References
[1] https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_eks-readme.html
aws
cloud
eks
cdk
]