昨天說明完了指令的用法,今天來講解一下我們建立的 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');
#!/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.
>
引入我們的 Library
import * as cdk from '@aws-cdk/core';
import { HelloCdkStack } from '../lib/hello-cdk-stack';
使用 new 將物件建構起來
const app = new cdk.App();
把剛剛 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));
}
}
export 一個 class 名稱 HelloCdkStack 繼承 cdk.Stack
export class HelloCdkStack extends cdk.Stack {}
透過 new 傳入的參數用 constructor 接收
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {}
使用 super 得到父類別的值
super(scope, id, props);
新建一個 sqs queue 並且指定為 queue 設定 timeout 為 300 秒
const queue = new sqs.Queue(this, 'HelloCdkQueue', {
visibilityTimeout: cdk.Duration.seconds(300)
});
新建一個 sns topic 並且指定為 topic
const topic = new sns.Topic(this, 'HelloCdkTopic');
把 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 技術達人之路。有興趣的朋友歡迎至天瓏書局選購!