} class Firehose(){ new firehose1 new firehose2 new firehose3 } class S3(){ new bucket1 new bucket2 new bucket3 } new s3.bucket( this,”bucket1”,{ 共通設定1 共通設定2 ・・・ 個別設定1 ・・・ }) new s3.bucket( this,”bucket2”,{ 共通設定1 共通設定2 ・・・ 個別設定1 ・・・ }) バケット3 ・・・ 共通の設定を まとめる べた書き s3ComProps={ 共通設定1 共通設定2 ・・・ } new s3.bucket( this,”bucket1”,{ …S3ComProps, 個別設定1 ・・・ }) new s3.bucket( this,”bucket1”,{ …S3ComProps, 個別設定1 ・・・ }) バケット3 ・・・ ラッパー関数、 ラッパーConstruct ラッパークラス(Construct継承無) bucket1 = createS3(this,bucket1,{個別設 定}) bucket2 = createS3(this,bucket2,{個別設 定}) bucket3 = createS3(this,bucket3,{個別設 定}) ・・・ function createS3(scope,id,props){ const myBucket = new s3.bucket(scope,id,{ 共通設定1 共通設定2 props.個別設定1 ・・・ }) return myBucket } sfnlog = LogsToS3() lambdalog = LogsToS3() containerlog = LogsToS3() class LogsToS3(){ new logs new firehose new s3 } サービス単位の クラス分割(L2+) 機能単位の クラス分割(L3) 作成したクラス内で ラッパー関数等を 利用する合わせ技も! プログラミングは自由度が高く、思想がずれる。アプリ的な詳細設計をして思想を揃えよう。 CDKプログラミングのパターン #AWS - Qiita