2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

aws-cdk的Hello World ~cdk環境構築~ aws-cdk#1

Last updated at Posted at 2022-03-11

はじめに

AWS環境をaws-cdkを使って構築するようになったので
そのキャッチアップも兼ねて共有していこうと思います。

こちらの記事を参考に進めていく中で、自分なりに気づいたところを書いていきます。
https://dev.classmethod.jp/author/tanaka-keisuke/

AWS-CDKとは

AWS環境の構築を使い慣れたプログラミング言語で記述してしまおう!!という試みです。
IaCの一種ですね

TypeScriptで書いたソース

cdk deployを実行

CloudFormationのテンプレートに自動で変換

CloudFormationのAPIからそのままデプロイ

やることはコードを書く+cdk deployを実行だけ!!
これだけでAWSのコンソールぽちぽちから解放されるのです!!
まあ、コードを書くのがしんどいのですが。。

-参考- AWS-SDK

似たようなツールにAWS-SDKがあります。
名前も似ている上に、これもプログラミング言語でAWSを操作できるというからややこしい。。。
ただこっちはプログラミング言語を使ってAPIを直接叩きに行っているというところがミソです。

CDKがCfnテンプレートを作って構築するのと比較するとわかりやすいですね。
Cfnのロールバックやスタックごとに管理するという機能を使えないのがSDKの弱点ですね。

環境構築

以下のような環境で構築していきます。

% node -v
v14.16.0

% aws --version
aws-cli/2.4.18 Python/3.8.8 Darwin/21.3.0 exe/x86_64 prompt/off

% cdk --version
1.142.0

プロジェクト作成

aws-cdkインストール

aws-cdkがインストールされていない場合は以下のコマンドでインストールします。
実行ディレクトリをawsとします。

//バージョンを指定する場合は@以下で指定します。
aws % npm install "aws-cdk@1.142.0"
..略
+ aws-cdk@1.142.0
added 212 packages from 231 contributors and audited 212 packages in 12.086s
..略

aws % cdk --version
1.142.0
//想定通りのバージョンがインストールされていることを確認します。

インストールが完了すると実行ディレクトリ配下に以下のようなファイルが作成されます。

aws % ls -l
drwxr-xr-x  4 private  staff    128  3 11 21:47 node_modules
-rw-r--r--  1 private  staff  79198  3 11 21:47 package-lock.json

プロジェクト作成

いよいよcdkプロジェクトの作成です。
ここで作成するディレクトリがプロジェクトディレクトリとなります

aws % mkdir cdk && cd cdk

//下記コマンドで初期ファイルを自動で作成・配置します。
cdk % cdk init app --language typescript
..略
✅ All done!
*************************************************************************************************************************************************
*** Newer version of CDK is available [2.15.0]                                                                                                ***
*** Information about upgrading from version 1.x to version 2.x is available here: https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html ***
*** Upgrade recommended (npm install -g aws-cdk)                                                                                              ***
*************************************************************************************************************************************************
//新バージョンの2.15.0に上げろと言ってきますが無視します。

aws-cdk V2は別の機会に検証しようと思います。

cdk配下には以下のようなファイル、ディレクトリが作成されます。

cdk % ls -l
-rw-r--r--    1 private  staff     543  3 11 22:00 README.md
drwxr-xr-x    3 private  staff      96  3 11 22:00 bin
-rw-r--r--    1 private  staff    1256  3 11 22:00 cdk.json
-rw-r--r--    1 private  staff     157  3 11 22:00 jest.config.js
drwxr-xr-x    3 private  staff      96  3 11 22:00 lib
drwxr-xr-x  361 private  staff   11552  3 11 22:00 node_modules
-rw-r--r--    1 private  staff  269154  3 11 22:00 package-lock.json
-rw-r--r--    1 private  staff     530  3 11 22:00 package.json
drwxr-xr-x    3 private  staff      96  3 11 22:00 test
-rw-r--r--    1 private  staff     650  3 11 22:00 tsconfig.json

ファイル説明

重要な(だと思う)ファイルについてここで軽く触れます

bin/cdk.ts

このファイルでスタックを記述し、Cfnのテンプレートにしていく
初期状態の内容はこんな感じ(コメントは省略してます)

import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { CdkStack } from '../lib/cdk-stack';

const app = new cdk.App();
new CdkStack(app, 'CdkStack', {
  //ここにコードを追記していく
});
lib/cdk-stack.ts

ここでbin/cdk.tsに記述するスタックのclassを記述していく。
初期状態はこう(コメントは省略してます)

import * as cdk from '@aws-cdk/core';

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

     });
  }
}

AWSアカウント設定

aws-cdk がスタックをデプロイする際にAWSアカウントの認証情報が必要になる。
以下の通り設定する。
※AWSCLIのインストールがまだの場合はこちら
※IAMコンソールからAWSアカウントのAccessKeyとSeacretKeyは取得する。

//profile名は任意で指定してください。
% aws configure --profile test
AWS Access Key ID [None]:1111111111
AWS Secret Access Key [None]:AAAAAAAAAAAA
Default region name [None]:ap-northeast-1
Default output format [None]:
%
//credentialsファイルが作成され、中身にAccessKeyとSeacretKeyが設定されていること
% cd ~
~ % ls .aws
-rw-------  1 private  staff   39  3  8 21:29 config
-rw-------  1 private  staff  113  3  8 21:29 credentials

やっとスタック作成

今回は初回なのでS3バケットが作成されることを確認して完了としようと思います。

ライブラリインストール

リファレンスを見ながら必要なパッケージをインストール。

//パッケージのバージョンはcdkのバージョンと揃える!
cdk % npm install "@aws-cdk/aws-s3@1.142.0"
..略
+ @aws-cdk/aws-s3@1.142.0
added 28 packages from 15 contributors and audited 240 packages in 8.435s 
参考までに。。。

package.jsonを確認すると、インストールされたパッケージが自動的に記録されます。

..略
"dependencies": {
    "@aws-cdk/aws-s3": "^1.142.0", //追加されてますね
    "@aws-cdk/core": "1.142.0",
    "source-map-support": "^0.5.16"
  }

今後もライブラリを追加するたびにこのファイル(とpackage-lock.json)は自動的に更新されます。

ちなみに、、

npm installを実行するとpackage.jsonに記述されたとおりに(バージョンも含めて)インストールされるので
一気にインストールしたい時などは、このファイルを更新してからnpm installがおすすめです。

スタック作成

lib/cdk-stack.ts

まずはこちらから編集していきます。
ここではCdkStackクラスを設定していきます。
このクラスを実際に記述するのはbin/cdk.tsです。

import { Bucket } from "@aws-cdk/aws-s3";
+import * as cdk from "@aws-cdk/core";

export class CdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
+    new Bucket(this, "FirstBucket");
  }
}

これだけ、これだけでS3Bucketが作成されます。
とはいえ寂しいので名前だけでもつけてみます。

import { Bucket } from "@aws-cdk/aws-s3";
import * as cdk from "@aws-cdk/core";

export class CdkStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
-    new Bucket(this, "FirstBucket");
+    new Bucket(this, "FirstBucket", {
+      bucketName: "myfirstbucket220311",
+    });
  }
}

リファレンスを見るとデフォルト暗号化(encryption)やライフサイクルポリシー(lifecycleRules)も設定できそうですがまたの機会とします。

bin/cdk.ts

実はこのファイルは何も書かなくてもデフォルトの状態でAWS上にデプロイできてしまうんです。
というのも

import "source-map-support/register";
import * as cdk from "@aws-cdk/core";
import { CdkStack } from "../lib/cdk-stack";

const app = new cdk.App();
new CdkStack(app, "CdkStack", {});

先ほど書いたCdkStackが既に記述されているからです。便利!!

Stackデプロイ

それではいよいよcdk deployをしていきたいと思います!
が、デプロイの前にどんな変更がAWSにされるのかを確認します。

cdk % cdk diff CdkSack --profile test
..略
Resources
[+] AWS::S3::Bucket FirstBucket FirstBucket8E7B2622 

cdk diffで現状のAWS上のスタックとの差異を確認できます。
cdk diff [Stack名] --profile [profile名]が構文です。

想定通り、S3が作成されるという結果だったのでデプロイしていきます。
構文はcdk deploy [Stack名] --profile [profile名]です。

cdk % cdk deploy CdkStack --profile test
✨  Synthesis time: 2.13s

CdkStack: deploying...
CdkStack: creating CloudFormation changeset...






 ✅  CdkStack

✨  Deployment time: 37.44s

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:527985513840:stack/CdkStack/4f083290-a147-11ec-910a-06d813364df5

✨  Total time: 39.57s

無事デプロイできたようです。

% aws s3 ls --profile test
2022-03-11 23:27:11 myfirstbucket220311
必要に応じて

必要に応じてcdk destroy --profle testにてスタックを削除します。
今回はオブジェクトが入っていないので無課金ですが、思わぬ課金対象にお金を取られないように気をつけてください!

最後に

長くなりましたが、aws-cdkのHello World的初期作業でした。
AWSアカウントのクレデンシャルなんかはハマりポイントでしたね。--profile指定に苦しみました。

これで終わりというわけではなく、実施した検証は都度#2.3...と続けていきたいなと思います。
次回

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?