AWS CDKをTypeScriptで試してみる

AWS Cloud Development Kit(AWS CDK)がTypeScriptとPythonを正式サポートしたようです。

https://aws.amazon.com/jp/blogs/aws/aws-cloud-development-kit-cdk-typescript-and-python-are-now-generally-available/

管理コンソールでボタン押してリソース管理するのが許されるのは小学生までだよねー、ということで、AWSでインフラ構築するならCloudFormationなりTerraformなりでInfrastructure as a Codeをちゃんと実践すべきなのですが、何かと柔軟性に欠けるCloudFormationと比べて使い慣れた言語で柔軟に書けるのがこのCDKです。裏側はCloudFormationらしいです。

とりあえず試してみます。私はTypeScript推進派なのでTypeScriptを使います。試した環境はmacOS 10.14とNode 10.16です。

$ npm install aws-cdk -g
$ mkdir cdk-test
$ cd cdk-test
$ cdk init --language=typescript

こんな感じのものが生成されると思います。

.
├── README.md
├── bin
│   └── cdk-test.ts
├── cdk.json
├── lib
│   └── cdk-test-stack.ts
├── node_modules
├── package-lock.json
├── package.json
└── tsconfig.json

package.jsonを見ると

{
"name": "cdk-test",
"version": "0.1.0",
"bin": {
  "cdk-test": "bin/cdk-test.js"
},
"scripts": {
  "build": "tsc",
  "watch": "tsc -w",
  "cdk": "cdk"
},
"devDependencies": {
  "@types/node": "8.10.45",
  "typescript": "^3.3.3333",
  "ts-node": "^8.1.0",
  "aws-cdk": "^1.0.0"
},
"dependencies": {
  "@aws-cdk/core": "^1.0.0",
  "source-map-support": "^0.5.9"
}
}

またtsconfig.jsonもちゃんと設定済みのものが生成されていて、何もしなくてもTypeScriptが使える状態になっています。素晴らしいですね。

ではコードを書いていきます。lib/cdk-test-stack.ts にスケルトンが生成されているので、そこに追記していきます。今回はお試しでS3のバケットを1つ作ってみます。まずはS3を扱うためのパッケージをインストールします。

$ npm install @aws-cdk/aws-s3 --save 

続いてバケットを作るコードを実装します。lib/cdk-test-stack.ts を編集します。

import cdk = require('@aws-cdk/core');
import * as s3 from '@aws-cdk/aws-s3';

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

  const testBucket = new s3.Bucket(this, 'TheNewBucketID', {bucketName: 'the-new-s3-bucket'});
}
}

ビルドします。

$ npm run build

デプロイします。環境変数なり aws configure を使うなりして認証情報は事前に設定しておいてください。

$ cdk deploy

できた!

ちなみに cdk synth コマンドでCloudFormationのテンプレートを生成できます。先ほどのコードはこんな感じになりました。

 Resources:
TheNewBucketID0B5AF966:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: the-new-s3-bucket
  UpdateReplacePolicy: Retain
  DeletionPolicy: Retain
  Metadata:
    aws:cdk:path: CdkTestStack/TheNewBucketID/Resource
CDKMetadata:
  Type: AWS::CDK::Metadata
  Properties:
    Modules: aws-cdk=1.0.0,@aws-cdk/aws-events=1.0.0,@aws-cdk/aws-iam=1.0.0,@aws-cdk/aws-kms=1.0.0,@aws-cdk/aws-s3=1.0.0,@aws-cdk/core=1.0.0,@aws-cdk/cx-api=1.0.0,@aws-cdk/region-info=1.0.0,jsii-runtime=node.js/v10.16.0

CDKならループや分岐も自由に書けるので、CloudFormationをそのまま使うより圧倒的に楽ですね。

エディタのコード補完を活用すれば、シンプルな構成ならリファレンスとにらめっこしなくてもノリと勢いで書けてしまいます。そう、TypeScriptならね。

公式ドキュメントはこちら。

https://docs.aws.amazon.com/cdk/api/latest/index.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

10 + six =