쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

일반적인 AWS CDK 문제 해결

포커스 모드
일반적인 AWS CDK 문제 해결 - AWS Cloud Development Kit (AWS CDK) v2

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

이 주제에서는 AWS CDK에서 다음 문제를 해결하는 방법을 설명합니다.

업데이트 후 AWS CDKAWS CDK 도구 키트(CLI)는 AWS Construct Library와의 불일치를 보고합니다.

AWS CDK 도구 키트 버전(cdk명령 제공)은 최소한 기본 AWS Construct Library 모듈 버전인과 동일해야 합니다aws-cdk-lib. 도구 키트는 이전 버전과 호환되도록 설계되었습니다. 최신 2.x 버전의 도구 키트는 라이브러리의 모든 1.x 또는 2.x 릴리스와 함께 사용할 수 있습니다. 따라서 이 구성 요소를 전역에 설치하고 최신 상태로 유지하는 것이 좋습니다.

npm update -g aws-cdk

여러 버전의 AWS CDK 도구 키트를 사용해야 하는 경우 프로젝트 폴더에 특정 버전의 도구 키트를 로컬로 설치합니다.

TypeScript 또는 JavaScript를 사용하는 경우 프로젝트 디렉터리에 이미 CDK Toolkit의 버전이 지정된 로컬 복사본이 포함되어 있습니다.

다른 언어를 사용하는 경우 npm를 사용하여 AWS CDK 도구 키트를 설치하고 -g 플래그를 생략하고 원하는 버전을 지정합니다. 예시:

npm install aws-cdk@2.0

로컬로 설치된 AWS CDK 도구 키트를 실행하려면 npx aws-cdk 대신 명령을 사용합니다cdk. 예시:

npx aws-cdk deploy MyStack

npx aws-cdk는 AWS CDK 툴킷이 있는 경우 툴킷의 로컬 버전을 실행합니다. 프로젝트에 로컬 설치가 없는 경우 글로벌 버전으로 돌아갑니다. cdk가 항상 이러한 방식으로 간접적으로 호출되도록 쉘 별칭을 설정하는 것이 편리할 수 있습니다.

macOS/Linux
alias cdk="npx aws-cdk"
Windows
doskey cdk=npx aws-cdk $*
alias cdk="npx aws-cdk"

(목록으로 돌아가기)

AWS CDK 스택을 배포할 때 NoSuchBucket 오류가 발생합니다.

AWS 환경이 부트스트래핑되지 않았으므로 에는 배포 중에 리소스를 보관할 Amazon S3 버킷이 없습니다. 다음 명령을 사용하여 스테이징 버킷 및 기타 필수 리소스를 생성할 수 있습니다.

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

예상치 못한 AWS 요금이 발생하지 않도록 에서는 어떤 환경도 자동으로 부트스트랩하지 AWS CDK 않습니다. 배포할 각 환경을 명시적으로 부트스트래핑해야 합니다.

기본적으로 부트스트랩 리소스는 현재 AWS CDK 애플리케이션의 스택에서 사용되는 리전 또는 리전에서 생성됩니다. 또는 해당 AWS 프로필의 계정을 사용하여 로컬 프로필에 지정된 리전(에서 설정aws configure)에 생성됩니다. 다음과 같이 명령줄에 다른 계정과 리전을 지정할 수 있습니다. (앱 디렉터리에 없는 경우 계정과 리전을 지정해야 합니다.)

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

자세한 내용은 AWS CDK 부트스트래핑 단원을 참조하십시오.

(목록으로 돌아가기)

AWS CDK 스택을 배포할 때 forbidden: null 메시지를 받습니다.

부트스트랩 리소스가 필요한 스택을 배포하고 있지만 에 쓸 권한이 없는 IAM 역할 또는 계정을 사용하고 있습니다. (스테이징 버킷은 자산이 포함되거나 50K보다 큰 AWS CloudFormation 템플릿을 합성하는 스택을 배포할 때 사용됩니다.) 오류 메시지에 언급된 버킷에 대해 s3:* 작업을 수행할 권한이 있는 계정 또는 역할을 사용합니다.

(목록으로 돌아가기)

AWS CDK 스택을 합성할 때 메시지를 받습니다. --app is required either in command-line, in cdk.json or in ~/.cdk.json

이 메시지는 일반적으로를 실행할 때 AWS CDK 프로젝트의 기본 디렉터리에 있지 않음을 의미합니다cdk synth. cdk init 명령으로 생성된 cdk.json이 디렉터리의 파일에는 AWS CDK 앱을 실행(및 합성)하는 데 필요한 명령줄이 포함되어 있습니다. 예를 들어 TypeScript 앱의 경우 기본 cdk.json은 다음과 같습니다.

{ "app": "npx ts-node bin/my-cdk-app.ts" }

AWS CDK 도구 키트가 cdk.json 해당 위치에서 찾아 앱을 성공적으로 실행할 수 있도록 프로젝트의 기본 디렉터리에서만 cdk 명령을 실행하는 것이 좋습니다.

어떤 이유로 이것이 실용적이지 않은 경우 도구 AWS CDK 키트는 다른 두 위치에서 앱의 명령줄을 찾습니다.

  • 홈 디렉터리의 cdk.json에서

  • -a 옵션을 사용하여 cdk synth 명령 자체에서

예를 들어 다음과 같이 TypeScript 앱에서 스택을 합성할 수 있습니다.

cdk synth --app "npx ts-node my-cdk-app.ts" MyStack

(목록으로 돌아가기)

AWS CDK 스택을 합성할 때 템플릿에 AWS CloudFormation 리소스가 너무 많아서 오류가 발생합니다.

는 AWS CloudFormation 템플릿을 AWS CDK 생성 및 배포합니다. 스택 AWS CloudFormation 에 포함할 수 있는 리소스 수에는 제한이 있습니다. 를 사용하면 예상보다 더 빨리이 제한을 AWS CDK실행할 수 있습니다.

참고

이 쓰기에서 AWS CloudFormation 리소스 한도는 500입니다. 현재 리소스 한도는 AWS CloudFormation 할당량을 참조하세요.

AWS Construct Library의 상위 수준 의도 기반 구문은 로깅, 키 관리, 권한 부여 및 기타 목적에 필요한 보조 리소스를 자동으로 프로비저닝합니다. 예를 들어 한 리소스에 다른 리소스에 대한 액세스 권한을 부여하면 관련 서비스가 통신하는 데 필요한 IAM 객체가 생성됩니다.

경험상 의도 기반 구문의 실제 사용은 구문당 1~5개의 AWS CloudFormation 리소스를 생성하지만 이는 다를 수 있습니다. 서버리스 애플리케이션의 경우 API 엔드포인트당 5~8개의 AWS 리소스가 일반적입니다.

더 높은 수준의 추상화를 나타내는 패턴을 사용하면 훨씬 적은 코드로 더 많은 AWS 리소스를 정의할 수 있습니다. 예를 들어 예:를 사용하여 AWS Fargate 서비스 생성 AWS CDK의 AWS CDK 코드는 3개의 구문만 정의하면서 50개 이상의 AWS CloudFormation 리소스를 생성합니다.

AWS CloudFormation 리소스 제한을 초과하는 것은 AWS CloudFormation 합성 중 발생하는 오류입니다. 스택이 한도의 80%를 초과하면가 경고를 AWS CDK 보냅니다. 스택에 maxResources 속성을 설정하여 다른 제한을 사용하거나 maxResources를 0으로 설정하여 검증을 비활성화할 수 있습니다.

작은 정보

다음 유틸리티 스크립트를 사용하여 합성된 출력의 정확한 리소스 수를 가져올 수 있습니다. (모든 AWS CDK 개발자에게 Node.js가 필요하므로 스크립트는 JavaScript.)

// rescount.js - count the resources defined in a stack // invoke with: node rescount.js <path-to-stack-json> // e.g. node rescount.js cdk.out/MyStack.template.json import * as fs from 'fs'; const path = process.argv[2]; if (path) fs.readFile(path, 'utf8', function(err, contents) { console.log(err ? `${err}` : `${Object.keys(JSON.parse(contents).Resources).length} resources defined in ${path}`); }); else console.log("Please specify the path to the stack's output .json file");

스택의 리소스 수가 한도에 가까워지면 스택에 포함된 리소스 수를 줄이기 위해 다시 설계하는 것이 좋습니다. 예를 들어 일부 Lambda 함수를 결합하거나 스택을 여러 스택으로 분할하는 것입니다. CDK는 스택 간의 참조를 지원하므로 앱의 기능을 가장 적합한 방식으로 서로 다른 스택으로 분리할 수 있습니다.

참고

AWS CloudFormation 전문가는 중첩 스택을 리소스 한도에 대한 솔루션으로 사용할 것을 제안하는 경우가 많습니다. 는 NestedStack 구문을 통해이 접근 방식을 AWS CDK 지원합니다.

(목록으로 돌아가기)

Auto Scaling 그룹 또는 VPC에 대해 3개(또는 그 이상)의 가용 영역을 지정했지만 2개에만 배포되었습니다.

요청한 가용 영역 수를 가져오려면 스택의 env 속성에서 계정과 리전을 지정합니다. 둘 다 지정하지 않으면 AWS CDK기본적으로는 스택을 환경에 구애받지 않고 합성합니다. 그런 다음를 사용하여 스택을 특정 리전에 배포할 수 있습니다 AWS CloudFormation. 일부 리전에는 가용 영역이 2개뿐이기 때문에 환경에 관계없는 템플릿은 2개 이상을 사용하지 않습니다.

참고

과거에는 가용 영역이 하나뿐인 리전이 가끔 시작되었습니다. 환경에 구애받지 않는 AWS CDK 스택은 이러한 리전에 배포할 수 없습니다. 그러나이 쓰기에서는 모든 AWS 리전에 최소 2개의 AZs.

스택의 availablilityZones(Python: availability_zones) 속성을 재정의하여 사용하려는 영역을 명시적으로 지정하여 이 동작을 변경할 수 있습니다.

합성 시 스택의 계정 및 리전을 지정하는 동시에 모든 리전에 배포할 수 있는 유연성을 유지하는 방법에 대한 자세한 내용은 의 환경 AWS CDK 섹션을 참조하세요.

(목록으로 돌아가기)

cdk destroy를 실행해도 내 S3 버킷, DynamoDB 테이블 또는 기타 리소스가 삭제되지 않음

기본적으로 사용자 데이터를 포함할 수 있는 리소스는 RETAINremovalPolicy(Python: removal_policy) 속성을 갖고 있으며, 스택이 파괴되어도 리소스는 삭제되지 않습니다. 대신 리소스는 스택에서 고립됩니다. 그런 다음 스택이 파괴된 후 리소스를 수동으로 삭제해야 합니다. 그렇게 할 때까지 스택을 재배포하지 못합니다. 배포 중 생성되는 새 리소스의 이름이 고립된 리소스의 이름과 충돌하기 때문입니다.

리소스의 제거 정책을 DESTROY로 설정하면 스택이 파괴될 때 해당 리소스가 삭제됩니다.

TypeScript
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class CdkTestStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY }); } } module.exports = { CdkTestStack }
Python
import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_s3 as s3 class CdkTestStack(cdk.stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) bucket = s3.Bucket(self, "Bucket", removal_policy=cdk.RemovalPolicy.DESTROY)
Java
software.amazon.awscdk.*; import software.amazon.awscdk.services.s3.*; import software.constructs; public class CdkTestStack extends Stack { public CdkTestStack(final Construct scope, final String id) { this(scope, id, null); } public CdkTestStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); Bucket.Builder.create(this, "Bucket") .removalPolicy(RemovalPolicy.DESTROY).build(); } }
C#
using Amazon.CDK; using Amazon.CDK.AWS.S3; public CdkTestStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "Bucket", new BucketProps { RemovalPolicy = RemovalPolicy.DESTROY }); }
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
참고

AWS CloudFormation 는 비어 있지 않은 Amazon S3 버킷을 삭제할 수 없습니다. Amazon S3 버킷의 제거 정책을 DESTROY로 설정하고 데이터가 포함된 경우 버킷을 삭제할 수 없으므로 스택을 파괴하지 못합니다. 버킷의 autoDeleteObjects 속성을 true로 설정하면 AWS CDK 가 버킷을 삭제하기 전에 버킷에 있는 객체를 삭제하도록 할 수 있습니다.

(목록으로 돌아가기)

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.