v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
를 사용하여 환경을 부트스트래핑할 때 발생하는 일반적인 문제를 해결합니다 AWS Cloud Development Kit (AWS CDK).
부트스트래핑 소개는 AWS CDK 부트스트래핑 섹션을 참조하세요.
부트스트래핑에 대한 지침은 에서 사용할 환경 부트스트랩 AWS CDK 섹션을 참조하세요.
기본 템플릿을 사용하여 부트스트래핑할 때 Amazon S3 버킷에 대해 ‘CREATE_FAILED‘ 오류가 발생합니다.
기본 부트스트랩 템플릿과 함께 AWS CDK 명령줄 인터페이스(CDKCLI) cdk bootstrap
명령을 사용하여 부트스트래핑하면 다음 오류가 발생합니다.
CREATE_FAILED | AWS::S3::Bucket |
BucketName
already exists
문제를 해결하기 전에 최신 버전의 CDK CLI를 사용하고 있는지 확인하세요.
-
버전을 확인하려면
cdk --version
을 실행합니다. -
최신 버전을 설치하려면
npm install -g aws-cdk
를 실행합니다.
최신 버전을 설치한 후 환경 부트스트랩을 다시 시도하세요. 여전히 동일한 오류가 발생하는 경우 문제 해결을 계속합니다.
일반적인 원인
환경을 부트스트랩하면가 부트스트랩 리소스에 대한 물리적 IDs를 AWS CDK 생성합니다. 자세한 내용은 부트스트래핑 중 생성된 리소스 ID 단원을 참조하십시오.
다른 부트스트랩 리소스와 달리 Amazon S3 버킷 이름은 전역적입니다. 즉, 각 버킷 이름은 파티션 AWS 리전 내 모든의 모든 AWS 계정 에서 고유해야 합니다. 자세한 내용은 Amazon S3 사용 설명서의 버킷 개요를 참조하세요. 따라서 이 오류의 가장 일반적인 원인은 버킷 이름으로 생성된 물리적 ID가 파티션 내 어딘가에 이미 존재하기 때문입니다. 사용자의 계정 또는 다른 계정 내에 있을 수 있습니다.
cdk-hnb659fds-assets-012345678910-us-west-1
은 버킷 이름의 예입니다. 가능성은 낮지만 한정자와 계정 ID가 이름의 일부이므로 이 Amazon S3 버킷 이름을 다른 AWS 계정에서 사용하고 있을 수 있습니다. 버킷 이름은 전역적으로 범위가 지정되므로 같은 파티션의 다른 계정에서 사용하는 경우 해당 이름을 사용할 수 없습니다. 같은 이름의 버킷이 계정 어딘가에 존재할 가능성이 높습니다. 부트스트래핑하려는 리전 또는 다른 리전에 있을 수 있습니다.
일반적으로 해결 방법은 계정에서 이 버킷을 찾아 어떻게 할지 결정하거나 부트스트랩을 사용자 지정하여 다른 이름의 부트스트랩 리소스를 생성하는 것입니다.
해결 방법
먼저 이름이 같은 버킷이에 존재하는지 확인합니다 AWS 계정. 유효한 권한이 있는 AWS 자격 증명을 사용하여 계정에서 Amazon S3 버킷을 조회하면 다음과 같은 방법으로이 작업을 수행할 수 있습니다.
-
AWS Command Line Interface (AWS CLI)
aws s3 ls
명령을 사용하여 모든 버킷 목록을 봅니다. -
Amazon S3 콘솔
을 사용하여 계정의 각 리전에 대한 버킷 이름을 조회합니다.
같은 이름의 버킷이 있는 경우 사용 중인지 확인합니다. 사용하지 않는 경우 버킷을 삭제하고 환경을 다시 부트스트래핑하는 것이 좋습니다.
같은 이름의 버킷이 존재하고 이를 삭제하지 않으려면 계정의 부트스트랩 스택과 이미 연결되어 있는지 확인합니다. 여러 리전을 확인해야 할 수 있습니다. Amazon S3 버킷 이름의 리전이 반드시 버킷이 해당 리전에 있음을 의미하지는 않습니다. CDKToolkit
부트스트랩 스택과 연결되어 있는지 확인하려면 각 리전에 대해 다음 중 하나를 수행합니다.
-
명령을 사용하여 AWS CLI
aws cloudformation describe-stack-resources --stack-name
부트스트랩 스택의 리소스를 보고 버킷이 나열되었는지 확인합니다.CDKToolkit
--regionRegion
-
AWS CloudFormation 콘솔
에서 CDKToolkit
스택을 찾습니다. 그런 다음 리소스 탭에서 버킷이 존재하는지 확인합니다.
버킷이 부트스트랩 스택과 연결된 경우 부트스트랩 스택이 부트스트랩을 시도하는 리전과 동일한 리전에 있는지 확인합니다. 그렇다면 환경이 이미 부트스트래핑되어 있으므로 CDK를 사용하여 애플리케이션을 환경에 배포할 수 있어야 합니다. Amazon S3 버킷이 다른 리전의 부트스트랩 스택과 연결된 경우 무엇을 할지 결정해야 합니다. 가능한 해결 방법에는 기존 Amazon S3 버킷 이름 바꾸기, 현재 Amazon S3 버킷을 사용하지 않는 경우 삭제 또는 생성하려는 Amazon S3 버킷에 새 이름 사용 등이 있습니다.
계정에서 같은 이름의 Amazon S3 버킷을 찾을 수 없는 경우 다른 계정에 있을 수 있습니다. 이를 해결하려면 부트스트래핑을 사용자 지정하여 모든 부트스트랩 리소스 또는 Amazon S3 버킷에 대한 새 이름을 생성해야 합니다. 모든 부트스트랩 리소스에 대해 새 이름을 생성하려면 한정자를 수정합니다. Amazon S3 버킷에 대해서만 새 이름을 생성하려면 새 버킷 이름을 제공합니다.
부트스트랩을 사용자 지정하려면 CDK CLI cdk bootstrap
명령과 함께 옵션을 사용하거나 부트스트랩 템플릿을 수정하면 됩니다. 지침은 AWS CDK 부트스트래핑 사용자 지정 단원을 참조하십시오.
부트스트래핑을 사용자 지정하는 경우 애플리케이션을 올바르게 배포하려면 먼저 합성에 동일한 변경 사항을 적용해야 합니다. 지침은 CDK 스택 합성 사용자 지정 단원을 참조하십시오.
예를 들어 cdk bootstrap
을 사용하여 새 한정자를 제공할 수 있습니다.
$
cdk bootstrap --qualifier
abcde0123
cdk-abcde0123-assets-012345678910-us-west-1
은 이 수정으로 생성될 Amazon S3 버킷 이름의 예입니다. 부트스트래핑 중 생성된 모든 부트스트랩 리소스는 이 한정자를 사용합니다.
CDK 앱을 개발할 때는 신디사이저에서 사용자 지정 한정자를 지정해야 합니다. 이렇게 하면 CDK가 합성 및 배포 중 부트스트랩 리소스를 식별하는 데 도움이 됩니다. 다음은 스택 인스턴스의 기본 신디사이저를 사용자 지정하는 예입니다.
new MyStack(this, 'MyStack', {
synthesizer: new DefaultStackSynthesizer({
qualifier: 'abcde0123',
}),
});
CDK 프로젝트의 cdk.json
파일에 새 한정자를 지정할 수도 있습니다.
{
"app": "...",
"context": {
"@aws-cdk/core:bootstrapQualifier": "abcde0123"
}
}
Amazon S3 버킷 이름만 수정하려면 --bootstrap-bucket-name
옵션을 사용할 수 있습니다. 다음은 예제입니다.
$
cdk bootstrap --bootstrap-bucket-name
'my-new-bucket-name'
CDK 앱을 개발할 때 신디사이저에 새 버킷 이름을 지정해야 합니다. 다음은 스택 인스턴스의 기본 신디사이저를 사용자 지정하는 예입니다.
new MyStack(this, 'MyStack', {
synthesizer: new DefaultStackSynthesizer({
fileAssetsBucketName: 'my-new-bucket-name',
}),
});
예방책
사용하려는 각 AWS 환경을 사전에 부트스트랩하는 것이 좋습니다. 자세한 내용은 환경을 부트스트래핑해야 하는 경우 단원을 참조하십시오. 특히 Amazon S3 버킷 이름 지정 문제의 경우, 각 AWS 환경에 Amazon S3 버킷을 생성하고 다른 사용자가 Amazon S3 버킷 이름을 사용하지 못하도록 합니다.