SlideShare a Scribd company logo
코드 기반 인프라(IaC)를 활용한
현대 애플리케이션 개발 가속화,
우리도 할 수 있어요
김필중, 솔루션즈 아키텍트, AWS
왜 코드 기반 인프라일까요?
빠른 혁신을 가능
현대 애플리케이션 개발 방식
Cloud-native
- AWS
현대 애플리케이션 개발 방식
Re-host
Re-platform
Re-factor
Re-invent
방식 별 활용 가능 서비스
Re-host Re-platform
Re-factor Re-invent
반복, 반복, 반복
피드백아이디어
실험
혁신
플라이 휠
자동화
인프라 구성 자동화
서비스에 필요한 리소스 구성
애플리케이션 배포 자동화
애플리케이션을 더 효율적이고, 안전하며, 빠르게 배포
애플리케이션을 빌드, 테스트, 배포
코드 기반 인프라의 목적
• 인프라 변경 사항을 반복적이고 예측 가능하게 함
• 코드 변경과 동일한 도구를 사용하여 인프라 변경 사항 릴리즈
• 스테이징 환경에서 프로덕션 환경으로 복제하여 지속적인 테스트를
가능하게 함
코드 기반 인프라 구성 프로세스
디자인 스택 생성 반복
앱 코드
작성
인프라
템플릿 작성
AWS CloudFormation
클라우드 인프라 템플릿을 정의하기 위한 언어
- JSON 및 YAML 지원
AWS 리소스 프로비저닝
CI/CD, 개발, 관리 도구와 통합AWS CloudFormation
AWS Cloud Development Kit (AWS CDK)
재사용 가능한 구성 요소로 클라우드 인프라를 모델링하기 위한 다양한 언어를 지원
하는 프레임워크
AWS CloudFormation
AWS Cloud Development Kit (AWS CDK)
AWS CDK 앱에서부터 인프라가 구성될 때까지의 흐름
AWS Cloud Development Kit (AWS CDK)
AWS Construct Library
Framework CLI
CDK Application
Stack(s)
ConstructConstruct
Core Framework AWS CDK CLI
Serverless
Containers CI/CD
Application Integration / Foundational
Autoscaling
메인 구성요소
무엇이든 직접 보는게 최고입니다.
2016년에 만들어 공유해 두었던 서버리스로 제작한
Pastebin의 인프라 및 애플리케이션 배포를 자동화 해보
겠습니다.
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
https://github.com/kpiljoong/aws-devday-iac-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
Pastebin 아키텍처
CDK 초기화
CDK 앱 구조
https://docs.aws.amazon.com/cdk/api/latest/docs/aws-construct-library.html
CDK 레퍼런스 참고
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
데이터 저장소
DynamoDB 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"source-map-support": "^0.5.9"
}
DynamoDB 모듈 레퍼런스 참고
테이블 생성 코드 작성
import ddb = require('@aws-cdk/aws-dynamodb');
const table = new ddb.Table(this, "Data", {
partitionKey: {
name: "pid",
type: ddb.AttributeType.STRING
}
});
CDK 앱 배포
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
비지니스 로직
Lambda 함수 추가
exports.handler = async (event) => {
const queryParams = event.queryStringParameters;
const pathParams = event.pathParameters;
let res = {};
if (queryParams != null) {
let key = …;
let content = …;
res = putItem(key, content);
} else if (pathParams != null) {
let pid = …;
res = getItem(pid);
} else {
res = …; // error response
}
return res;
};
Lambda 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"@aws-cdk/aws-lambda": "^1.9.0",
"source-map-support": "^0.5.9"
}
Lambda 함수 추가 코드 작성
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, "backend", {
runtime: lambda.Runtime.NODEJS_8_10,
handler: "handler.handler",
code: lambda.Code.fromAsset('./lambda')
});
CDK 앱 배포
Lambda 함수 DDB 관련 권한 부여
import lambda = require('@aws-cdk/aws-lambda');
const fn = new lambda.Function(this, "backend", {
runtime: lambda.Runtime.NODEJS_8_10,
handler: ”index.handler",
code: lambda.Code.fromAsset('./lambda')
});
table.grantReadWriteData(fn);
fn.addEnvironment("TABLE_NAME", table.tableName);
CDK 앱 변경사항 확인
PastebinStack
https://github.com/kpiljoong/aws-serverless-pastebin
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
API 게이트웨이
API Gateway 모듈 추가
"dependencies": {
"@aws-cdk/core": "^1.9.0",
"@aws-cdk/aws-dynamodb": "^1.9.0",
"@aws-cdk/aws-lambda": "^1.9.0",
"@aws-cdk/aws-apigateway": "^1.9.0",
"source-map-support": "^0.5.9"
}
API Gateway RestAPI 코드 작성
import apigw = require('@aws-cdk/aws-apigateway');
const api = new apigw.LambdaRestApi(this, "api", {
handler: fn
});
CDK 앱 배포
Pastebin 동작 확인 테스트
https://API_GATEWAY_ENDPOINT/prod/?content=AWS DevDay 2019!
{"data":"HfkyONDS6C"}
요청
응답
https://API_GATEWAY_ENDPOINT/prod/HfkyONDS6C
{"data":"DevDay"}
요청
응답
읽기
등록
코드 기반 인프라 구성 방법 다시 보기
• AWS CDK CLI 워크플로
• init, diff à synth à deploy
• AWS Constructs 라이브러리
• API 레퍼런스 참고
• 권한 부여
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
잠깐! 아직 생각이 많으시다고요?
아직 비지니스 로직이 포함된 서비스에 도입하기에는 생각이 많으시다고요?
그러면 이건 어떨까요?
서비스가 잘 동작하는지 부하 테스트를 해보는 것이죠!
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
콘텐츠 생성
콘텐츠 요청
AWS CDK App
콘텐츠 생성:
HTTP GET ?content=
콘텐츠 요청:
HTTP GET /<hash>
LoaderStack
Loader가 추가된 아키텍처
트래픽 생성 스크립트
#!/bin/sh
while true; do
curl -i $URL
sleep 1
done
Dockerfile 생성
FROM alpine
RUN apk add curl
ADD load.sh ./load.sh
CMD [ "/bin/sh", "/load.sh" ]
Docker 동작 테스트
Loader Construct 작성
export class Loader extends cdk.Construct {
constructor(scope: cdk.Construct, id: string, url: string, tps: number) {
super(scope, id);
const cluster = new ecs.Cluster(this, 'Cluster');
const taskDef = new ecs.FargateTaskDefinition(this, "LoaderTask");
taskDef.addContainer("Loader", {
image: ecs.ContainerImage.fromAsset('./loader'),
environment: {
'URL': url
}
});
const fargate = new ecs.FargateService(this, "Fargate", {
cluster: cluster,
taskDefinition: taskDef,
desiredCount: tps
});
}
}
Loader Stack 작성
export class LoaderStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const url = "https://73m6x99c10.execute-api.ap-northeast-
1.amazonaws.com/prod/2XduFsd1mw";
new Loader(this, "Loader", url, 10);
}
}
App 수정
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { PastebinStack, LoaderStack } from '../lib/pastebin-stack';
const app = new cdk.App();
new PastebinStack(app, 'PastebinStack');
new LoaderStack(app, 'TestLoaderStack');
모니터링 Construct 추가
Watchful 코드 추가
import { Watchful } from 'cdk-watchful’
export class PastebinStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
…
const wf = new Watchful(this, "Monitoring");
wf.watchScope(this);
}
}
CloudWatch 대시보드
Loader가 추가된 아키텍처 다시 보기
• Load 생성
• AWS Fargate로 규모에
상관없이!
• 재사용 가능한 Construct 직접 작성
• API, 인캡슐레이션
• 모니터링
• 공개된 construct
라이브러리를 활용
• ”Cloud in a Library”
• jsii
PastebinStack
Amazon API Gateway AWS Lambda Amazon DynamoDB
AWS CDK App
LoaderStack
https://github.com/aws/jsii
직접 확인하는 Pastebin 자동화
https://github.com/kpiljoong/aws-devday2019-iac-demo
클릭스트림 데이터 적재 사례
AWS CDK App
PipelineStack
AWS CodeCommit AWS CodeBuild AWS CloudFormation
코드 체크인
AWS CodePipeline
StreamAppStack
Amazon Kinesis
Data Streams
클릭스트림
AWS Lambda Amazon DynamoDB
Source
Source
CodeCommit
Build
CdkCodeBuild
CodeBuild
LambdaCodeBuild
CodeBuild
Deploy
DevEnvDeploy
CloudFormation
Approval
Manual Approval
Review
Deploy
ProdEnvDeploy
CloudFormation
• Dev 환경 배포와 마찬가지로 Prod 환경에 실제
애플리케이션 배포
• 승인을 기다림
• CDK 앱으로 부터 생성된 StreamAppStack의
템플릿을 배포
• Lambda 함수 코드는 앞서 LambdaCodeBuild
프로젝트에 의해 생성된 패키지 파일의 위치를 전달
• 두개의 CodeBuild 프로젝트를 사용
• CdkCodeBuild 프로젝트는 CDK 앱을 synthesize하여
CloudFormation 템플릿을 생성
• LambdaCodeBuild 프로젝트는 Lambda 함수 코드의
테스트, 빌드 작업을 수행
• CDK 앱과 Lambda 함수 코드는 동일한 리포지토리에
저장
아하! 어디서든 가능한 자동화
어디부터 자동화를 해야하는지 모르겠다고요? 고민이 많다고요?
자동화는 어디서든 가능합니다.
하나의 스택을 해도 좋고, 하나의 레이어를 해도 좋아요.
스택, 레이어 내에서도 하나의 컴포넌트, 심지어 하나의 리소스도 충분합니
다.
아하! 도구 선택은 편한 걸로
도구는 편한 게 최고입니다. 당장 사용하여 원하는 결과를 얻어야 하니까요.
새로운 도구를 학습하는 시간과 가지고 계신 기술력을 활용할 수 있는 것,
고민해보세요!
다른 팀원과 편한 방법 및 도구가 다른가요?
각자 편한 걸 사용하세요. 대신 표준 프로토콜을 지원하는 걸 사용하고, 표
준 프로토콜을 통해 서로 통신하세요.
아하! 배포 환경은 동일하게
로컬 환경은 개발자 ’본인’만을 위한 것입니다.
로컬에서 충분히 테스트한 후 구성 및 배포 전용 환경을 구성하여 사용하
세요.
컨테이너도 좋고 AWS Cloud9과 같은 클라우드 IDE도 좋은 선택입니다.
아하! 적은 AWS 서비스와 의존성은
인프라 자동화는 AWS 서비스에 대해 깊은 이해를 요구하지 않습니다.
특히, CDK를 사용하시면 이미 모범 사례를 기반으로 하는 라이브러리가 준
비되어 있어 더욱 더 손 쉽게 Well-Architecture를 구성할 수 있습니다.
참고 자료
https://aws.amazon.com/cdk
https://docs.aws.amazon.com/cdk/latest/guide/examples.html
https://github.com/aws/aws-cdk
https://gitter.im/awslabs/aws-cdk
@PiljoongKim
#AWSDEVDAYSEOUL

More Related Content

What's hot

금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
Amazon Web Services Korea
 
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018 AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
Amazon Web Services Korea
 
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
Amazon Web Services Korea
 

What's hot (20)

IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
IaC로 AWS인프라 관리하기 - 이진성 (AUSG) :: AWS Community Day Online 2021
 
AWS 상의 컨테이너 서비스 소개 ECS, EKS - 이종립 / Principle Enterprise Evangelist @베스핀글로벌
AWS 상의 컨테이너 서비스 소개 ECS, EKS - 이종립 / Principle Enterprise Evangelist @베스핀글로벌AWS 상의 컨테이너 서비스 소개 ECS, EKS - 이종립 / Principle Enterprise Evangelist @베스핀글로벌
AWS 상의 컨테이너 서비스 소개 ECS, EKS - 이종립 / Principle Enterprise Evangelist @베스핀글로벌
 
CI/CD on AWS
CI/CD on AWSCI/CD on AWS
CI/CD on AWS
 
[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...
[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...
[Games on AWS 2019] AWS 입문자를 위한 초단기 레벨업 트랙 | AWS 레벨업 하기! : 네트워크 - 권신중 AWS 솔루션...
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
[2017 Windows on AWS] AWS 를 활용한 Active Directory 연동 및 이관 방안
[2017 Windows on AWS] AWS 를 활용한 Active Directory 연동 및 이관 방안[2017 Windows on AWS] AWS 를 활용한 Active Directory 연동 및 이관 방안
[2017 Windows on AWS] AWS 를 활용한 Active Directory 연동 및 이관 방안
 
AWS Builders - Industry Edition: DevSecOps on AWS - 시작은 IAM 부터
AWS Builders - Industry Edition: DevSecOps on AWS - 시작은 IAM 부터AWS Builders - Industry Edition: DevSecOps on AWS - 시작은 IAM 부터
AWS Builders - Industry Edition: DevSecOps on AWS - 시작은 IAM 부터
 
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
금융권 최신 AWS 도입 사례 총정리 – 신한 제주 은행, KB손해보험 사례를 중심으로 - 지성국 사업 개발 담당 이사, AWS / 정을용...
 
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트::  AWS S...
AWS 관리형 서비스를 활용하여 Kubernetes 를 위한 Devops 환경 구축하기 - 김광영, AWS솔루션즈 아키텍트:: AWS S...
 
마이크로 서비스를 위한 AWS Cloud Map & App Mesh - Saeho Kim (AWS Solutions Architect)
마이크로 서비스를 위한 AWS Cloud Map & App Mesh - Saeho Kim (AWS Solutions Architect)마이크로 서비스를 위한 AWS Cloud Map & App Mesh - Saeho Kim (AWS Solutions Architect)
마이크로 서비스를 위한 AWS Cloud Map & App Mesh - Saeho Kim (AWS Solutions Architect)
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
 
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
IAM 정책을 잘 알아야 AWS 보안도 쉬워진다. 이것은 꼭 알고 가자! - 신은수 솔루션즈 아키텍트, AWS :: AWS Summit S...
 
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
AWS Transit Gateway를 통한 Multi-VPC 아키텍처 패턴 - 강동환 솔루션즈 아키텍트, AWS :: AWS Summit ...
 
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
 
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
AWS를 위한 도커, 컨테이너 (이미지) 환경 보안 방안 - 양희선 부장, TrendMicro :: AWS Summit Seoul 2019
 
Amazon EC2 제대로 사용하기(김상필) - AWS 웨비나 시리즈 2015
Amazon EC2 제대로 사용하기(김상필) - AWS 웨비나 시리즈 2015Amazon EC2 제대로 사용하기(김상필) - AWS 웨비나 시리즈 2015
Amazon EC2 제대로 사용하기(김상필) - AWS 웨비나 시리즈 2015
 
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
 
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018 AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
AWS 기반 Kubernetes 정복하기::정영준:: AWS Summit Seoul 2018
 
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
Kubernetes/ EKS - 김광영 (AWS 솔루션즈 아키텍트)
 
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
AWS CLOUD 2017 - AWS Shield를 통한 DDoS 대비 복원성 강한 AWS 보안 아키텍처 구성 (임기성 솔루션즈 아키텍트)
 

Similar to [AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중 AWS 솔루션즈 아키텍트

AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
Amazon Web Services Korea
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
Dae Kim
 

Similar to [AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중 AWS 솔루션즈 아키텍트 (20)

클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
 
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
판교 개발자 데이 – Aws가 제안하는 서버리스 아키텍처 – 김필중
 
AWS DevOps와 ECR을 통한 Elastic Beanstalk 배포 환경 구축 및 타 환경과의 비교
AWS DevOps와 ECR을 통한 Elastic Beanstalk 배포 환경 구축 및 타 환경과의 비교AWS DevOps와 ECR을 통한 Elastic Beanstalk 배포 환경 구축 및 타 환경과의 비교
AWS DevOps와 ECR을 통한 Elastic Beanstalk 배포 환경 구축 및 타 환경과의 비교
 
Amazed by aws 2nd session
Amazed by aws 2nd sessionAmazed by aws 2nd session
Amazed by aws 2nd session
 
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
 
컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기 - 김필중 솔루션즈 아키텍트, AWS / 강승욱 솔루션즈 아키텍트, AWS :: A...
컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기 - 김필중 솔루션즈 아키텍트, AWS / 강승욱 솔루션즈 아키텍트, AWS :: A...컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기 - 김필중 솔루션즈 아키텍트, AWS / 강승욱 솔루션즈 아키텍트, AWS :: A...
컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기 - 김필중 솔루션즈 아키텍트, AWS / 강승욱 솔루션즈 아키텍트, AWS :: A...
 
AWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdfAWS Meetup 프리젠테이션.pdf
AWS Meetup 프리젠테이션.pdf
 
introduction of IaC using CloudFormation
introduction of IaC using CloudFormationintroduction of IaC using CloudFormation
introduction of IaC using CloudFormation
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
 
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
AWS Amplify, AppSync를 이용한 모던 어플리케이션 개발
 
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
AWS Fargate와 Amazon ECS를 사용한 CI/CD 베스트 프랙티스 - 유재석, AWS 솔루션즈 아키텍트 :: AWS Build...
 
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
AWS Lambda 100% 활용하기 :: 김상필 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Aws serverless services
Aws serverless servicesAws serverless services
Aws serverless services
 
AWS Cloud 환경으로​ DB Migration 전략 수립하기
AWS Cloud 환경으로​ DB Migration 전략 수립하기AWS Cloud 환경으로​ DB Migration 전략 수립하기
AWS Cloud 환경으로​ DB Migration 전략 수립하기
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
AWS CDK
AWS CDKAWS CDK
AWS CDK
 
[웨비나] 다중 AWS 계정에서의 CI/CD 구축
[웨비나] 다중 AWS 계정에서의 CI/CD 구축[웨비나] 다중 AWS 계정에서의 CI/CD 구축
[웨비나] 다중 AWS 계정에서의 CI/CD 구축
 
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
AWS re:Invent 특집(1) – 파이선(Python) 개발자를 위한 AWS 활용 방법 (윤석찬)
 
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나 DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
 

More from Amazon Web Services Korea

More from Amazon Web Services Korea (20)

AWS Modern Infra with Storage Roadshow 2023 - Day 2
AWS Modern Infra with Storage Roadshow 2023 - Day 2AWS Modern Infra with Storage Roadshow 2023 - Day 2
AWS Modern Infra with Storage Roadshow 2023 - Day 2
 
AWS Modern Infra with Storage Roadshow 2023 - Day 1
AWS Modern Infra with Storage Roadshow 2023 - Day 1AWS Modern Infra with Storage Roadshow 2023 - Day 1
AWS Modern Infra with Storage Roadshow 2023 - Day 1
 
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
사례로 알아보는 Database Migration Service : 데이터베이스 및 데이터 이관, 통합, 분리, 분석의 도구 - 발표자: ...
 
Amazon DocumentDB - Architecture 및 Best Practice (Level 200) - 발표자: 장동훈, Sr. ...
Amazon DocumentDB - Architecture 및 Best Practice (Level 200) - 발표자: 장동훈, Sr. ...Amazon DocumentDB - Architecture 및 Best Practice (Level 200) - 발표자: 장동훈, Sr. ...
Amazon DocumentDB - Architecture 및 Best Practice (Level 200) - 발표자: 장동훈, Sr. ...
 
Amazon Elasticache - Fully managed, Redis & Memcached Compatible Service (Lev...
Amazon Elasticache - Fully managed, Redis & Memcached Compatible Service (Lev...Amazon Elasticache - Fully managed, Redis & Memcached Compatible Service (Lev...
Amazon Elasticache - Fully managed, Redis & Memcached Compatible Service (Lev...
 
Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...
Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...
Internal Architecture of Amazon Aurora (Level 400) - 발표자: 정달영, APAC RDS Speci...
 
[Keynote] 슬기로운 AWS 데이터베이스 선택하기 - 발표자: 강민석, Korea Database SA Manager, WWSO, A...
[Keynote] 슬기로운 AWS 데이터베이스 선택하기 - 발표자: 강민석, Korea Database SA Manager, WWSO, A...[Keynote] 슬기로운 AWS 데이터베이스 선택하기 - 발표자: 강민석, Korea Database SA Manager, WWSO, A...
[Keynote] 슬기로운 AWS 데이터베이스 선택하기 - 발표자: 강민석, Korea Database SA Manager, WWSO, A...
 
Demystify Streaming on AWS - 발표자: 이종혁, Sr Analytics Specialist, WWSO, AWS :::...
Demystify Streaming on AWS - 발표자: 이종혁, Sr Analytics Specialist, WWSO, AWS :::...Demystify Streaming on AWS - 발표자: 이종혁, Sr Analytics Specialist, WWSO, AWS :::...
Demystify Streaming on AWS - 발표자: 이종혁, Sr Analytics Specialist, WWSO, AWS :::...
 
Amazon EMR - Enhancements on Cost/Performance, Serverless - 발표자: 김기영, Sr Anal...
Amazon EMR - Enhancements on Cost/Performance, Serverless - 발표자: 김기영, Sr Anal...Amazon EMR - Enhancements on Cost/Performance, Serverless - 발표자: 김기영, Sr Anal...
Amazon EMR - Enhancements on Cost/Performance, Serverless - 발표자: 김기영, Sr Anal...
 
Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...
Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...
Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...
 
Enabling Agility with Data Governance - 발표자: 김성연, Analytics Specialist, WWSO,...
Enabling Agility with Data Governance - 발표자: 김성연, Analytics Specialist, WWSO,...Enabling Agility with Data Governance - 발표자: 김성연, Analytics Specialist, WWSO,...
Enabling Agility with Data Governance - 발표자: 김성연, Analytics Specialist, WWSO,...
 
Amazon Redshift Deep Dive - Serverless, Streaming, ML, Auto Copy (New feature...
Amazon Redshift Deep Dive - Serverless, Streaming, ML, Auto Copy (New feature...Amazon Redshift Deep Dive - Serverless, Streaming, ML, Auto Copy (New feature...
Amazon Redshift Deep Dive - Serverless, Streaming, ML, Auto Copy (New feature...
 
From Insights to Action, How to build and maintain a Data Driven Organization...
From Insights to Action, How to build and maintain a Data Driven Organization...From Insights to Action, How to build and maintain a Data Driven Organization...
From Insights to Action, How to build and maintain a Data Driven Organization...
 
[Keynote] Accelerating Business Outcomes with AWS Data - 발표자: Saeed Gharadagh...
[Keynote] Accelerating Business Outcomes with AWS Data - 발표자: Saeed Gharadagh...[Keynote] Accelerating Business Outcomes with AWS Data - 발표자: Saeed Gharadagh...
[Keynote] Accelerating Business Outcomes with AWS Data - 발표자: Saeed Gharadagh...
 
Amazon DynamoDB - Use Cases and Cost Optimization - 발표자: 이혁, DynamoDB Special...
Amazon DynamoDB - Use Cases and Cost Optimization - 발표자: 이혁, DynamoDB Special...Amazon DynamoDB - Use Cases and Cost Optimization - 발표자: 이혁, DynamoDB Special...
Amazon DynamoDB - Use Cases and Cost Optimization - 발표자: 이혁, DynamoDB Special...
 
LG전자 - Amazon Aurora 및 RDS 블루/그린 배포를 이용한 데이터베이스 업그레이드 안정성 확보 - 발표자: 이은경 책임, L...
LG전자 - Amazon Aurora 및 RDS 블루/그린 배포를 이용한 데이터베이스 업그레이드 안정성 확보 - 발표자: 이은경 책임, L...LG전자 - Amazon Aurora 및 RDS 블루/그린 배포를 이용한 데이터베이스 업그레이드 안정성 확보 - 발표자: 이은경 책임, L...
LG전자 - Amazon Aurora 및 RDS 블루/그린 배포를 이용한 데이터베이스 업그레이드 안정성 확보 - 발표자: 이은경 책임, L...
 
KB국민카드 - 클라우드 기반 분석 플랫폼 혁신 여정 - 발표자: 박창용 과장, 데이터전략본부, AI혁신부, KB카드│강병억, Soluti...
KB국민카드 - 클라우드 기반 분석 플랫폼 혁신 여정 - 발표자: 박창용 과장, 데이터전략본부, AI혁신부, KB카드│강병억, Soluti...KB국민카드 - 클라우드 기반 분석 플랫폼 혁신 여정 - 발표자: 박창용 과장, 데이터전략본부, AI혁신부, KB카드│강병억, Soluti...
KB국민카드 - 클라우드 기반 분석 플랫폼 혁신 여정 - 발표자: 박창용 과장, 데이터전략본부, AI혁신부, KB카드│강병억, Soluti...
 
SK Telecom - 망관리 프로젝트 TANGO의 오픈소스 데이터베이스 전환 여정 - 발표자 : 박승전, Project Manager, ...
SK Telecom - 망관리 프로젝트 TANGO의 오픈소스 데이터베이스 전환 여정 - 발표자 : 박승전, Project Manager, ...SK Telecom - 망관리 프로젝트 TANGO의 오픈소스 데이터베이스 전환 여정 - 발표자 : 박승전, Project Manager, ...
SK Telecom - 망관리 프로젝트 TANGO의 오픈소스 데이터베이스 전환 여정 - 발표자 : 박승전, Project Manager, ...
 
코리안리 - 데이터 분석 플랫폼 구축 여정, 그 시작과 과제 - 발표자: 김석기 그룹장, 데이터비즈니스센터, 메가존클라우드 ::: AWS ...
코리안리 - 데이터 분석 플랫폼 구축 여정, 그 시작과 과제 - 발표자: 김석기 그룹장, 데이터비즈니스센터, 메가존클라우드 ::: AWS ...코리안리 - 데이터 분석 플랫폼 구축 여정, 그 시작과 과제 - 발표자: 김석기 그룹장, 데이터비즈니스센터, 메가존클라우드 ::: AWS ...
코리안리 - 데이터 분석 플랫폼 구축 여정, 그 시작과 과제 - 발표자: 김석기 그룹장, 데이터비즈니스센터, 메가존클라우드 ::: AWS ...
 
LG 이노텍 - Amazon Redshift Serverless를 활용한 데이터 분석 플랫폼 혁신 과정 - 발표자: 유재상 선임, LG이노...
LG 이노텍 - Amazon Redshift Serverless를 활용한 데이터 분석 플랫폼 혁신 과정 - 발표자: 유재상 선임, LG이노...LG 이노텍 - Amazon Redshift Serverless를 활용한 데이터 분석 플랫폼 혁신 과정 - 발표자: 유재상 선임, LG이노...
LG 이노텍 - Amazon Redshift Serverless를 활용한 데이터 분석 플랫폼 혁신 과정 - 발표자: 유재상 선임, LG이노...
 

[AWS Dev Day] 앱 현대화 | 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 - 김필중 AWS 솔루션즈 아키텍트

  • 1.
  • 2. 코드 기반 인프라(IaC)를 활용한 현대 애플리케이션 개발 가속화, 우리도 할 수 있어요 김필중, 솔루션즈 아키텍트, AWS
  • 3. 왜 코드 기반 인프라일까요?
  • 4.
  • 6. 현대 애플리케이션 개발 방식 Cloud-native - AWS
  • 7. 현대 애플리케이션 개발 방식 Re-host Re-platform Re-factor Re-invent
  • 8. 방식 별 활용 가능 서비스 Re-host Re-platform Re-factor Re-invent
  • 10. 자동화 인프라 구성 자동화 서비스에 필요한 리소스 구성 애플리케이션 배포 자동화 애플리케이션을 더 효율적이고, 안전하며, 빠르게 배포 애플리케이션을 빌드, 테스트, 배포
  • 11.
  • 12. 코드 기반 인프라의 목적 • 인프라 변경 사항을 반복적이고 예측 가능하게 함 • 코드 변경과 동일한 도구를 사용하여 인프라 변경 사항 릴리즈 • 스테이징 환경에서 프로덕션 환경으로 복제하여 지속적인 테스트를 가능하게 함
  • 13. 코드 기반 인프라 구성 프로세스 디자인 스택 생성 반복 앱 코드 작성 인프라 템플릿 작성
  • 14. AWS CloudFormation 클라우드 인프라 템플릿을 정의하기 위한 언어 - JSON 및 YAML 지원 AWS 리소스 프로비저닝 CI/CD, 개발, 관리 도구와 통합AWS CloudFormation
  • 15. AWS Cloud Development Kit (AWS CDK) 재사용 가능한 구성 요소로 클라우드 인프라를 모델링하기 위한 다양한 언어를 지원 하는 프레임워크 AWS CloudFormation
  • 16. AWS Cloud Development Kit (AWS CDK) AWS CDK 앱에서부터 인프라가 구성될 때까지의 흐름
  • 17. AWS Cloud Development Kit (AWS CDK) AWS Construct Library Framework CLI CDK Application Stack(s) ConstructConstruct Core Framework AWS CDK CLI Serverless Containers CI/CD Application Integration / Foundational Autoscaling 메인 구성요소
  • 18.
  • 19. 무엇이든 직접 보는게 최고입니다. 2016년에 만들어 공유해 두었던 서버리스로 제작한 Pastebin의 인프라 및 애플리케이션 배포를 자동화 해보 겠습니다.
  • 20. PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin https://github.com/kpiljoong/aws-devday-iac-pastebin Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> Pastebin 아키텍처
  • 24. PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> 데이터 저장소
  • 25. DynamoDB 모듈 추가 "dependencies": { "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "source-map-support": "^0.5.9" }
  • 27. 테이블 생성 코드 작성 import ddb = require('@aws-cdk/aws-dynamodb'); const table = new ddb.Table(this, "Data", { partitionKey: { name: "pid", type: ddb.AttributeType.STRING } });
  • 29. PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> 비지니스 로직
  • 30. Lambda 함수 추가 exports.handler = async (event) => { const queryParams = event.queryStringParameters; const pathParams = event.pathParameters; let res = {}; if (queryParams != null) { let key = …; let content = …; res = putItem(key, content); } else if (pathParams != null) { let pid = …; res = getItem(pid); } else { res = …; // error response } return res; };
  • 31. Lambda 모듈 추가 "dependencies": { "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "@aws-cdk/aws-lambda": "^1.9.0", "source-map-support": "^0.5.9" }
  • 32. Lambda 함수 추가 코드 작성 import lambda = require('@aws-cdk/aws-lambda'); const fn = new lambda.Function(this, "backend", { runtime: lambda.Runtime.NODEJS_8_10, handler: "handler.handler", code: lambda.Code.fromAsset('./lambda') });
  • 34. Lambda 함수 DDB 관련 권한 부여 import lambda = require('@aws-cdk/aws-lambda'); const fn = new lambda.Function(this, "backend", { runtime: lambda.Runtime.NODEJS_8_10, handler: ”index.handler", code: lambda.Code.fromAsset('./lambda') }); table.grantReadWriteData(fn); fn.addEnvironment("TABLE_NAME", table.tableName);
  • 36. PastebinStack https://github.com/kpiljoong/aws-serverless-pastebin Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> API 게이트웨이
  • 37. API Gateway 모듈 추가 "dependencies": { "@aws-cdk/core": "^1.9.0", "@aws-cdk/aws-dynamodb": "^1.9.0", "@aws-cdk/aws-lambda": "^1.9.0", "@aws-cdk/aws-apigateway": "^1.9.0", "source-map-support": "^0.5.9" }
  • 38. API Gateway RestAPI 코드 작성 import apigw = require('@aws-cdk/aws-apigateway'); const api = new apigw.LambdaRestApi(this, "api", { handler: fn });
  • 40. Pastebin 동작 확인 테스트 https://API_GATEWAY_ENDPOINT/prod/?content=AWS DevDay 2019! {"data":"HfkyONDS6C"} 요청 응답 https://API_GATEWAY_ENDPOINT/prod/HfkyONDS6C {"data":"DevDay"} 요청 응답 읽기 등록
  • 41. 코드 기반 인프라 구성 방법 다시 보기 • AWS CDK CLI 워크플로 • init, diff à synth à deploy • AWS Constructs 라이브러리 • API 레퍼런스 참고 • 권한 부여 PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash>
  • 42. 잠깐! 아직 생각이 많으시다고요? 아직 비지니스 로직이 포함된 서비스에 도입하기에는 생각이 많으시다고요? 그러면 이건 어떨까요? 서비스가 잘 동작하는지 부하 테스트를 해보는 것이죠!
  • 43. PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB 콘텐츠 생성 콘텐츠 요청 AWS CDK App 콘텐츠 생성: HTTP GET ?content= 콘텐츠 요청: HTTP GET /<hash> LoaderStack Loader가 추가된 아키텍처
  • 44. 트래픽 생성 스크립트 #!/bin/sh while true; do curl -i $URL sleep 1 done
  • 45. Dockerfile 생성 FROM alpine RUN apk add curl ADD load.sh ./load.sh CMD [ "/bin/sh", "/load.sh" ]
  • 47. Loader Construct 작성 export class Loader extends cdk.Construct { constructor(scope: cdk.Construct, id: string, url: string, tps: number) { super(scope, id); const cluster = new ecs.Cluster(this, 'Cluster'); const taskDef = new ecs.FargateTaskDefinition(this, "LoaderTask"); taskDef.addContainer("Loader", { image: ecs.ContainerImage.fromAsset('./loader'), environment: { 'URL': url } }); const fargate = new ecs.FargateService(this, "Fargate", { cluster: cluster, taskDefinition: taskDef, desiredCount: tps }); } }
  • 48. Loader Stack 작성 export class LoaderStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const url = "https://73m6x99c10.execute-api.ap-northeast- 1.amazonaws.com/prod/2XduFsd1mw"; new Loader(this, "Loader", url, 10); } }
  • 49. App 수정 #!/usr/bin/env node import 'source-map-support/register'; import cdk = require('@aws-cdk/core'); import { PastebinStack, LoaderStack } from '../lib/pastebin-stack'; const app = new cdk.App(); new PastebinStack(app, 'PastebinStack'); new LoaderStack(app, 'TestLoaderStack');
  • 51. Watchful 코드 추가 import { Watchful } from 'cdk-watchful’ export class PastebinStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); … const wf = new Watchful(this, "Monitoring"); wf.watchScope(this); } }
  • 53. Loader가 추가된 아키텍처 다시 보기 • Load 생성 • AWS Fargate로 규모에 상관없이! • 재사용 가능한 Construct 직접 작성 • API, 인캡슐레이션 • 모니터링 • 공개된 construct 라이브러리를 활용 • ”Cloud in a Library” • jsii PastebinStack Amazon API Gateway AWS Lambda Amazon DynamoDB AWS CDK App LoaderStack https://github.com/aws/jsii
  • 54. 직접 확인하는 Pastebin 자동화 https://github.com/kpiljoong/aws-devday2019-iac-demo
  • 55. 클릭스트림 데이터 적재 사례 AWS CDK App PipelineStack AWS CodeCommit AWS CodeBuild AWS CloudFormation 코드 체크인 AWS CodePipeline StreamAppStack Amazon Kinesis Data Streams 클릭스트림 AWS Lambda Amazon DynamoDB
  • 56. Source Source CodeCommit Build CdkCodeBuild CodeBuild LambdaCodeBuild CodeBuild Deploy DevEnvDeploy CloudFormation Approval Manual Approval Review Deploy ProdEnvDeploy CloudFormation • Dev 환경 배포와 마찬가지로 Prod 환경에 실제 애플리케이션 배포 • 승인을 기다림 • CDK 앱으로 부터 생성된 StreamAppStack의 템플릿을 배포 • Lambda 함수 코드는 앞서 LambdaCodeBuild 프로젝트에 의해 생성된 패키지 파일의 위치를 전달 • 두개의 CodeBuild 프로젝트를 사용 • CdkCodeBuild 프로젝트는 CDK 앱을 synthesize하여 CloudFormation 템플릿을 생성 • LambdaCodeBuild 프로젝트는 Lambda 함수 코드의 테스트, 빌드 작업을 수행 • CDK 앱과 Lambda 함수 코드는 동일한 리포지토리에 저장
  • 57. 아하! 어디서든 가능한 자동화 어디부터 자동화를 해야하는지 모르겠다고요? 고민이 많다고요? 자동화는 어디서든 가능합니다. 하나의 스택을 해도 좋고, 하나의 레이어를 해도 좋아요. 스택, 레이어 내에서도 하나의 컴포넌트, 심지어 하나의 리소스도 충분합니 다.
  • 58. 아하! 도구 선택은 편한 걸로 도구는 편한 게 최고입니다. 당장 사용하여 원하는 결과를 얻어야 하니까요. 새로운 도구를 학습하는 시간과 가지고 계신 기술력을 활용할 수 있는 것, 고민해보세요! 다른 팀원과 편한 방법 및 도구가 다른가요? 각자 편한 걸 사용하세요. 대신 표준 프로토콜을 지원하는 걸 사용하고, 표 준 프로토콜을 통해 서로 통신하세요.
  • 59. 아하! 배포 환경은 동일하게 로컬 환경은 개발자 ’본인’만을 위한 것입니다. 로컬에서 충분히 테스트한 후 구성 및 배포 전용 환경을 구성하여 사용하 세요. 컨테이너도 좋고 AWS Cloud9과 같은 클라우드 IDE도 좋은 선택입니다.
  • 60. 아하! 적은 AWS 서비스와 의존성은 인프라 자동화는 AWS 서비스에 대해 깊은 이해를 요구하지 않습니다. 특히, CDK를 사용하시면 이미 모범 사례를 기반으로 하는 라이브러리가 준 비되어 있어 더욱 더 손 쉽게 Well-Architecture를 구성할 수 있습니다.