【AWS】AWS Cloud Development Kit(AWS CDK)をゼロから構築する
AWS

【AWS】AWS Cloud Development Kit(AWS CDK)をゼロから構築する

作成日:2021年12月19日
更新日:2021年12月20日

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

aws-cdk-count-table

【AWS】AWS Cloud Development Kit(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 を設定します。

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 を入力します。

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

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

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

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

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

ts
import { Stack } from "aws-cdk-lib";
export class CdkStack extends Stack {}

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

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

ts
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 で呼び出します。

ts
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を構築できる様にします。

ts
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!と出力される関数を作成します。

js
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をインポートします。

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

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

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

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

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

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

ts
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 に接続します。

aws-cdk-apigateway-dynamodb

【AWS】AWS Cloud Development Kit(AWS CDK)でDynamoDBに接続する

© 2024あずきぱんウェブスタジオ