티스토리 뷰
AWS CDK로 lambda와 API Gateway 생성하기 (Typescript)
https://cdkworkshop.com/ 를 따라한 튜토리얼이다.
내용 일부에 변경이 있어서 변경 내용을 포함하였다.
초기 셋팅
너무 뻔해서 설명할게 없다.
https://cdkworkshop.com/15-prerequisites.html
이 사이트에 있는 것 + 추가로 아래의 셋팅을 진행한다.
- GIT 설치
- AWS CLI 설치
- cdk-workshop용 Programmatic access User 생성 및 aws configure
- node js 설치 (나의 경우 v12.6.0으로 진행)
- aws cdk toolkit 설치 (npm install -g aws-cdk)
- python 설치 (나는 typescript로 할거라서 굳이..)
- visual studio code 설치
참고로 visual studio code 설치 후 Shift + Cmd + P
누른 다음에 shell
이라고 입력하면 오지는 명령 하나가 나온다. (Mac 기준임)
바로 터미널에 code .
라고 입력하면 현재 디렉토리를 기반으로 프로젝트를 실행해주는 기능이다. 리얼 유용하니 꼭 설정해 놓도록 하자.
Hello, CDK!
이제 CDK 프로젝트를 생성해보자. 적당히 디렉토리 명을 cdk-lambda-workshop로 만든 후 해당 폴더 안으로 들어가서 아래 명령어를 친다.
$ cdk init app --laungage=typescript
그러면 CDK 프로젝트가 하나 생성된다.
이제 위에서 말한 오지는 명령을 쳐보자
$ code .
그러면 이제 visual studio code 가 해당 cdk project를 기반으로 실행될 것이다.
여러가지 디렉토리들(bin, lib)이 있는데, bin은 부트스트랩 코드가 있는 곳이라 건들 필요는 없고, 여러분이 만져야 할 곳은 lib 디렉토리다.
해당 디렉토리 하단에 cdk-lambda-workshop-stack.ts 파일이 생기는데 해당 파일이 실제 비지니스 로직이 들어가는 핵심 파일이다.
CDK에 Lambda Stack 생성
bin, lib 디렉토리와 같은 하이라키에 lambda 디렉토리를 만들고 hello.js 파일을 추가하자
내용은 아래와 같다
exports.handler = async function(event) {
console.log('request:', JSON.stringify(event, undefined, 2));
return {
statusCode: 200,
headers: { 'Content-Type': 'text/plain' },
body: `Hello, CDK! You've hit ${event.path}\n`
};
}
위 코드를 CDK에서 불러와서 쓰려면 cdk용 lambda 모듈을 설치해줘야 한다.
$ npm install @aws-cdk/aws-lambda
위 명령어를 통해 lambda 모듈을 설치하도록 하자
이제 위에서 만든 lambda function을 내 Stack에 생성하는 코드를 짜보자
cdk-lambda-workshop-stack.ts 내용은 아래와 같다.
import cdk = require('@aws-cdk/core');
export class CdkLambdaWorkshopStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
}
}
아직은 아무 내용 없이 스켈레톤 코드만 존재한다.
이제 여기서 lambda 스택을 생성해보자.
import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
import path = require('path');
export class CdkLambdaWorkshopStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const hello = new lambda.Function(this, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_10_X,
code: lambda.Code.fromAsset(path.join(__dirname, './../lambda')),
handler: 'hello.handler'
});
}
}
이게 cdkworkshop.com 부분과 다른 부분인데, cdkworkshop.com은 node.js 버전도 낮은 버전을 쓰고 있고, 지금은 deprecated된 lambda.Code.asset 함수를 쓰고 있어서 위 처럼 바꿨다.
위처럼 입력하면 lambda 함수가 배포된다.
정상적으로 잘 빌드되나 확인해보기 위해 터미널에 아래와 같이 친다
$ cdk synth
해당 명령어는 cdk 코드를 CloudFormation으로 만들어 준다.
그리고 이제 배포를 해보자
$ cdk deploy
정상적으로 배포되는 것을 확인 할 수 있다.
이제 AWS Lambda Console로 가서 위에서 생성한 Lambda Function이 잘 생겼는지 확인 후, Test → Create new test event → Event Template에서 Amazon API Gateway AWS Proxy 선택 → Event name에 test 입력 → Create
이후 다시 Test 버튼 클릭 하면 정상적으로 실행되고 결과가 출력된다.
CDK API Gateway 스택 생성
Lambda 스택까지 만들었으니 이를 연결해주는 API Gateway 스택을 생성해보자
$ npm install @aws-cdk/aws-apigateway
입력 후 위에서 만든 hello 를 연결해주는 코드를 작성하자
import cdk = require('@aws-cdk/core');
import lambda = require('@aws-cdk/aws-lambda');
import apigw = require('@aws-cdk/aws-apigateway');
import path = require('path');
export class CdkLambdaWorkshopStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const hello = new lambda.Function(this, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_10_X,
code: lambda.Code.fromAsset(path.join(__dirname, './../lambda')),
handler: 'hello.handler'
});
new apigw.LambdaRestApi(this, 'Endpoint', {
handler: hello
});
}
}
이후 cdk deploy 명령어를 통해 배포 후 몇초 기다리면 api gateway url이 터미널에 표시된다. 웹브라우져에서 해당 url을 입력해보자
위와 같은 멋진 결과를 확인 할 수 있다.
'Cloud > AWS' 카테고리의 다른 글
AWS Step Functions 예제 / 람다에서 람다 호출하기 (0) | 2020.03.24 |
---|---|
[AWS] EC2 EBS Root Volume으로 마운트 하기 (0) | 2020.03.11 |
AWS EC2의 sshd_config 함부로 건들지 말자 (0) | 2020.03.08 |
Amazon Kinesis Firehose 의 Convert Record Format 사용 하기 (6) | 2020.02.12 |
AWS Rekognition을 이용한 Streaming Video에서 실시간 얼굴 인식 (1) | 2020.02.05 |
[AWS] AWS Athena에 날린 쿼리 그대로 AWS Glue에서 Job 만들기 (0) | 2020.01.07 |
Macbook Cam을 AWS Kinesis Video Stream로 전송하기 (0) | 2019.11.07 |
AWS Container Trouble Shooting (0) | 2019.11.07 |
- Total
- Today
- Yesterday
- Cloud
- db
- jni강좌
- kering
- algorithm
- 음악
- MFC
- NDK
- 안드로이드
- C
- AWS
- Visual C++
- Quiz
- Python
- 드라이버
- java
- 리눅스
- winapi
- 프로그래밍
- it
- driver
- linux
- database
- API
- gcc
- jni
- C++
- source
- android
- Troubleshooting
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |