Open9
AWS CDKメモ
インストール
$ npm install -g aws-cdk
$ cdk --version
2.162.1 (build 10aa526)
$ cdk init app --language typescript
$ cdk bootstrap
でCDKToolkitっていうCloudFormationスタックが作成されるらしい。
chatGPTで調べたs3バケットの作成方法
src/bin/hello-cdk.ts
import * as cdk from 'aws-cdk-lib';
import { HelloCdkStack } from '../lib/hello-cdk-stack';
const app = new cdk.App();
new HelloCdkStack(app, 'HelloCdkStack', {
env: { region: 'us-east-1' },
});
src/cdk.json
- "app": "npx ts-node --prefer-ts-exts bin/src.ts",
+ "app": "npx ts-node --prefer-ts-exts bin/hello-cdk.ts",
src/lib/hello-cdk-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class HelloCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new s3.Bucket(this, 'MyBucket', {
bucketName: 'ここに作成したいバケット名を入れる',
});
}
}
テンプレート確認
$ cdk synth
デプロイ
$ cdk deploy
参考になるかも
cdkコマンド
Error: Cannot retrieve value from context provider vpc-provider since account/region are not specified at the stack level. Configure "env" with an account and region when you define your stack.エラー
src/lib/hello-cdk-stack.ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
-import * as s3 from 'aws-cdk-lib/aws-s3';
+import * as ec2 from 'aws-cdk-lib/aws-ec2';
export class HelloCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
+ const vpc = ec2.Vpc.fromLookup(this, 'MyExistingVpc', {
+ vpcId: [既存VPCのID]',
+ });
}
}
で既存VPCを参照しようとして、cdk diff
するとエラーに。
~/.aws/config
のaccountとregionを読み込むにはprocess.env.CDK_DEFAULT_ACCOUNT
、process.env.CDK_DEFAULT_REGION
と書けばいいらしい。
accountだけ参照したかったので、こうした。
src/bin/hello-cdk-stack.ts
import * as cdk from 'aws-cdk-lib';
import { HelloCdkStack } from '../lib/hello-cdk-stack';
const app = new cdk.App();
new HelloCdkStack(app, 'HelloCdkStack', {
env: {
+ account: process.env.CDK_DEFAULT_ACCOUNT,//
region: 'us-east-1'
},
});
そしたらcdk diff
して、cdk deploy
できた
手動変更の差分を取り込む方法
※cdk diff
はコードとcloudformationのスタックの差分を見るだけであって、実際のリソースを見ていない
- AWSコンソールからドリフトで差分検出
- 差分があれば詳細確認してコード側修正
-
cdk diff
でチェックしてcdk deploy
terraformよりは面倒である。
ちなみにリソースに差分があるままcdk deploy
すると
- cdkとcloudformation間で差分がなし → 何も変更なし
- 関係のないリソースをcdkでアレコレする → 何も変更なし
- 該当のリソースをcdkでちょい変更 → 何事もなかったかのようにcdkのコードで上書き(エラーとか出ない)
ということがわかった。怖いねぇ手動変更
質疑応答はなんかの参考になりそう
スタックは基本分割しない
ベストプラクティス