どうも、nippa です。
Amazon Web Service(AWS)を使うことが増えてきたので、せっかくなので、インフラをコード管理したいと思っています。
そこで、AWS クラウド開発キット(CDK: Cloud Development Kit)の出番です。
最近、流行っている typescript を使って CDK を使っていきたいと思っています。
環境
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]
感想
これで、クラウドインフラ部分をコード管理できるようになり、インフラ部分の切り戻しも可能になります。
他のリージョンや契約に移行する場合も非常に楽になりますね。
どんどん使っていきたいと思います。
ではでは、また次回。