AWS Cloud Development Kitをためしてみる (Javascript)

AWS Cloud Development Kitを試してみます。

##参考
https://github.com/awslabs/aws-cdk
https://awslabs.github.io/aws-cdk/
https://awslabs.github.io/aws-cdk/getting-started.html
https://awslabs.github.io/aws-cdk/reference.html

##Getting startedをベースに試してみる

```
$ npm install -g aws-cdk
/Users/atsum/.nodebrew/node/v9.11.1/bin/cdk -> /Users/atsum/.nodebrew/node/v9.11.1/lib/node_modules/aws-cdk/bin/cdk
+ aws-cdk@0.18.1
added 265 packages in 30.324
```

```
$ cdk --version
0.18.1 (build 9f7af21)
```

プロジェクトを作成する

```
mkdir hello-cdk
cd hello-cdk
git init
npm init -y

$ npm init -y
Wrote to /Users/atsum/Work/cdk/hello-cdk/package.json:

{
  "name": "hello-cdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
```

依存関係の追加

```
npm install @aws-cdk/cdk

npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN hello-cdk@1.0.0 No description
npm WARN hello-cdk@1.0.0 No repository field.

+ @aws-cdk/cdk@0.18.1
added 10 packages in 3.275s
```

AWS CDK Appの定義

```
$ emacs index.js

const cdk = require('@aws-cdk/cdk');

class MyStack extends cdk.Stack {
    constructor(parent, id, props) {
        super(parent, id, props);
    }
}

class MyApp extends cdk.App {
    constructor(argv) {
        super(argv);

        new MyStack(this, 'hello-cdk');
    }
}

new MyApp().run();
```

クレデンシャル設定

```
$ aws configure
AWS Access Key ID [****************XHSQ]: ************
AWS Secret Access Key [****************f4/2]: **************
Default region name [ap-northeast-1]: 
Default output format [None]: 
```

デフォルトで実行するappを指定する

```
$ emacs cdk.json
{
  "app": "node index.js"
}
```

stackの確認

```
$ cdk ls -l
- name: hello-cdk
  environment:
    name: 793493288704/ap-northeast-1
    account: "793493288704"
    region: ap-northeast-1
```

テンプレートの元となるスクリプトを記載する

```
emacs index.js
const cdk = require('@aws-cdk/cdk');

class MyStack extends cdk.Stack {
    constructor(parent, id, props) {
        super(parent, id, props);
    }
}

class MyApp extends cdk.App {
    constructor(argv) {
        super(argv);

        new MyStack(this, 'hello-cdk');
    }
}

new MyApp().run();
```

jsからテンプレートに変換

```
$ cdk synth hello-cdk
Resources:
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: "@aws-cdk/cdk=0.18.1,@aws-cdk/cx-api=0.18.1,hello-cdk=1.0.0"
```

デプロイする

```
$ cdk deploy
hello-cdk: deploying...
hello-cdk: creating CloudFormation changeset...
 0/2 | 16:17:37 | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack | hello-cdk User Initiated
 0/2 | 16:17:42 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata 
 0/2 | 16:17:45 | CREATE_IN_PROGRESS   | AWS::CDK::Metadata | CDKMetadata Resource creation Initiated
 1/2 | 16:17:45 | CREATE_COMPLETE      | AWS::CDK::Metadata | CDKMetadata 
 2/2 | 16:17:47 | CREATE_COMPLETE      | AWS::CloudFormation::Stack | hello-cdk 

 ✅  hello-cdk

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:793493288704:stack/hello-cdk/ad103a90-ee26-11e8-a16d-0a5da605f772
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/351c3c1a-51d3-bb6c-f174-0b2cc4ad3608.png)

##S3バケットを作成

```
$ cat index.js 
const cdk = require('@aws-cdk/cdk');
const s3 = require('@aws-cdk/aws-s3');

class MyStack extends cdk.Stack {
    constructor(parent, id, props) {
        super(parent, id, props);

        new s3.Bucket(this, 'MyFirstBucket', {
		versioned: true
		    });
    }
}


class MyApp extends cdk.App {
    constructor(argv) {
        super(argv);

        new MyStack(this, 'hello-cdk');
    }
}

new MyApp().run();
```

```
$ npm install @aws-cdk/aws-s3
npm WARN hello-cdk@1.0.0 No description
npm WARN hello-cdk@1.0.0 No repository field.

+ @aws-cdk/aws-s3@0.18.1
added 6 packages in 3.993s
```

```
$ cdk synth hello-cdk
Resources:
  MyFirstBucketB8884501:
    Type: AWS::S3::Bucket
    Properties:
      VersioningConfiguration:
        Status: Enabled
    Metadata:
      aws:cdk:path: hello-cdk/MyFirstBucket/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: "@aws-cdk/aws-codepipeline-api=0.18.1,@aws-cdk/aws-events=0.18.1,@aws-c\
        dk/aws-iam=0.18.1,@aws-cdk/aws-kms=0.18.1,@aws-cdk/aws-s3=0.18.1,@aws-c\
        dk/aws-s3-notifications=0.18.1,@aws-cdk/cdk=0.18.1,@aws-cdk/cx-api=0.18\
        .1,hello-cdk=1.0.0"
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/b1d2a2d8-473f-97c0-91dd-f72e9d34609b.png)

##約束

投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。