æ¬çš¿ã¯ã2021 幎 12 æ 2 æ¥ã« AWS Developer Tools Blog ã§å
¬éããã â Increasing development speed with CDK Watch â ã翻蚳ãããã®ã§ãã AWS Cloud Development Kit (CDK) ã® CLI ã«å°å
¥ãããŠããæäœã¢ãŒã cdk watch ãããã³ cdk deploy ã®ãã©ã° --hotswap ãš --no-rollback ã玹ä»ããŸãã cdk watch ã¯ã³ãŒããšã¢ã»ããã®å€æŽãç£èŠãããã¡ã€ã«å€æŽãæ€åºããããã³ã«æé©ãªåœ¢åŒã®ãããã€ãèªåçã«å®è¡ããããšã§ãéçºãå¹çåã§ããŸããããã«ãããCDK ã¢ããªã±ãŒã·ã§ã³ã«å€æŽãå ãããã³ã« cdk deploy ãå®è¡ããå¿
èŠããªããªããŸãã cdk watch ã§ã¯ --hotswap ãã©ã°ã䜿çšã§ãã倿Žã®å Žåã¯äœ¿çšããã AWS CloudFormation ã§ã®ãã«ãããã€ãè¡ããã«ã€ã³ãã¬ãŒã¹ã§æŽæ°ãããŸãã AWS Lambda ãã³ãã©ãŒã³ãŒãã Amazon ECS ã³ã³ããã€ã¡ãŒãžã AWS Step Functions ã¹ããŒããã·ã³ãªã©ã® CDK ã¢ã»ããã§ã¯ãCDK CLI ãå AWS ãµãŒãã¹ã® API ã䜿çšããŠçŽæ¥æŽæ°ããŸãããã以å€ã®ã¢ã»ããã§ã¯ãCloudFormation ã®ãã«ãããã€ãå®è¡ãããŸãããŸãã --no-rollback ãã©ã°ã䜿çšããããšã§ CloudFormation ã®æŽæ°å€±ææã«ããŒã«ããã¯ãè¡ãããªãããã«ãªãããããããã€å€±ææã«åå®è¡ãããŸã§ã®æéãççž®ã§ããŸãã 以äžã®æé ãå®è¡ããããšã§ã cdk watch ããã³ --hotswap ã --no-rollback ãã©ã°ã®åãã確èªã§ããŸãããã®èšäºã§ã¯ TypeScript ã§ CDK ã䜿çšããŸããã watch 㯠CDK ã§ãµããŒããããŠãããã¹ãŠã®èšèªã§æ©èœããŸããæåã«ç©ºã® CDK ã¢ããªã±ãŒã·ã§ã³ãäœæããTypeScript ãš Express ã䜿çšããã·ã³ãã«ãªã³ã³ããã¢ããªã±ãŒã·ã§ã³ã远å ããŸããæ¬¡ã«ãã¢ããªã±ãŒã·ã§ã³ããããã€ããããã«å¿
èŠãªã€ã³ãã©ã¹ãã©ã¯ãã£ãäœæãã CDK ã¹ã¿ãã¯ãèšè¿°ããŸããæåŸã«ã cdk watch ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«ç¹°ãè¿ã倿Žãå ããŠãããŸãã åææ¡ä»¶ AWS ã¢ã«ãŠã³ããæã£ãŠããããš ããŒã«ã«ã« CDK ãã€ã³ã¹ããŒã«ãããŠããããš ã»ããã¢ãã CDK CLI V2 ãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ãã ( cdk watch 㯠V1 ã§ãåäœããŸããããã®èšäºã§ã¯ãã¹ãŠ V2 ã䜿çšããŠããŸã)ããŸã ã€ã³ã¹ããŒã«ããŠããªãå Žåã¯ã AWS CDK éçºè
ã¬ã€ã ã®æé ãåç
§ããŠã€ã³ã¹ããŒã«ããŠãã ãããã€ã³ã¹ããŒã«ãæ£ããè¡ãããããšã確èªããã«ã¯ãã¿ãŒããã«ã§ cdk --version ã³ãã³ããå®è¡ããŸããæ¬¡ã®ããã«åºåãããã°åé¡ãããŸããã â» æ¬ããã°èšäºã§ã¯ãCDK CLI ããŒãžã§ã³ 2.141.0 ã§åäœç¢ºèªããŠããŸããä»ã®ããŒãžã§ã³ã§ã¯æåãç°ãªãå¯èœæ§ãããã®ã§ããæ³šæãã ããã cdk --version 2.X.X (build XXXXXXX) æåã«ãã¿ãŒããã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããTypeScript ã® CDK ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã mkdir cdk-watch cd cdk-watch cdk init --language=typescript ã¢ããªã±ãŒã·ã§ã³ã³ãŒã cdk-watch ãã£ã¬ã¯ããªäžã§ãDocker ã€ã¡ãŒãžããã«ãããããã«å¿
èŠãªãã£ã¬ã¯ããªãšãã¡ã€ã«ãäœæããŸãã mkdir docker-app 次ã«ãã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã宣èšãã package.json ãäœæããå¿
èŠããããŸããèšèŒããå¿
èŠãããäŸåé¢ä¿ã¯ Express ã®ã¿ã§ããTypeScript ã¯ã¢ããªã±ãŒã·ã§ã³ãããã€åã« JavaScript ã«ã³ã³ãã€ã«ããããããäŸåé¢ä¿ãšããŠå®£èšããå¿
èŠã¯ãããŸããã docker-app/package.json ã®ãã¡ã€ã«ãäœæããæ¬¡ã®å
容ã远å ããŠãã ããã { "name": "simple-webpage", "version": "1.0.0", "description": "Demo web app running on Amazon ECS", "license": "MIT-0", "dependencies": { "express": "^4.17.1" }, "devDependencies": { "@types/express": "^4.17.13" } } 次ã«ããŠã§ãããŒãžãšããŠè¡šç€ºãããããã® HTML ãã¡ã€ã«ãäœæããå¿
èŠããããŸãã docker-app/index.html ã®ãã¡ã€ã«ãäœæããæ¬¡ã®å
容ã远å ããŠãã ããã <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Simple Webpage </title> </head> <body> <div align="center"> <h2>Hello World</h2> <hr width="25%"> </div> </body> </html> äœæãã HTML ãã¡ã€ã«ãããµã€ãã«ã¢ã¯ã»ã¹ããéã«è¡šç€ºãããããã«ããããã® Express ã³ãŒããäœæããŸãã docker-app/webpage.ts ã®ãã¡ã€ã«ãäœæããæ¬¡ã®ã³ãŒãã远å ããŠãã ããã import * as express from 'express'; const app = express(); app.get("/", (req, res) => { res.sendFile(__dirname + "/index.html"); }); app.listen(80, function () { console.log("server started on port 80"); }); æåŸã«ãã¢ããªã±ãŒã·ã§ã³ãèµ·åãã Dockerfile ãäœæããŸãã docker-app/Dockerfile ã®ãã¡ã€ã«ãäœæããæ¬¡ã®ã³ãŒãã远å ããŠãã ããã FROM node:alpine RUN mkdir -p /usr/src/www WORKDIR /usr/src/www COPY . . RUN npm install --production-only CMD ["node", "webpage.js"] ã€ã³ãã©ã¹ãã©ã¯ãã£ã³ãŒã 次ã«ãWeb ããŒãžããã¹ãããã€ã³ãã©ã¹ãã©ã¯ãã£ãå®çŸ©ãã CDK ã¹ã¿ãã¯ãäœæããŸãã aws_ecs_patterns ã¢ãžã¥ãŒã«ã® ApplicationLoadBalancedFargateService ã³ã³ã¹ãã©ã¯ãã䜿çšããããšã§ãã¹ã¿ãã¯ã倧å¹
ã«åçŽåã§ããŸãã lib/cdk-watch-stack.ts ãæ¬¡ã®äŸã®ããã«ä¿®æ£ããŠãã ããã import { Stack, StackProps, aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class CdkWatchStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 2, natGateways: 1, }); new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'EcsService', { vpc, taskImageOptions: { image: ecs.ContainerImage.fromAsset('docker-app'), containerPort: 80, }, }); } } cdk.json ã® build ããŒã§æå®ãããã³ãã³ãã¯ã cdk watch å®è¡æãå«ããã¹ãŠã®ãããã€æã«ãsynthesis ã¹ãããã®åã«å®è¡ãããŸããä»åäœæãã TypeScript ã¢ããªã±ãŒã·ã§ã³ã¯ JavaScript ã«ã³ã³ãã€ã«ããå¿
èŠãããã®ã§ã cdk.json ã® "app" ããŒãšåãéå±€ã«ä»¥äžã®ã³ãŒãã远å ããŠãã ããã "build": "cd docker-app && npm install && tsc", ããã«ãããå®å
šã«ãµãŒããŒã¬ã¹ãª Docker ã¢ããªã±ãŒã·ã§ã³ãäœæãããŸãããããã®å€æŽãè¡ã£ãããæ¬¡ã®ã³ãã³ããå®è¡ããŠãã ããã yarn install # ã奜ã¿ã§ "npm install" ãã䜿ããã ãã cdk deploy ãããã€ãå®äºãããšã以äžã®ããã«åºåãããã¯ãã§ãã Bash â
CdkWatchStack Outputs: CdkWatchStack.EcsServiceLoadBalancerDNS6D595ACE = CdkWa-EcsSe-18QPSCKV5G8XP-xxxxxxxxxx.us-east-2.elb.amazonaws.com CdkWatchStack.EcsServiceServiceURLE56F060F = http://CdkWa-EcsSe-18QPSCKV5G8XP-xxxxxxxxxx.us-east-2.elb.amazonaws.com Stack ARN: arn:aws:cloudformation:us-east-2:xxxxxxxxxxxx:stack/CdkWatchStack/1b15db20-428a-11ec-b96f-xxxxxxxxxxxx Outputs ã»ã¯ã·ã§ã³ã® 2 è¡ç®ã«èšèŒãããŠãããªã³ã¯ãéããŠãã ããããHello WorldããšæžãããããŒãžã衚瀺ãããã¯ãã§ãã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å€æŽ ã¢ããªã±ãŒã·ã§ã³ããããã€ãããã cdk watch ã䜿çšããŠå€æŽãå ããŠããããšãã§ããŸããã¿ãŒããã«ã§ cdk watch ãå®è¡ãããšã以äžã®ãããªåºåã衚瀺ãããŸãã 'watch' is observing directory '' for changes 'watch' is observing the file 'cdk.context.json' for changes 'watch' is observing directory 'bin' for changes 'watch' is observing directory 'docker-app' for changes 'watch' is observing directory 'lib' for changes 'watch' is observing the file 'bin/cdk-watch.ts' for changes 'watch' is observing the file 'lib/cdk-watch-stack.ts' for changes 'watch' is observing the file 'docker-app/Dockerfile' for changes 'watch' is observing the file 'docker-app/index.html' for changes 'watch' is observing the file 'docker-app/package.json' for changes 'watch' is observing the file 'docker-app/webpage.ts' for changes ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã倿Žããå Žåã cdk watch ã䜿çšããããšã§ãããã€ãé«éåã§ããŸãã以äžã®å€æŽã index.html ã«å ããåäœã確èªããŠã¿ãŸãããã <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title> Simple Webpage </title> </head> <body> <div align="center"> <h2>Hello World</h2> <hr width="25%"> <p>A paragraph</p> </div> </body> </html> ã¿ãŒããã«ãèŠããšã cdk watch ã倿Žãæ€ç¥ããŠãããã€ããæ§åã確èªã§ããŸãã Detected change to 'docker-app/index.html' (type: change). Triggering 'cdk deploy' â The --hotswap flag deliberately introduces CloudFormation drift to speed up deployments â It should only be used for development - never use it for your production Stacks! ãã®èŠåã¡ãã»ãŒãžã¯ãä»åã®å€æŽããããã¹ã¯ããã§ãããã€ãããããšãæå³ããŠããŸããã€ãŸãããã®ãããã€ã¯æŽæ°å¯Ÿè±¡ã®ãªãœãŒã¹ãæäŸããŠãããµãŒãã¹ API ãçŽæ¥å®è¡ããããšã§è¡ãããCloudFormation ããã€ãã¹ãããŸãããã®ãããCloudFormation ãã³ãã¬ãŒããšãããã€ãããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®éã«ããªãããçºçããŸãããã®ãããªããªããçºçãåé¿ãããããæ¬çªç°å¢ã§ã¯çµ¶å¯Ÿã«ãããã¹ã¯ããã䜿çšããŠã¯ãããŸããããããã¹ã¯ããã«ããé«éãªãããã€ãã§ããŸãããCloudFormation ã®ããã«å®å
šã«ãããã€ã§ããæ©èœã§ã¯ãªãããããããã¹ã¯ããã¯é«éãªã³ãŒãã£ã³ã°ã»ã³ã³ãã€ã«ã»ãã¹ãã®ã«ãŒããåãå¿
èŠãããéçºç°å¢ã§ã®äœ¿çšã«æé©ã§ãã watch å®è¡äžã«ãããã¹ã¯ãããç¡å¹ã«ãããå Žåã¯ã watch å®è¡æã« --no-hotswap ãã©ã°ãæå®ããŠãã ãããCloudFormation ãšã¢ããªã±ãŒã·ã§ã³éã®ããªãããå®å
šã«åãé€ãå¿
èŠãããå Žåã¯ã cdk deploy ãå®è¡ããããšã§ CloudFormation ãã«ãããã€ãè¡ãããŸãã cdk watch ãå®è¡ããã«ãããã¹ã¯ãããããã€ãè¡ãããå Žåã¯ã cdk deploy --hotswap ãå®è¡ããŠãã ããã ãããã€ãå®äºããããããŒãžãæŽæ°ããŠãã ãããHello World ã®ããŒãžã以äžã®ããã«æŽæ°ãããŠããã¯ãã§ãã ã€ã³ãã©ã¹ãã©ã¯ãã£ã³ãŒãã®å€æŽ ãã¹ãŠã®ãªãœãŒã¹å€æŽããããã¹ã¯ããã§ããããã§ã¯ãããŸãããLambda 颿°ã®ã³ãŒã倿ŽãECS ãµãŒãã¹ã®ã³ã³ããå®çŸ©å€æŽãStep Functions ã®ã¹ããŒãã·ã³å®çŸ©å€æŽãªã©ããããã¹ã¯ããã«å¯Ÿå¿ããŠããŸããä»ã®ãªãœãŒã¹ã«å€æŽãå
¥ã£ãå Žåã¯ããããã¹ã¯ãããããã€ã§ã¯ãªã CloudFormation ãã«ãããã€ãè¡ãå¿
èŠããããŸãããã®åäœã確èªããããã«ã lib/cdk-watch-stack.ts ã®ã³ãŒãã以äžã®ããã«å€æŽããŠãã ããã import { Stack, StackProps, aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class CdkWatchStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Fargate does not work with default VPCs const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 2, // ALB requires 2 AZs natGateways: 2, //changing this property does not trigger a hotswap, and a full deployment occurs instead }); new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'EcsService', { vpc, taskImageOptions: { image: ecs.ContainerImage.fromAsset('docker-app'), containerPort: 80, }, }); } } ã¿ãŒããã«ãŠã£ã³ããŠã確èªããŠãã ãããã¢ã»ããã®å
¬éãå®äºãããšã次ã®ã¡ãã»ãŒãžãåºåãããŸãã â The following non-hotswappable changes were found. To reconcile these using CloudFormation, specify --hotswap-fallback logicalID: VpcPrivateSubnet2DefaultRoute060D2087, type: AWS::EC2::Route, rejected changes: NatGatewayId, reason: This resource type is not supported for hotswap deployments ããã¯ããããã¹ã¯ãããããã€ãã§ããªã倿Žãå«ãŸããŠããããšãæå³ããŠããŸããéåžžãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¯Ÿãã倿Žã¯ãããã¹ã¯ããã§ããŸããããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããã¢ã»ããã«å¯Ÿãã倿Žã¯ãããã¹ã¯ããå¯èœã§ããä»åè¡ã£ã倿Žã¯ vpc ã§äœ¿çšãããŠãã natGateways ã®æ°ãå¢ãããã®ã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽã«è©²åœãããããããã¹ã¯ãããã§ããŸãããããã©ã«ãã§ã¯ããããã¹ã¯ããã«å¯Ÿå¿ããŠããªã倿Žãå
¥ã£ãå Žåã«ã¯ã watch ã¯ãããã€ãè¡ããŸããã --hotswap-fallback ã®ãã©ã°ãä»ããããšã§ããããã¹ã¯ããã«å¯Ÿå¿ããŠããªã倿Žãå
¥ã£ãå Žåã« CloudFormation ãã«ãããã€ãå®è¡ãããããã©ãŒã«ããã¯ããåäœãšãªããŸãã ããŒã«ããã¯ã®ç¡å¹å ããã©ã«ãã§ã¯ã cdk watch 㯠--no-rollback ã䜿çšããŸãããããŒã«ããã¯ãç¡å¹åããåã«ã cdk watch ãå®è¡ããŠããã¿ãŒããã«ãŠã£ã³ããŠã§ ^C ( Ctrl + C ) ãå
¥åãããã®åŸã¿ãŒããã«ã§ cdk deploy ã³ãã³ããå®è¡ããŠãã ããã cdk deploy ãŸã㯠CloudFormation ãã«ãããã€ãå®è¡ããåã®æé ã§è¡ã£ã倿Žãåæ ãããŸãããããã®å€æŽã¯ CloudFormation ã«ãã£ãŠã眮ãæããå¿
èŠãªå€æŽããšã¿ãªããã --no-rollback ãã©ã°ããµããŒããããŸããããªããªãã ApplicationLoadBalancedFargateService ãæ§æãããªãœãŒã¹ã® 1 ã€ã«å¯Ÿããåé€ãšäœæãå¿
èŠãšããããã§ãããããã€ãå®äºããããæ¬¡ã®ã³ãã³ããå®è¡ããŸãã cdk watch --no-rollback --hotswap-fallback æåã« cdk watch ãå®è¡ãããšããšåãå
容ãåºåãããã¯ãã§ããå®è¡ãããã lib/cdk-watch-stack.ts ã以äžã®ããã«å€æŽããŠãã ããã import { Stack, StackProps, aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class CdkWatchStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Fargate does not work with default VPCs const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 2, // ALB requires 2 AZs natGateways: 2, }); new ec2.CfnVPC(this, 'mycfnvpc', { cidrBlock: '10.0.0/16', //intentionally incorrect code }); new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'EcsService', { vpc, taskImageOptions: { image: ecs.ContainerImage.fromAsset('docker-app'), containerPort: 80, }, }); } } ãã®å€æŽã§ã¯ãç¡å¹ãª cidrBlock ãæå®ããŠããããšã«æ³šæããŠãã ãããä»åã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å€æŽãªã®ã§ãããã¹ã¯ãããã§ãããCloudFormation ãã«ãããã€ã«ãªãããšãäºæ³ãããŸãã cdk watch ãå®è¡ãããŠããããã以äžã®ãããªãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã Could not perform a hotswap deployment, as the stack CdkWatchStack contains non-Asset changes Falling back to doing a full deployment CdkWatchStack: creating CloudFormation changeset... 3:17:02 PM | CREATE_FAILED | AWS::EC2::VPC | mycfnvpc Value (10.0.0/16) for parameter cidrBlock is invalid. This is not a valid CIDR block. (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: 4b670ce5-32bd-46dd-88de-33765f18d479; Proxy: null) â CdkWatchStack failed: Error: The stack named CdkWatchStack failed to deploy: UPDATE_FAILED (The following resource(s) failed to create: [mycfnvpc]. ) at Object.waitForStackDeploy (/usr/local/lib/node_modules/aws-cdk/lib/api/util/cloudformation.ts:309:11) at processTicksAndRejections (internal/process/task_queues.js:95:5) at prepareAndExecuteChangeSet (/usr/local/lib/node_modules/aws-cdk/lib/api/deploy-stack.ts:337:26) at CdkToolkit.deploy (/usr/local/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:194:24) at CdkToolkit.invokeDeployFromWatch (/usr/local/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:594:7) at FSWatcher.<anonymous>(/usr/local/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:310:9) --no-rollback ãæå®ããããšã§ãCloudFormation ã«ããããŒã«ããã¯ã¯è¡ãããŸããã§ãããã§ã¯ä»¥äžã®ããã«å€æŽãã cidrBlock ãæå¹ãªå€ã«ããŠã¿ãŸãããã import { Stack, StackProps, aws_ec2 as ec2, aws_ecs as ecs, aws_ecs_patterns as ecs_patterns, } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class CdkWatchStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // Fargate does not work with default VPCs const vpc = new ec2.Vpc(this, 'Vpc', { maxAzs: 2, // ALB requires 2 AZs natGateways: 2, }); new ec2.CfnVPC(this, 'mycfnvpc', { cidrBlock: '10.0.0.0/16', //corrected code }); new ecs_patterns.ApplicationLoadBalancedFargateService(this, 'EcsService', { vpc, taskImageOptions: { image: ecs.ContainerImage.fromAsset('docker-app'), containerPort: 80, }, }); } } cdk watch ã倿Žãæ€ç¥ãã以äžã®ãããªã¡ãã»ãŒãžãåºåããŠèªåçã«ãããã€ãæåããã¯ãã§ãã Could not perform a hotswap deployment, as the stack CdkWatchStack contains non-Asset changes Falling back to doing a full deployment CdkWatchStack: creating CloudFormation changeset... â
CdkWatchStack Outputs: CdkWatchStack.EcsServiceLoadBalancerDNS6D595ACE = CdkWa-EcsSe-T2ZOAGRO8LGP-xxxxxxxxx.us-east-2.elb.amazonaws.com CdkWatchStack.EcsServiceServiceURLE56F060F = http://CdkWa-EcsSe-T2ZOAGRO8LGP-xxxxxxxxx.us-east-2.elb.amazonaws.com Stack ARN: arn:aws:cloudformation:us-east-2:xxxxxxxxxxxx:stack/CdkWatchStack/95d784f0-4d73-11ec-a8b8-xxxxxxxxxxxx ã¯ãªãŒã³ã¢ãã ãããã€ããã¹ã¿ãã¯ãšã¢ããªã±ãŒã·ã§ã³ãåé€ããã«ã¯ãCDK ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã§ cdk destroy ã³ãã³ããå®è¡ããŠãã ããã cdk destroy ãŸãšã cdk watch ã䜿çšããããšã§ãå¯èœãªå Žåã¯ãããã¹ã¯ããã«ãã CloudFormation ããã€ãã¹ãããããè¿
éã«ã¹ã¿ãã¯ã®æŽæ°ãè¡ãããšãã§ããŸãããã¹ãŠã®ãªãœãŒã¹ã®å€æŽããããã¹ã¯ããå¯èœãªããã§ã¯ãããŸããããããã¹ã¯ãããããã€ãå®è¡ã§ããªãå Žåã¯ã watch ã CloudFormation ãã«ãããã€ã«ãã©ãŒã«ããã¯ãããã©ã° --hotswap-fallback ã远å ããããšãã§ããŸãããããã¹ã¯ããã«ãã£ãŠæå³çãªããªãããçºçãããããæ¬çªç°å¢ã§ã¯äœ¿çšããªãã§ãã ãããå¿
èŠã«å¿ã㊠--no-hotswap ãã©ã°ã远å ããããšã§ããããã¹ã¯ãããç¡å¹ã«ããããšãã§ããŸãã --no-rollback ãã©ã°ã远å ã㊠cdk watch ãå®è¡ãããšãæŽæ°å€±ææã®ããŒã«ããã¯ãç¡å¹ã«ãªããŸãããã ãã眮æã¿ã€ãã®æŽæ°ã§ã¯ --no-rollback ãã©ã°ããµããŒããããŠãããããã©ã°ã远å ããç¶æ
ã§ãããã€ããããšãããšãšã©ãŒã«ãªãã®ã§ããæ³šæãã ããã