AWS CDKを0系から1系にアップグレードするときの覚書 [現在進行系]

GAされたのは嬉しいのですが、やはりメジャーアップデートは破壊的変更が入ってます。
ということで、今やってるアプグレ作業を随時メモしていきます。

## Version

- Before: 0.23.0
- After: 1.1.0

## @aws-cdk/cdk -> @aws-cdk/coreに変更

@aws-cdk/cdkは1系がアップされていません。
@aws-cdk/coreをインストールして、import / requireしている部分を書き換えてください。

```bash
$ yarn add -D @aws-cdk/core
$ yarn remove @aws-cdk/cdk
```

## @aws-cdk/cdkの`getContext`を@aws-cdk/coreの`tryGetContext`に変更

@aws-cdk/coreに変えると、`getContext`でコンパイルエラーが出ます。
これは`tryGetContext`に名前が変わっているからです。

## @aws-cdk/iamはコンストラクタで定義に

### Before

```typescript
new IAM.PolicyStatement().allow()
.addActions(
        "arn:aws:dynamodb:us-east-1:0000000000:table/hoge*"
)
.addResources(
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
)
````


### After

```typescript
new IAM.PolicyStatement({
      resources: [
        "arn:aws:dynamodb:us-east-1:0000000000:table/hoge*"
      ],
      actions: [
        "dynamodb:DeleteItem",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query",
        "dynamodb:Scan",
        "dynamodb:UpdateItem"
      ]
    })
```

## @aws-cdk/aws-appsyncのCdnGraphQLApiのattributesが変わっている

### Before
```typescript
const api: AppSync.CfnGraphQlApi = ...
const apiId = api.graphQLApiApiId
```
### After
```typescript
const api: AppSync.CfnGraphQlApi = ...
const apiId = api.attrApiId
```


## bin/aws-cdk.tsでrunする必要がなくなった

`cdk.App`をrunする必要がありましたが、不要になりました。
`app.run()`を残していると怒られます。

### Before

```typescript
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { Cdk1Stack } from '../lib/cdk-1-stack';

const app = new cdk.App();
new Cdk1Stack(app, 'Cdk1Stack');
app.run()
```

### After

```typescript
#!/usr/bin/env node
import 'source-map-support/register';
import cdk = require('@aws-cdk/core');
import { Cdk1Stack } from '../lib/cdk-1-stack';

const app = new cdk.App();
new Cdk1Stack(app, 'Cdk1Stack');
```

## IAM.Roleに擬似パラメーターがデフォルトで入る（っぽい）

```typescript
const serviceRole = new IAM.Role(stack, `${name}DynamoDBRole`, {
      assumedBy: new IAM.ServicePrincipal('appsync.amazonaws.com'),
      path: '/service-role/'
    })
```

特に変更していなかったのですが、Principalで擬似パラメーターが入るように変わってました。

```bash

IAM Statement Changes
┌───┬────────────────────────────────────────────────┬────────┬────────────────┬───────────────────────────────────┬───────────┐
│   │ Resource                                       │ Effect │ Action         │ Principal                         │ Condition │
├───┼────────────────────────────────────────────────┼────────┼────────────────┼───────────────────────────────────┼───────────┤
│ - │ ${Shifter-graphql-developmentDynamoDBRole.Arn} │ Allow  │ sts:AssumeRole │ Service:appsync.amazonaws.com     │           │
├───┼────────────────────────────────────────────────┼────────┼────────────────┼───────────────────────────────────┼───────────┤
│ + │ ${Shifter-graphql-developmentDynamoDBRole.Arn} │ Allow  │ sts:AssumeRole │ Service:appsync.${AWS::URLSuffix} │           │
└───┴────────────────────────────────────────────────┴────────┴────────────────┴───────────────────────────────────┴───────────┘
(NOTE: There may be security-related changes not in this list. See http://bit.ly/cdk-2EhF7Np)
```

## cdk.outというディレクトリが作られる
パット見た感じ、traceやCloudFormationのJSONなどが吐き出されている様子です。
.gitignoreしておいたほうが良さそう。