CloudFormationを素のyamlやjsonで書くのは辛い……と思っていたところ、2018年夏にaws-cdkに出会った。
aws-cdkはTypeScriptとJavaでCloudFormationを実装することができる素敵ツールである。最近はC#や素のJavaScriptでも実装できるようになったらしい。
- [突然のaws-cdkバージョンアップ]
- [npm-check-updatesでアップグレードを試みる]
- [グローバルなパッケージをnpmでアップグレードする]
- [プロジェクトのパッケージをncuでアップグレードする]
- [まとめ]
[突然のaws-cdkバージョンアップ]
aws-cdkに出会った当時はv0.8.xだったはずが、いつの間にかv0.22.xになっていた……。と思ったら、v0.22.xだったのは先週までで、今週にはもうv0.23.0がリリースされていた。
aws-cdk本体のバージョンが古い状態で、新しいプロジェクトを作る。
$ cdk --version 0.22.0 (build 644ebf5) $ mkdir cdk $ cd cdk $ cdk init --language=typescript Applying project template app for typescript Initializing a new git repository... Executing npm install... npm notice created a lockfile as package-lock.json. You should commit this file. npm WARN cdk@0.1.0 No repository field. npm WARN cdk@0.1.0 No license field. # Useful commands * `npm run build` compile typescript to js * `npm run watch` watch for changes and compile * `cdk deploy` deploy this stack to your default AWS account/region * `cdk diff` compare deployed stack with current state * `cdk synth` emits the synthesized CloudFormation template
そこに、追加のライブラリ(今回はCloudWatch)をインストールしようとするとワーニングが表示された。
$ npm i @aws-cdk/aws-cloudwatch npm WARN @aws-cdk/aws-cloudwatch@0.23.0 requires a peer of @aws-cdk/cdk@^0.23.0 but none is installed. You must install peer dependencies yourself. npm WARN @aws-cdk/aws-iam@0.23.0 requires a peer of @aws-cdk/cdk@^0.23.0 but none is installed. You must install peer dependencies yourself. npm WARN cdk@0.1.0 No repository field. npm WARN cdk@0.1.0 No license field. + @aws-cdk/aws-cloudwatch@0.23.0 added 22 packages from 7 contributors and audited 563 packages in 5.661s found 0 vulnerabilities
何か嫌な予感がするのと、パッケージのアップグレード手順に不安があったので、今後のためにも手順を確認しておくことに。
[npm-check-updatesでアップグレードを試みる]
調べてみるとこちらの記事が参考になった。
まずは以下のコマンドでnpm-check-updatesをインストールする。
$ npm i -g npm-check-updates
対象のパッケージを指定してコマンドを実行してみると……。
$ ncu -g aws-cdk ⸨░░░░░░░░░░░░░░░░░░⸩ ⠋ : aws-cdk 0.22.0 → 0.23.0 ncu itself cannot upgrade global packages. Run the following to upgrade all global packages: npm -g install aws-cdk@0.23.0
ncuではグローバルなパッケージのアップグレードをできないから自分でコマンドを打てとある。
[グローバルなパッケージをnpmでアップグレードする]
というわけで、指定されたコマンドをコピペで実行する。
$ npm -g install aws-cdk@0.23.0 /usr/local/bin/cdk -> /usr/local/lib/node_modules/aws-cdk/bin/cdk + aws-cdk@0.23.0 added 1 package from 2 contributors, removed 3 packages and updated 8 packages in 14.843s
無事に最新バージョン(v0.23.0)にアップグレードできた。これで今後新しくプロジェクトをinitする際には最新バージョンのcdkを利用することがでいる。
ついでに、@aws-cdk/aws-logsも使いたいので、プロジェクトにインストールを試みる。
$ npm i @aws-cdk/aws-logs npm WARN @aws-cdk/aws-cloudwatch@0.23.0 requires a peer of @aws-cdk/cdk@^0.23.0 but none is installed. You must install peer dependencies yourself. npm WARN @aws-cdk/aws-iam@0.23.0 requires a peer of @aws-cdk/cdk@^0.23.0 but none is installed. You must install peer dependencies yourself. npm WARN @aws-cdk/aws-logs@0.23.0 requires a peer of @aws-cdk/cdk@^0.23.0 but none is installed. You must install peer dependencies yourself. npm WARN cdk@0.1.0 No repository field. npm WARN cdk@0.1.0 No license field. + @aws-cdk/aws-logs@0.23.0 added 11 packages from 7 contributors and audited 607 packages in 3.726s found 0 vulnerabilities
まだワーニングが表示される。おや、と思ってpackage.jsonを確認すると、こちらのaws-cdkと@aws-cdk/cdkのバージョンが古いままだった。
$ cat package.json { "name": "cdk", "version": "0.1.0", "bin": { "cdk": "bin/cdk.js" }, "scripts": { "build": "tsc", "watch": "tsc -w", "cdk": "cdk" }, "devDependencies": { "@types/node": "^8.9.4", "typescript": "^3.1.2", "aws-cdk": "^0.22.0" }, "dependencies": { "@aws-cdk/aws-cloudwatch": "^0.23.0", "@aws-cdk/aws-logs": "^0.23.0", "@aws-cdk/cdk": "^0.22.0" } }
[プロジェクトのパッケージをncuでアップグレードする]
今度はncuが使えそうなので試してみることに。
aws-cdkと@aws-cdk/cdkの2つを最新版にする。
$ ncu -u aws-cdk Using /Users/akito/Develop/sandbox/cdk/package.json ⸨░░░░░░░░░░░░░░░░░░⸩ ⠇ : aws-cdk ^0.22.0 → ^0.23.0 Upgraded /Users/akito/Develop/sandbox/cdk/package.json $ ncu -u @aws-cdk/cdk Using /Users/akito/Develop/sandbox/cdk/package.json ⸨░░░░░░░░░░░░░░░░░░⸩ ⠹ : @aws-cdk/cdk ^0.22.0 → ^0.23.0 Upgraded /Users/akito/Develop/sandbox/cdk/package.json
無事完了したらしい。package.jsonも確かに更新されていた。
$ cat package.json { "name": "cdk", "version": "0.1.0", "bin": { "cdk": "bin/cdk.js" }, "scripts": { "build": "tsc", "watch": "tsc -w", "cdk": "cdk" }, "devDependencies": { "@types/node": "^8.9.4", "typescript": "^3.1.2", "aws-cdk": "^0.23.0" }, "dependencies": { "@aws-cdk/aws-cloudwatch": "^0.23.0", "@aws-cdk/aws-logs": "^0.23.0", "@aws-cdk/cdk": "^0.23.0" } }
最後に先ほどのブログにも注意点として書かれていたように、npm updateを実行して完了。
$ npm update npm WARN cdk@0.1.0 No repository field. npm WARN cdk@0.1.0 No license field. + @aws-cdk/cdk@0.23.0 removed 261 packages, updated 3 packages and audited 78 packages in 4.144s found 0 vulnerabilities
[まとめ]
- aws-cdk楽しい(手でCloudFormation書くよりは)
- npmのグローバルパッケージはnpmでアップグレードできる
- package.jsonの更新はnpm-check-updates (ncu)でやると楽
- package.json更新後npm updateを忘れずに
- SAMとかTerraform使ったことがないので今度試して比較したい
aws-cdk楽しい、という話を社内のSAPに話したら、「素のCloudformationを使うことによってAWS認定試験対策になるとポジティブに考えろ」と言われた。ショウジンシマス……。