はじめに
このスライドはどこかでLT発表するためにつくりました。今回はAWS CDKを使うメリットについて改めてお話します。
自己紹介
AWS CDKとはなにか?
AWS CDKとは、プログラミング言語を使ってAWSのクラウド環境をプロビジョニングするためのオープンソースのフレームワークである。
AWS CDKではソースコードから**CloudFormation**を作成してリソースのクラウドへのデプロイを行う。
プロビジョニングとは?
AWSのインフラ環境を構築すること。通常のインフラ構築はマネジメントコンソールを使ってGUI上で行うが、CloudFormationとAWS CDKを用いる場合はテンプレートファイル(yaml, json, プロビジョニング言語)上にリソースを定義して行う。
マネジメントコンソールを使う問題点
例えば一度構築したAWSのインフラ環境の再現手順を記録したい場合、以下の2つの手段が思いつく
- コンソールで行った操作手順を記録する
- AWS CLIで同様の環境構築をするためのシェルスクリプトを書く
直感的に1.
も2.
の方法もやりたくはない。。。
CloudFormationを書くという方法
記述例
json
もしくはyml
の形式で定義ファイルを記述する。以下はDynamoDB
の例。
"myDynamoDBTable" : {
"Type" : "AWS::DynamoDB::Table",
"Properties" : {
"AttributeDefinitions": [ {
"AttributeName" : {"Ref" : "HashKeyElementName"},
"AttributeType" : {"Ref" : "HashKeyElementType"}
} ],
"KeySchema": [
{ "AttributeName": {"Ref" : "HashKeyElementName"}, "KeyType": "HASH" }
],
"ProvisionedThroughput" : {
"ReadCapacityUnits" : {"Ref" : "ReadCapacityUnits"},
"WriteCapacityUnits" : {"Ref" : "WriteCapacityUnits"}
}
}
}
定義したリソースをデプロイすることで、AWSのクラウド上に実際にリソースを構築することができる。
CloudFormationの問題点
- テンプレートファイルの記法を覚える必要がある
- それなりに独特のルールがあるので一種の言語に近い
- 構文エラーチェックがやりにくい
- 一応構文チェックしてくれるツールはある
- 冗長な構文が増える
- 共通化したいなら自分でシェルスクリプト書くしかない
AWS CDKを使うという方法
プログラミング言語
以下の言語が選択できる
記述例
TypeScriptでlambda
+API Gateway
+DynamoDB
の環境を記述した例
import * as cdk from '@aws-cdk/core'
import * as lambda from '@aws-cdk/aws-lambda'
import * as apigateway from '@aws-cdk/aws-apigateway'
import * as dynamodb from '@aws-cdk/aws-dynamodb'
export class CdkStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const table = new dynamodb.Table(this, 'Table', {
partitionKey: { name: 'key', type: dynamodb.AttributeType.STRING }
})
const handler = new lambda.Function(this, 'Handler', {
runtime: lambda.Runtime.NODEJS_10_X,
code: lambda.Code.asset('lambda'),
handler: 'index.handler',
environment: {
TABLE_NAME: table.tableName
}
})
table.grantReadWriteData(handler)
new apigawteway.LambdaRestApi(this, 'Endpoint', {
handler
})
}
}
AWS CDKだとシンプルにわかりやすくテンプレートが作成できる。
AWS CDKのいいところ
- 使い慣れた構文で書ける
- 共通化ができる
- 構文チェックがやりやすい
AWS CDKの問題点
- CloudFormationでできないことは同様にできない
- 出て間もないツールなので仕様のアップデートが頻繁に行われる
- 文献が少ない
詳しい情報
- 公式
- クラスメソッドの記事
さいごに宣伝
CDKのためにつくったnpmパッケージ
-
cdk-lambda-api
-
Lmbda
+API Gateway
のリソースをシンプルに構築できる
-
-
data-pipeline-d2s-cdk
-
DynamoDB
からS3
へのバックアップ行うData Pipeline
のリソース構築をシンプルにできる
-
AWS CDK関係で書いた記事
- CDKでSlack botを作ろう
- AWS CDK+React+TypeScriptでLIFF開発
- 自分のためのAlexaテンプレートをAWS CDKとGitHub Actionsを使って公開した
- CDKで「買い物リスト」LINE botをつくる