IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

AWS CDK初期設定(typescript)

どうも、nippa です。

Amazon Web Service(AWS)を使うことが増えてきたので、せっかくなので、インフラをコード管理したいと思っています。

そこで、AWS クラウド開発キット(CDK: Cloud Development Kit)の出番です。

最近、流行っている typescript を使って CDK を使っていきたいと思っています。

環境

  • MacOS 10.14
  • Node.js 14.14
  • aws-cdk 1.72.0

AWS Cloud Development Kit (AWS CDK)インストール

オープンソースですので、github にコードが公開されています。

https://github.com/aws/aws-cdk

インストール方法は github の README.md にも記載があります。

npm install -g aws-cdk

初期化

mkdir test-cdk
cd test-cdk
cdk init sample-app --language=typescript

git の初期化も同時に実行してくれます。

以下の 3 種類のコマンドで初期化可能です。

コマンド 概要
cdk init app --language=typescript 実行用、Stack 用のコード生成
cdk init lib --language=typescript Stack 用のコード生成
cdk init sample-app --language=typescript 実行用、Stack(サンプル) 用のコード生成

コード確認

サンプルアプリでは、libディレクトリに SQS のスタックが作成されています。

ls lib
cat lib/test-cdk-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 TestCdkStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

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

    const topic = new sns.Topic(this, "TestCdkTopic");

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

また実行用のコードはbinに作成されています。

ls bin
cat lib/test-cdk.ts

ファイルの内容は以下の通り。

#!/usr/bin/env node
import * as cdk from "@aws-cdk/core";
import { TestCdkStack } from "../lib/test-cdk-stack";

const app = new cdk.App();
new TestCdkStack(app, "TestCdkStack");

デプロイ方法

npx での開発を行ったことがある方は特に問題ないと思いますが、コマンドはpackage.jsonに記載されています。

cat package.json

{
  "name": "test-aws",
  "version": "0.1.0",
  "bin": {
    "test-cdk": "bin/test-cdk.js"
  },
  "scripts": {
    "build": "tsc",
    "watch": "tsc -w",
    "test": "jest",
    "cdk": "cdk"
  },
  "devDependencies": {
    "aws-cdk": "1.71.0",
    "@aws-cdk/assert": "1.71.0",
    "@types/jest": "^26.0.10",
    "@types/node": "10.17.27",
    "jest": "^26.4.2",
    "ts-jest": "^26.2.0",
    "ts-node": "^8.1.0",
    "typescript": "~3.9.7"
  },
  "dependencies": {
    "@aws-cdk/aws-sns": "1.71.0",
    "@aws-cdk/aws-sns-subscriptions": "1.71.0",
    "@aws-cdk/aws-sqs": "1.71.0",
    "@aws-cdk/core": "1.71.0"
  }
}

ビルドを以下のコマンドで行います。

npm run build

デプロイ前に現状のAWSの環境(CloudFormation)の情報を取得し、差分を確認します。

cdk synth --profile [AWS profile name]
cdk diff 

AWS へのデプロイは、以下のコマンドで行います。

cdk deploy [stack name]

stack すべてをデプロイする場合は、--allオプションをつけます。

cdk deploy --all

profile を指定して、デプロイは--profile [AWS profile name]を指定して行えます。

cdk deploy [stack name] --profile [AWS profile name]

デプロイしたstackを破棄する場合は、以下になります。

cdk destory [stack name]

感想

これで、クラウドインフラ部分をコード管理できるようになり、インフラ部分の切り戻しも可能になります。

他のリージョンや契約に移行する場合も非常に楽になりますね。

どんどん使っていきたいと思います。

ではでは、また次回。