前回までは、ワークショップを基に AWS CDK を作成しました。

今回は、ゼロから AWS CDK を構築します。

まずは、プロジェクトのフォルダを作成します。

ターミナルで、プロジェクトのディレクトリに移動し、npm init -y  を実行します。

package.json が出来上がりました。

image2

AWS CDK に必要なパッケージをインストールします。

ターミナルで、npm install --save-dev aws-cdk ts-node typescript を実行します。

インストールが完了した後、さらにターミナルでnpm install --save aws-cdk-lib constructs を実行します。

インストールが完了しました。

image3

tsconfig.json を設定します。

{
  "compilerOptions": {
    "target": "ES2018",
    "module": "commonjs",
    "lib": ["es2018"],
    "declaration": true,
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "noImplicitThis": true,
    "alwaysStrict": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": false,
    "inlineSourceMap": true,
    "inlineSources": true,
    "experimentalDecorators": true,
    "strictPropertyInitialization": false,
    "typeRoots": ["./node_modules/@types"]
  },
  "exclude": ["node_modules", "cdk.out"]
}

bin フォルダを作成し、test-aws-cdk.ts を作成します。

cdk.json を作成し、CDK の設定を行います。

以下の JSON を入力します。

{
  "app": "npx ts-node bin/test-aws-cdk.ts"
}

lib ファイルを作成します。

cdk-stack.ts を作成しましょう。

aws-cdk-libからStackをインポートします。

CdkStackクラスを作成し、Stackを拡張します。

import { Stack } from "aws-cdk-lib"

export class CdkStack extends Stack {}

CdkStackの中には、コンストラクターを設定する必要があります。

コンストラクター内には、scopeidpropsを設定しましょう。

import { Stack, StackProps } from "aws-cdk-lib"
import { Construct } from "constructs"

export class CdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {}
}

scopeidpropsを super で呼び出します。

export class CdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)
  }
}

bin フォルダの test-aws-cdk.ts で、cdk-stack.ts のCdkStackを構築できる様にします。

import { App } from "aws-cdk-lib"
import { CdkStack } from "../lib/cdk-stack"

const app = new App()
new CdkStack(app, "CdkStack")

一通り完了したので、CloudFormation テンプレートを作成するために、ターミナルでcdk synthを実行します。

cdk.out ができました。

image4

AWS Lambda を作成します。

lambda フォルダを作成します。

hello.js を作成しましょう。

Hello, Lambda!と出力される関数を作成します。

exports.handler = async function (event) {
  console.log("request:", JSON.stringify(event, undefined, 2))
  return {
    statusCode: 200,
    headers: { "Content-Type": "text/plain" },
    body: "Hello, Lambda!",
  }
}

lib フォルダの cdk-stack.ts ファイルを開きます。

先程の hello.js をインポートします。

aws-sdk-libからaws_lambdaをインポートします。

import { Stack, StackProps, aws_lambda } from "aws-cdk-lib"

CdkStack クラスのコンストラクターに hello 関数を作成します。

第一に、ランタイムが必要になります。

ランタイムは、nodejs 14x を使用します。

次に、lambda フォルダのコードを指定します。

handler は、hello.js の handler を使用します。

export class CdkStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const hello = new aws_lambda.Function(this, "HelloHandler", {
      runtime: aws_lambda.Runtime.NODEJS_14_X,
      code: aws_lambda.Code.fromAsset("lambda"),
      handler: "hello.handler",
    })
  }
}

ターミナルで、cdk synth を実行します。

cdk.out フォルダに、asset フォルダができ、さらに hello.js ができました。

image5

ターミナルの最後に、CDK bootstrap のバージョン 6 が必要なので、、ターミナルでcdk bootstrap を実行してくださいと出ています。

cdk bootstrapを実行しましょう。

cdk bootstrap が完了した後、ターミナルでcdk deploy を実行し、デプロイします。

デプロイが完了しました。

AWS CloudFormation コンソールを見てみます。

CdkStack が出来上がっていました。

image6

CdkStack をクリックして、HelloHandler の物理 ID をクリックします。

画面スクロール下のコードを見てみると、

image7

先程、作成した hello.js が表示されました。

次回は、AWS CDK で hello のデータを DynamoDB に接続します。

ブログ一覧