iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

AWS新手的30天之旅系列 第 27

AWS新手的30天之旅 - 27. CDK(Cloud Development Kit)實作 - 建立Lambda

What is CDK

前面的教學建立AWS的方式其實都是使用手動建立的方式,但過程中非常耗時,也容易出錯。

CDK(Cloud Development Kit)是一套可以用寫程式的方式來建立AWS資源,增加建置的效率,並且也可以使用git作版本控管,非常方便。

練習題

這邊單純講的話會非常空洞,因此直接學習他人的實作題來進行,增加學習的熟悉度。

題目說明

這篇的教學文章中,使用CDK建立一個SQS,然後會觸發Lamdbda,接著將lambda訊息寫到cloudwatch。

所以整理一下,一共有幾件事要做

  • 建立SQS
  • 建立Lambda
  • queue觸發Lambda

實作 - 建立Lambda

建立lambda function

在 lib 同一層建立一個檔案夾,名字叫做 lambda,裡面建立一個 index.ts。

index.ts的內容就是要將訊息記錄到CloudWatch

exports.handler = async function(event: any) {
    console.log(JSON.stringify(event, undefined, 2));
}

安裝lambda library

一樣使用npm安裝

npm i @aws-cdk/aws-lambda

開發CDK

回到剛剛的 lib/hello-cdk-stack.ts

在import的部分加入lambda library

// 引入需要的 library
import lambda = require('@aws-cdk/aws-lambda');

在function內加入建立lambda程式碼

// 實例化一個 lambda function
    new lambda.Function(this, 'HelloFunction', {
      runtime: lambda.Runtime.NODEJS_8_10,
      code: lambda.Code.asset('lambda'),
      handler: 'index.handler'
    });

所以最後 lib/hello-cdk-stack.ts 會變成

import * as cdk from '@aws-cdk/core';
// 引入 aws-sqs
import sqs = require('@aws-cdk/aws-sqs');

// 引入需要的 library
import lambda = require('@aws-cdk/aws-lambda');

export class HelloCdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // 實例化這個 queue
    new sqs.Queue(this, "HelloQueue");

    // 實例化一個 lambda function
    new lambda.Function(this, 'HelloFunction', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.asset('lambda'),
      handler: 'index.handler'
    });
  }
}

佈署及驗証

可以先使用指令看CloudFormation內容,由此可知CloudFormation多複雜了…

cdk synth

也可以使用diff指令看差異是什麼

cdk diff

一樣使用deploy來佈署

cdk deploy

進去AWS Lambda看就會發現已經建立了

Reference

https://medium.com/@azole/aws-cdk-%E5%88%9D%E6%8E%A2-5b481d3970bd


上一篇
AWS新手的30天之旅 - 26. CDK(Cloud Development Kit)實作 - 建立SQS
下一篇
AWS新手的30天之旅 - 28. CDK(Cloud Development Kit)實作 - Queue觸發Lambda
系列文
AWS新手的30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言