v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 사용할 수 있도록 여러 가지 방법으로 AWS 환경을 구성할 수 있습니다 AWS Cloud Development Kit (AWS CDK). AWS 환경을 관리하는 가장 좋은 방법은 사용자의 특정 요구 사항에 따라 달라집니다.
스택이 배포되는 위치를 결정하기 위해 애플리케이션의 각 CDK 스택이 환경과 연결되어야 합니다.
AWS 환경에 대한 소개는 섹션을 참조하세요의 환경 AWS CDK.
주제
환경을 지정할 수 있는 위치
자격 증명 및 구성 파일에서 환경을 지정하거나 AWS Construct Library에서 Stack
구문의 env
속성을 사용하여 환경을 지정할 수 있습니다.
자격 증명 및 구성 파일
AWS Command Line Interface (AWS CLI)를 사용하여 AWS 환경 정보를 저장, 구성 및 관리하는 credentials
및 config
파일을 생성할 수 있습니다. 이러한 파일에 대해 자세히 알아보려면 AWS Command Line Interface 사용 설명서의 Configuration and credential file settings를 참조하세요.
이러한 파일에 저장된 값은 프로파일별로 구성됩니다. 프로파일 이름과 이러한 파일에서 키 값 페어를 지정하는 방법은 프로그래밍 방식 액세스를 구성하는 방법에 따라 달라집니다. 다양한 방법에 대해 자세히 알아보려면 AWS CDKCLI에 대한 보안 자격 증명 구성 섹션을 참조하세요.
일반적으로는 credentials
파일의 AWS 계정 정보와 config
파일의 AWS 리전 정보를 AWS CDK 확인합니다.
credentials
및 config
파일을 구성한 후에는 및 환경 변수를 통해에 AWS CDK CLI 사용할 환경을 지정할 수 있습니다.
스택 구문의 env 속성
Stack
구문의 env
속성을 사용하여 각 스택의 환경을 지정할 수 있습니다. 이 속성은 사용할 계정과 리전을 정의합니다. 하드 코딩된 값을 이 속성에 전달하거나 CDK에서 제공하는 환경 변수를 전달할 수 있습니다.
환경 변수를 전달하려면 AWS_DEFAULT_ACCOUNT
및 AWS_DEFAULT_REGION
환경 변수를 사용합니다. 이러한 환경 변수는 credentials
및 config
파일의 값을 전달할 수 있습니다. CDK 코드 내에서 로직을 사용하여 이러한 환경 변수의 값을 결정할 수도 있습니다.
환경 우선 순위 AWS CDK
환경을 지정하는 여러 방법을 사용하는 경우는 다음 우선 순위를 AWS CDK 준수합니다.
-
Stack
구문의env
속성으로 지정된 하드 코딩된 값 -
Stack
구문의env
속성으로 지정된AWS_DEFAULT_ACCOUNT
및AWS_DEFAULT_REGION
환경 변수 -
--profile
옵션을 사용하여credentials
및config
파일의 프로파일과 연결되고 CDK CLI에 전달되는 환경 정보 -
credentials
및config
파일의default
프로파일
환경을 지정할 시기
CDK로 개발할 때는 먼저 AWS 리소스를 나타내는 구문이 포함된 CDK 스택을 정의해야 합니다. 다음으로 각 CDK 스택을 AWS CloudFormation 템플릿으로 합성합니다. 그런 다음 CloudFormation 템플릿을 환경에 배포합니다. 환경을 지정하는 방법은 환경 정보가 적용되는 시기를 결정하며 CDK 동작과 결과에 영향을 줄 수 있습니다.
템플릿 합성 시 환경 지정
Stack
구문의 env
속성을 사용하여 환경 정보를 지정하면 템플릿 합성 시 환경 정보가 적용됩니다. cdk synth
또는 cdk
deploy
를 실행하면 환경에 관련된 CloudFormation 템플릿이 생성됩니다.
env
속성 내에서 환경 변수를 사용하는 경우 CDK CLI 명령과 함께 --profile
옵션을 사용하여 자격 증명과 구성 파일의 환경 정보가 포함된 프로파일을 전달해야 합니다. 그러면 템플릿 합성 시 이 정보가 적용되어 환경에 관련된 템플릿이 생성됩니다.
CloudFormation 템플릿 내의 환경 정보가 다른 방법보다 우선합니다. 예를 들어 다른 환경에 cdk deploy --profile
을 제공하면 프로파일이 무시됩니다.profile
이러한 방식으로 환경 정보를 제공하는 경우 CDK 앱 내에서 환경 종속 코드와 로직을 사용할 수 있습니다. 이는 또한 합성된 템플릿이 합성되는 시스템, 사용자 또는 세션에 따라 다를 수 있음을 의미합니다. 이러한 접근 방식은 개발 중에는 수락되거나 바람직한 경우가 많지만 프로덕션 용도로는 권장되지 않습니다.
스택 배포 시 환경 지정
Stack
구문의 env
속성을 사용하여 환경을 지정하지 않으면 CDK CLI는 합성 시 환경에 관계없는 CloudFormation 템플릿을 생성합니다. 그런 다음 cdk deploy --profile
을 사용하여 배포할 환경을 지정할 수 있습니다.profile
환경에 관계없는 템플릿을 배포할 때 프로파일을 지정하지 않으면 CDK CLI는 배포 시 credentials
및 config
파일의 default
프로파일의 환경 값을 사용하려고 시도합니다.
배포 시 환경 정보를 사용할 수 없는 경우는 stack.account
, stack.region
및와 같은 환경 관련 속성을 통해 배포 시 환경 정보를 확인하려고 시도 AWS CloudFormation 합니다stack.availabilityZones
.
환경에 관계없는 스택의 경우 스택 내의 구문은 환경 정보를 사용할 수 없으며 환경 정보가 필요한 로직을 사용할 수 없습니다. 예를 들어, if (stack.region ====
'us-east-1')
와 같은 코드를 작성하거나 Vpc.fromLookup
등의 환경 정보가 필요한 구문 메서드를 사용할 수 없습니다. 이러한 기능을 사용하려면 env
속성으로 환경을 지정해야 합니다.
환경에 관계없는 스택의 경우 가용 영역을 사용하는 모든 구문에는 가용 영역이 2개 표시되므로 스택을 모든 리전에 배포할 수 있습니다.
를 사용하여 환경을 지정하는 방법 AWS CDK
각 스택에 대해 하드 코딩된 환경 지정
Stack
구문의 env
속성을 사용하여 스택의 AWS 환경 값을 지정합니다. 다음은 예제입니다.
const envEU = { account: '2383838383', region: 'eu-west-1' };
const envUSA = { account: '8373873873', region: 'us-west-2' };
new MyFirstStack(app, 'first-stack-us', { env: envUSA });
new MyFirstStack(app, 'first-stack-eu', { env: envEU });
프로덕션 환경에는 이 접근 방식을 권장합니다. 이러한 방식으로 환경을 명시적으로 지정하여 스택이 항상 특정 환경에 배포되도록 할 수 있습니다.
환경 변수를 사용하여 환경 지정
는 CDK 코드 내에서 사용할 수 있는 두 가지 환경 변수인 CDK_DEFAULT_ACCOUNT
및를 AWS CDK 제공합니다CDK_DEFAULT_REGION
. 스택 인스턴스의 env
속성 내에서 이러한 환경 변수를 사용하면 CDK CLI --profile
옵션을 사용하여 자격 증명과 구성 파일의 환경 정보를 전달할 수 있습니다.
다음은 이러한 환경 변수를 지정하는 방법의 예입니다.
노드의 process
객체를 통해 환경 변수에 액세스합니다.
참고
TypeScript로 process
를 사용하려면 DefinitelyTyped
모듈이 필요합니다. cdk
init
가 이 모듈을 설치해줍니다. 그러나 이 모듈이 추가되기 전에 생성된 프로젝트로 작업하거나 cdk
init
를 사용하여 프로젝트를 설정하지 않은 경우 이 모듈을 수동으로 설치해야 합니다.
npm install @types/node
new MyDevStack(app, 'dev', {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}});
환경 변수로 환경을 지정하여 동일한 CDK 스택이 다양한 환경에 대한 AWS CloudFormation 템플릿으로 합성되도록 할 수 있습니다. 즉, CDK 코드를 수정하지 않고도 동일한 CDK 스택을 서로 다른 AWS 환경에 배포할 수 있습니다. cdk synth
를 실행할 때 사용할 프로파일만 지정하면 됩니다.
이 접근 방식은 동일한 스택을 서로 다른 환경에 배포할 때 개발 환경에 적합합니다. 그러나 동일한 CDK 코드가 합성되는 시스템, 사용자 또는 세션에 따라 서로 다른 템플릿을 합성할 수 있으므로 프로덕션 환경에는 이러한 접근 방식이 권장되지 않습니다.
CDK CLI를 사용하여 자격 증명 및 구성 파일에서 환경 지정
환경에 관계없는 템플릿을 배포할 때는 CDK CLI 명령과 함께 --profile
옵션을 사용하여 사용하려는 프로파일을 지정합니다. 다음은 credentials
및 config
파일에 정의된 prod
프로파일을 사용하여 myStack
이라는 CDK 스택을 배포하는 예입니다.
$
cdk deploy
myStack
--profileprod
--profile
옵션과 다른 CDK CLI 명령 및 옵션에 대한 자세한 내용은 AWS CDK CLI 명령 참조 섹션을 참조하세요.
를 사용하여 환경을 구성할 때 고려 사항 AWS CDK
스택 내에서 구문을 사용하여 정의하는 서비스는 배포하려는 리전을 지원해야 합니다. 리전 AWS 서비스 별로 지원되는 목록은 AWS 리전별 서비스를
AWS CDK 를 사용하여 지정된 환경에 스택 배포를 수행하려면 valid AWS Identity and Access Management (IAM) 보안 인증 정보가 있어야 합니다.
예시
CDK 스택에서 환경에 관계없는 CloudFormation 템플릿 동기화
이 예에서는 CDK 스택에서 환경에 관계없는 CloudFormation 템플릿을 생성합니다. 그런 다음 모든 환경에 이 템플릿을 배포할 수 있습니다.
다음은 예제 CDK 스택입니다. 이 스택은 버킷의 리전에 대한 Amazon S3 버킷과 CloudFormation 스택 출력을 정의합니다. 이 예에서는 env
가 정의되지 않았습니다.
export class CdkAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Create the S3 bucket
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
// Create an output for the bucket's Region
new cdk.CfnOutput(this, 'BucketRegion', {
value: bucket.env.region,
});
}
}
cdk synth
를 실행하면 CDK CLI는 버킷의 리전에 대한 출력 값으로 의사 파라미터 AWS::Region
을 사용하여 CloudFormation 템플릿을 생성합니다. 이 파라미터는 배포 시 확인됩니다.
Outputs:
BucketRegion:
Value:
Ref: AWS::Region
자격 증명과 구성 파일의 dev
프로파일에 지정된 환경에 이 스택을 배포하기 위해 다음을 실행합니다.
$
cdk deploy CdkAppStack --profile dev
프로파일을 지정하지 않으면 CDK CLI는 자격 증명 및 구성 파일에 있는 default
프로파일의 환경 정보를 사용하려고 시도합니다.
로직을 사용하여 템플릿 합성 시 환경 정보 확인
이 예에서는 유효한 표현식을 사용하도록 stack
인스턴스의 env
속성을 구성합니다. 두 가지 추가 환경 변수인 CDK_DEPLOY_ACCOUNT
와 CDK_DEPLOY_REGION
을 지정합니다. 이러한 환경 변수는 존재하는 경우 합성 시 기본값을 재정의할 수 있습니다.
new MyDevStack(app, 'dev', {
env: {
account: process.env.CDK_DEPLOY_ACCOUNT || process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEPLOY_REGION || process.env.CDK_DEFAULT_REGION
}});
스택의 환경을 이런 방식으로 선언하면 짧은 스크립트나 배치 파일을 작성하고 명령줄 인수에서 변수를 설정한 다음 cdk deploy
를 직접적으로 호출할 수 있습니다. 다음은 예입니다. 처음 2개를 제외한 모든 인수는 명령줄 옵션 또는 인수를 지정하기 위해 cdk deploy
에 전달됩니다.
#!/usr/bin/env bash
if [[ $# -ge 2 ]]; then
export CDK_DEPLOY_ACCOUNT=$1
export CDK_DEPLOY_REGION=$2
shift; shift
npx cdk deploy "$@"
exit $?
else
echo 1>&2 "Provide account and region as first two args."
echo 1>&2 "Additional args are passed through to cdk deploy."
exit 1
fi
스크립트를 cdk-deploy-to.sh
로 저장한 다음 chmod +x
cdk-deploy-to.sh
를 실행하여 실행 가능하게 만듭니다.
그런 다음 cdk-deploy-to
스크립트를 사용하여 특정 환경에 배포하는 추가 스크립트를 작성할 수 있습니다. 다음은 예제입니다.
#!/usr/bin/env bash
# cdk-deploy-to-test.sh
./cdk-deploy-to.sh 123457689 us-east-1 "$@"
다음은 cdk-deploy-to
스크립트를 사용하여 여러 환경에 배포하는 예입니다. 첫 번째 배포가 실패하면 프로세스가 중지됩니다.
#!/usr/bin/env bash
# cdk-deploy-to-prod.sh
./cdk-deploy-to.sh 135792468 us-west-1 "$@" || exit
./cdk-deploy-to.sh 246813579 eu-west-1 "$@"