LoginSignup
6
2

More than 3 years have passed since last update.

AWS CDKで快適なクラウド開発

Last updated at Posted at 2020-03-20
1 / 19

はじめに

このスライドはどこかでLT発表するためにつくりました。今回はAWS CDKを使うメリットについて改めてお話します。


自己紹介


AWS CDKとはなにか?

AWS CDKとは、プログラミング言語を使ってAWSのクラウド環境をプロビジョニングするためのオープンソースのフレームワークである。
AWS CDKではソースコードからCloudFormationを作成してリソースのクラウドへのデプロイを行う。


プロビジョニングとは?

AWSのインフラ環境を構築すること。通常のインフラ構築はマネジメントコンソールを使ってGUI上で行うが、CloudFormationAWS CDKを用いる場合はテンプレートファイル(yaml, json, プロビジョニング言語)上にリソースを定義して行う。


マネジメントコンソールを使う問題点

例えば一度構築したAWSのインフラ環境の再現手順を記録したい場合、以下の2つの手段が思いつく

  1. コンソールで行った操作手順を記録する
  2. AWS CLIで同様の環境構築をするためのシェルスクリプトを書く

直感的に1.2.の方法もやりたくはない。。。


CloudFormationを書くという方法


記述例

jsonもしくはymlの形式で定義ファイルを記述する。以下はDynamoDBの例。

dynamodb.template
"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関係で書いた記事


みんなも始めようAWS CDK!

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2