🗂

AWS CDKやってみた

2021/12/30に公開

https://catalog.us-east-1.prod.workshops.aws/v2/workshops/99731164-1d19-4d2e-9319-727a130e2d57/ja-JP

install

インストール可能なバージョンの確認

work $ npm info aws-cdk versions

CDKはバージョンが揃っていないとうまくいかないようなので、バージョンを指定してインストールしていく

work $ npm install -g aws-cdk@1.134.0
work $ cdk --version
1.134.0 (build dd5e12d)

init

work $ cdk init sample-app --language typescript

生成された状態のファイル内容
この2つのファイルを編集することで、構築していく

作業ディレクトリのworkにちなんだ名称になっている

bin/work.ts
#!/usr/bin/env node
import * as cdk from '@aws-cdk/core';
import { WorkStack } from '../lib/work-stack';

const app = new cdk.App();
new WorkStack(app, 'WorkStack');
lib/work-stack.ts
import * as sns from '@aws-cdk/aws-sns';
import * as subs from '@aws-cdk/aws-sns-subscriptions';
import * as sqs from '@aws-cdk/aws-sqs';
import * as cdk from '@aws-cdk/core';

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

    const queue = new sqs.Queue(this, 'WorkQueue', {
      visibilityTimeout: cdk.Duration.seconds(300)
    });

    const topic = new sns.Topic(this, 'WorkTopic');

    topic.addSubscription(new subs.SqsSubscription(queue));
  }
}

diff

cdk diff

このコマンドで、ローカルの環境とAWS上の差分が確認できるが、
デフォルトの状態で、CDKMetadataの差分がやたらと出る
これを無くすために1行設定追加する
https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/cli.html#version_reporting

cdk.json
{
  "app": "npx ts-node --prefer-ts-exts bin/work.ts",
  "versionReporting": false,  <- この行追加
  "watch": {
    "include": [
      "**"
    ],
    "exclude": [
      "README.md",
      "cdk*.json",
      "**/*.d.ts",
      "**/*.js",
      "tsconfig.json",
      "package*.json",
      "yarn.lock",
      "node_modules",
      "test"
    ]
  },
  "context": {
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
    "@aws-cdk/core:enableStackNameDuplicates": true,
    "aws-cdk:enableDiffNoFail": true,
    "@aws-cdk/core:stackRelativeExports": true,
    "@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,
    "@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true,
    "@aws-cdk/aws-kms:defaultKeyPolicies": true,
    "@aws-cdk/aws-s3:grantWriteWithoutAcl": true,
    "@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true,
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
    "@aws-cdk/aws-efs:defaultEncryptionAtRest": true,
    "@aws-cdk/aws-lambda:recognizeVersionProps": true,
    "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true
  }
}

deploy

CloudFormationの形式に変換できるので意図通りになっているか確認できる

work $ cdk synth

デプロイするときの一時保存用のS3を作るコマンド最初に一度行うのみでいい
CDKToolKitというスタックがCloudFormationに作成され、
cdktoolkit-stagingbucket-xxxxxという名称のS3バケットが作成される

work $ cdk bootstrap

デプロイ実行すると、CloudFormationのスタックが作成されて、デプロイされる

work $ cdk deploy

clean

CloudFormationのスタックが削除され、デプロイしたものが全て消える(S3などは残る)
PC上のファイルはそのまま残っている状態

work $ cdk destroy

Discussion