tags: AWS CDK projen

Projen 學習

Projen 是什麼?

與現有的 templating/scaffolding tools 相反,projen不是一次性生成器。不應手動編輯各項設定擋,而是編輯 projen 提供的 .projenrc.js 來自動生成相關的各項設定擋。

優點

  1. 可以在不做任何設定即生成相關專案檔案
  2. 修改一個基本設定檔 .projenrc.js 後下 npx projen 即可將設定同步至其他相關設定檔中

缺點

  1. 文件說明較少,蠻多設定需要自己先試過後才能清楚
  2. 目錄結構與 CDK 有不同,如果要轉換需要費一番功夫

結論

實質上 Projen 就是一個套件管理工具,可以方便開發者快速設定各項並且方便各項專案快速複製

相關語法

第一步開始專案

$ mkdir my-project
$ cd my-project
$ git init
$ npx projen new PROJECT-TYPE
🤖 Synthesizing project...

支援的專案類型(PROJECT-TYPE)

基本語法

  • npx projen 自動處理 .projenrc.js 設定內容
  • npx projen build 編譯 projen 並進行 test
  • projen projen upgrade 更新 dependencies
  • projen projen upgrade-projen 更新 projen

CDK 相關語法參考

.projenrc.js 重要參數說明

  • cdkVersion: '1.130.0': 指定 CDK 版本
  • minNodeVersion: '14': 指定最小 nodeJs 版本,
  • githubOptions: {workflows: false}:

從舊有 CDK 專案轉移到 projen

  1. package.json 更名 package.json.bak
  2. 將不需要的檔案刪除
    • node_modules
    • package-lock.json
    • yarn.lock
  3. 建立 projen 專案,npx projen new PROJECT-TYPE
  4. 參考 package.json.bak 將套件做分類
    • CDK 套件放在 cdkDependencies
    • 其他的可以放在 deps 或 devDeps
    • cdkVersion 可以指定,如不確定可以透過指令 cdk version 查看
    • 若是開發 Stack 想要指定 CDK 版本,則 cdkVersionPinning 需要設定成 true
  5. 將原先的 CDK 主程式移到 src 目錄下
    • projen 主程式進入點為 main.ts 推薦可以將程式拆分比較好區隔
    • 執行 npx projen build compile 後的檔案會放到 lib 資料夾
  6. 執行 npx projen 會自動安裝 .projenrc.js 設定好的套件與生成相關設定檔
  7. 確認生成的 package.json 與之前的設定差不多後即可移除 package.json.bak

開發時的 Q&A

  1. projen CDK 版本過舊問題
***************************************************
*** Newer version of CDK is available [1.110.1] ***
*** Upgrade recommended                         ***
***************************************************

可以更新 .projenrc.js 中的 cdkVersion 來處理

  1. 調整 cdkVersion 後執行 cdk deploy 時的錯誤
This CDK CLI is not compatible with the CDK library used by your application. Please upgrade the CLI to the latest version.
(Cloud assembly schema version mismatch: Maximum schema version supported is 9.0.0, but found 12.0.0)

可透過更新本機 CDK library 來處理

npm install -g aws-cdk
  1. 非 src 資料夾該怎麼 Compile
    • 需先安裝 Node.js
    • 執行 npm init 初始化一個 package.json
      Image Not Showing Possible Reasons
      • The image file may be corrupted
      • The server hosting the image is unavailable
      • The image path is incorrect
      • The image format is not supported
      Learn More →
    • 安裝 TypeScript 以及讓 Node.js 支援型別的套件
      npm install typescript @types/node
    • 初始化 tsconfig (TypeScript 的設定檔)
      npx tsc --init
    • 目錄下即會產生 package.jsonpackage-lock.jsontypescript.json
    • 如你需要設定編譯後的檔案在特定的資料夾可以參考以下步驟處理
      • 開啟 tsconfig.json
      • 找到 outDir(Output directory) 後將其移除註解並改成 ./dist(亦可改成其他資料夾)
      • 最後執行 tsc,編譯後的檔案就會出現在你指定的資料夾中了

參考資料

projen repo
Projen 初探 – 打造 CDK 的利器
pahud dev youtube
UPDATE CDK TO THE LATEST VERSION
【TypeScript】從頭建立屬於你的 TypeScript 專案