AWSをIaC(Infrastrucre As Code)できるCDK(Cloud Developer Kit)を使ってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# フォルダ名が、そのままCDKプロジェクト名になる mkdir cdk-sample-system cd cdk-sample-system # CDKプロジェクトそのものを作る(200MB近くダウンロードされる) cdk init app --language typescript # AWSのパッケージをインストール(CDK v2) npm install aws-cdk-lib constructs # CDKプロジェクト内に フロントエンド(S3)とバックエンド(Lambda)用のディレクトリ を作る。 mkdir frontend lambda echo. > frontend\index.html echo. > lambda\index.ts # gitの初期設定。パッケージは対象外() git init # git init後に.gitignoreファイルを手動で修正する git add . git commit -m "初回コミット: `.gitignore` 修正" |
.gitignoreファイル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Node.js関連の不要ファイル node_modules/ package-lock.json # TypeScriptの型定義ファイル(自動生成されるもの) *.d.ts # JavaScriptのビルドファイルを無視(必要なら削除) *.js # 例外として jest の設定ファイルは管理対象にする !jest.config.js # CDK関連の出力ファイル cdk.out/ .cdk.staging/ |
lib/cdk-sample-system-stack.ts そのまま修正せずにAWSにデプロイしてみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; // import * as sqs from 'aws-cdk-lib/aws-sqs'; export class CdkSampleSystemStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // The code that defines your stack goes here // example resource // const queue = new sqs.Queue(this, 'CdkSampleSystemQueue', { // visibilityTimeout: cdk.Duration.seconds(300) // }); } } |
1 2 3 4 5 6 7 8 9 |
# cdk deployする前に AWS 環境に必要なリソースを準備。 # CDKプロジェクト毎ではなく、初めてCDKを使う前に1回だけ実行 cdk bootstrap # Bootstrapping environment aws://<account-id>/<region> # CloudFormation テンプレートを確認 cdk synth # デプロイするものがない cdk deploy |
S3だけを作るtypescript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// AWS CDK のライブラリをインポート(CDK の基本機能を使うため) import * as cdk from 'aws-cdk-lib'; // AWS CDK の Construct クラスをインポート(CDK のリソースを定義するために必要) import { Construct } from 'constructs'; // AWS S3 の CDK モジュールをインポート(S3 バケットを作成するため) import * as s3 from 'aws-cdk-lib/aws-s3'; // `CdkSampleSystemStack` クラスを定義(AWS CDK のスタック = AWS リソースの集合) export class CdkSampleSystemStack extends cdk.Stack { // コンストラクタ(CDK のスタックを作成するための基本構成) constructor(scope: Construct, id: string, props?: cdk.StackProps) { // 親クラス(cdk.Stack)のコンストラクタを呼び出し、スタックを初期化 super(scope, id, props); // S3 バケットを作成(この CDK スタック内に `TestBucket` という S3 バケットを作成) new s3.Bucket(this, 'TestBucket', { // `TestBucket` は **CDK 内部でのリソース識別名(論理ID)** versioned: true, // S3 バケットのバージョニングを有効化(過去のバージョンも保持) removalPolicy: cdk.RemovalPolicy.DESTROY, // `cdk destroy` を実行した際に **バケットも削除** autoDeleteObjects: true, // バケットの **中身(オブジェクト)も削除**(デフォルトではバケット削除時にエラーになる) }); } } |
もう一回deployすると、S3バケットを削除する権限をlambdaに与えても良い?と聞いてくるのでyes
S3の管理画面で、CDK のスタック名 + バケット名 + ランダムな英数字 が組み合わさったS3バケットが生成されているはず。
1 |
cdk destroy |