iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1
DevOps

用 CDK 定義 AWS 架構系列 第 4

Day 4 - 分析 AWS CDK sample-app

  • 分享至 

  • xImage
  •  

昨天說明完了指令的用法,今天來講解一下我們建立的 sample-app 裡面藏了什麼內容吧!

如果直接跳到這篇的同學可以直接使用 cdk init sample-app --language=typescript 跑出範例程式或是到 Day 2 - 第一個 AWS CDK 專案與參考資源分享 補一下內容呦!

今日內容主要說明怎麼使用 typescript 建立一個 CDK 應用與從頭到尾讀懂一隻基礎的 typescript 程式

進入點載入位置

先看到 bin/hello-cdk.ts

#!/usr/bin/env node
import * as cdk from '@aws-cdk/core';
import { HelloCdkStack } from '../lib/hello-cdk-stack';

const app = new cdk.App();
new HelloCdkStack(app, 'HelloCdkStack');

程式講解

第 1 行

#!/usr/bin/env node

代表此文件使用 node 執行,那為什麼是這樣寫呢?
這就要從 #! 這個語法說起了,先說明它的名字叫做 Shebang 或是 Hashbang 通常 # 稱它為 sharp 而 ! 稱它為 bang 如此就知道為什麼是這個名字了吧!
此語法用於直接呼叫直譯器,說到這邊應該會有一個疑問竟然如此不是應該寫作?

#!/usr/bin/node

這樣其實不太完整以我現在使用的 MAC 來說

$ /usr/bin/node
zsh: no such file or directory: /usr/bin/node

會找不到 node 的位置那這時候就應該使用 env 指令執行它會去找使用者的 PATH 設定檔在再去執行 node

$ env node
Welcome to Node.js v14.8.0.
Type ".help" for more information.
>

第 2 ~ 3 行

引入我們的 Library

import * as cdk from '@aws-cdk/core';
import { HelloCdkStack } from '../lib/hello-cdk-stack';

第 5 行

使用 new 將物件建構起來

const app = new cdk.App();

第 6 行

把剛剛 new 起來的 cdk.App() 放入並取名 HelloCdkStack 未來後面會常常看到這樣的寫法

new HelloCdkStack(app, 'HelloCdkStack');

主要程式位置

看到 lib/hello-cdk-stack.ts

import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as sqs from '@aws-cdk/aws-sqs';
import * as cdk from '@aws-cdk/core';

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

    const queue = new sqs.Queue(this, 'HelloCdkQueue', {
      visibilityTimeout: cdk.Duration.seconds(300)
    });

    const topic = new sns.Topic(this, 'HelloCdkTopic');

    topic.addSubscription(new subs.SqsSubscription(queue));
  }
}

第 6 行

export 一個 class 名稱 HelloCdkStack 繼承 cdk.Stack

export class HelloCdkStack extends cdk.Stack {}

第 7 行

透過 new 傳入的參數用 constructor 接收

constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {}

第 8 行

使用 super 得到父類別的值

super(scope, id, props);

第 10 ~ 12 行

新建一個 sqs queue 並且指定為 queue 設定 timeout 為 300 秒

const queue = new sqs.Queue(this, 'HelloCdkQueue', {
    visibilityTimeout: cdk.Duration.seconds(300)
});

第 14 行

新建一個 sns topic 並且指定為 topic

const topic = new sns.Topic(this, 'HelloCdkTopic');

第 16 行

把 sns topic 加入到 sqs queue 中

topic.addSubscription(new subs.SqsSubscription(queue));

以上是 CDK sample-app 的介紹如果有錯我會盡快修正的,謝謝大家!

明日的內容會說明如何把今日的 sample-app 部署上去 AWS,如果是在等如何部署的讀者就請在等我一天!

想要看更多嗎?歡迎到我的部落格參觀

文章內容主要是網路或是程式開發類型的文章

本文同步刊載於 Clarence 部落格:Day 4 - 分析 AWS CDK sample-app


「AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC」
本書改編並延伸自第 12 屆 iT 邦幫忙鐵人賽獲得 DevOps 組冠軍的《用 CDK 定義 AWS 架構》系列文章,以簡單、好讀的行文風格詳述技術細節,並提供完整的程式碼範例與說明,一步一步帶領新手從零開始踏上 AWS CDK 技術達人之路。

有興趣的朋友歡迎至天瓏書局選購!

購書連結 https://bit.ly/2ZMAebE

https://ithelp.ithome.com.tw/upload/images/20211103/20117701W7l6fQnn2L.jpg


上一篇
Day 3 - AWS CDK 指令介紹
下一篇
Day 5 - 執行 AWS CDK sample-app
系列文
用 CDK 定義 AWS 架構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言