AWS CDK v2 事始め(1):S3バケットを作る
CDK(の勉強)はじめました
AWS CDKを使えるようになりたく勉強はじめました。
CDKでS3バケットを作れたのでその備忘録です。
== 2023-09-09 追記 CDK勉強まとめ ==
- AWS CDK v2 事始め(1):S3バケットを作る
- AWS CDK v2 事始め(2):S3バケットにバケットポリシーを付与する
- AWS CDK v2 事始め(3):基本構成を理解したい
-
AIによる学習:ChatGPT先生にCDK v2 (TypeScript) を教えてもらったときに使ったプロンプトパターン
- CDKのコードと知識を一気に高める方法かも
-
AWS-CDK_memo
- もろもろ作ったCDK v2 TypeScriptをgithubに格納
==================================
環境
Cloud9(t3.micro)
iam0001:~/environment $ cdk --version
2.55.1 (build 30f1ae4)
iam0001:~/environment $ npm --version
9.2.0
iam0001:~/environment $ aws --version
aws-cli/2.9.6 Python/3.9.11 Linux/4.14.301-224.520.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
S3バケット作成①
できるだけ簡易な方法でCDKでS3バケットを作成してみます。
新規プロジェクト用にディレクトリを作成し、カレントディレクトリにします。
PJ_NAME=CdkWorkshopStack
mkdir ${PJ_NAME}
cd ${PJ_NAME}
TypeScript CDKプロジェクトを作成します。
cdk init app --language typescript
TypeScriptをJavaScritpにコンパイルします。
npm run build
lib/CdkWorkshopStack.ts を更新し、S3バケットを作成する処理を追記します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const bucket = new s3.Bucket(this, 'CreateBucket', {
bucketName: "test-bucket-20221231",
versioned: true
});
}
}
デプロイします。
cdk deploy
S3バケットが作成されました。
iam0001:~/environment/cdk-workshop (master) $ aws s3 ls | grep test-bucket
2023-01-02 00:47:02 test-bucket-20221231
S3バケット作成②
"S3バケット作成①"の続きで進めます。"S3バケット作成①"ではバケット名をスクリプトに直接記載していました。今回は、コンテキストを使用しS3バケット名を指定します。今回はcdk.json
を使用します。
cdk.json
に変数BucketName01
を設定します。
{
"app": "npx ts-node --prefer-ts-exts bin/cdk-workshop.ts",
"watch": {
: (省略)
},
"context": {
"@aws-cdk/aws-lambda:recognizeLayerVersion": true,
"@aws-cdk/core:checkSecretUsage": true,
"@aws-cdk/core:target-partitions": [
"aws",
"aws-cn"
],
"@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
: (省略)
"@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true,
"BucketName01": "test-bucket-20230101-01"
}
}
lib/cdk-workshop-stack.ts
を更新し変数BucketName01
でS3バケット名を指定するようにします。S3バケット名も変えておきます。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const BucketName01 = this.node.tryGetContext("BucketName01")
const bucket = new s3.Bucket(this, 'CreateBucket', {
bucketName: BucketName01,
versioned: true
});
}
}
cdk diff
で、想定通りに変更できたか確認します。
iam0001:~/environment/cdk-workshop (master) $ cdk diff
Stack CdkWorkshopStack
Resources
[~] AWS::S3::Bucket CreateBucket CreateBucketEFE7EF15 replace
└─ [~] BucketName (requires replacement)
├─ [-] test-bucket-20230102
└─ [+] test-bucket-20230101-01
バケット名が変更することがちゃんと判定されました。cdk deploy
を実行しS3バケットが作成されたことを確認します。
iam0001:~/environment/cdk-workshop (master) $ aws s3 ls | grep test-bucket
2023-01-02 01:01:42 test-bucket-20230101-01
2023-01-02 00:53:08 test-bucket-20230102
S3バケット作成③
"S3バケット作成②"の続きで進めます。"S3バケット作成②"ではコンテキストをcdk.json
を使用しました。今回は、デプロイ時にコンテキスト・バリューを上書き設定します。
cdk deploy --context BucketName01=test-bucket-20230102-01
S3バケットが作成されたことを確認します。
iam0001:~/environment/cdk-workshop (master) $ aws s3 ls | grep test-bucket
2023-01-02 01:01:42 test-bucket-20230101-01
2023-01-02 00:53:08 test-bucket-20230102
2023-01-02 01:19:20 test-bucket-20230102-01
S3バケット作成④
"S3バケット作成③"の続きで進めます。
bin/cdk-workshop.ts
を更新しコンテキストを設定します。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { CdkWorkshopStack } from '../lib/cdk-workshop-stack';
const app = new cdk.App({
context: {
BucketName02: 'test-bucket-20230102-02',
},
})
new CdkWorkshopStack(app, 'CdkWorkshopStack', {});
lib/cdk-workshop.ts
を更新し変数BucketName02
でS3バケット名を指定します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class CdkWorkshopStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
//const BucketName01 = this.node.tryGetContext("BucketName01")
const BucketName02 = this.node.tryGetContext("BucketName02")
const bucket = new s3.Bucket(this, 'CreateBucket', {
bucketName: BucketName02,
versioned: true
});
}
}
cdk diff
で、想定通りに変更できたか確認します。
iam0001:~/environment/cdk-workshop (master) $ cdk diff
Stack CdkWorkshopStack
Resources
[~] AWS::S3::Bucket CreateBucket CreateBucketEFE7EF15 replace
└─ [~] BucketName (requires replacement)
├─ [-] test-bucket-20230102-01
└─ [+] test-bucket-20230102-02
バケット名が変更することがちゃんと判定されました。cdk deploy
を実行しS3バケットが作成されたことを確認します。
iam0001:~/environment/cdk-workshop (master) $ aws s3 ls | grep test-bucket
2023-01-02 01:01:42 test-bucket-20230101-01
2023-01-02 00:53:08 test-bucket-20230102
2023-01-02 01:19:20 test-bucket-20230102-01
2023-01-02 01:47:29 test-bucket-20230102-02
今回はここまで。
とりあえずCDKのコンテキスト(context
)で変数を扱うことができました。
Discussion
cdk depoly になっていたのでコメント。
正式には cdk deploy ですかね。
ありがとうございます!修正しましたぁ!