iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

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

AWS新手的30天之旅 - 28. CDK(Cloud Development Kit)實作 - Queue觸發Lambda

What is CDK

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

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

練習題

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

題目說明

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

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

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

實作 - Queue觸發Lambda

引入Library

要讓event觸發lambda一樣需要library,我們使用npm安裝

npm i @aws-cdk/aws-lambda-event-sources

開發CDK

在import的部分一樣加入event sources library

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

並且修正function內容,讓lambda加入event source

const queue = new sqs.Queue(this, "HelloQueue");
    const fn = new lambda.Function(this, 'HelloFunction', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.asset('lambda'),
      handler: 'index.handler'
    });
    // 幫這個 lambda function 加上 sqs 這個 event sources
    fn.addEventSource(new event_sources.SqsEventSource(queue));

所以最後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');

// 引入需要的 library
import event_sources = require('@aws-cdk/aws-lambda-event-sources');
export class HelloCdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const queue = new sqs.Queue(this, "HelloQueue");
    const fn = new lambda.Function(this, 'HelloFunction', {
      runtime: lambda.Runtime.NODEJS_12_X,
      code: lambda.Code.asset('lambda'),
      handler: 'index.handler'
    });
    // 幫這個 lambda function 加上 sqs 這個 event sources
    fn.addEventSource(new event_sources.SqsEventSource(queue));
  }
}

佈署與驗証

一樣使用指令部署

cdk deploy

進入lambda後,可以發現有Queue可以觸發lambda

進入SQS發一個測試的訊息,就可以在CloudWatch中看到log了

Reference

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


上一篇
AWS新手的30天之旅 - 27. CDK(Cloud Development Kit)實作 - 建立Lambda
下一篇
AWS新手的30天之旅 - 29. 線上IDE Cloud9
系列文
AWS新手的30天之旅30

尚未有邦友留言

立即登入留言