v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원을 종료했습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
기본 신디사이저를 수정하거나, 사용 가능한 다른 내장 신디사이저를 사용하거나, 자체 신디사이저를 생성하여 AWS Cloud Development Kit (AWS CDK) 스택 합성을 사용자 지정할 수 있습니다.
에는 합성 동작을 사용자 지정하는 데 사용할 수 있는 다음과 같은 내장 신디사이저가 AWS CDK 포함되어 있습니다.
-
DefaultStackSynthesizer
– 신디사이저를 지정하지 않으면 이 신디사이저가 자동으로 사용됩니다. 파이프라인 CDK 구조를 사용하여 교차 계정 배포 및 배포를 지원합니다. 부트스트랩 계약에는 이름이 알려진 기존 Amazon S3 버킷, 이름이 알려진 기존 Amazon ECR리포지토리, 이름이 알려진 5개의 기존 IAM 역할이 필요합니다. 기본 부트스트래핑 템플릿은 이러한 요구 사항을 충족합니다. -
CliCredentialsStackSynthesizer
-이 신디사이저의 부트스트랩 계약에는 기존 Amazon S3 버킷과 기존 Amazon ECR리포지토리가 필요합니다. IAM 역할이 필요하지 않습니다. 배포를 수행하기 위해이 신디사이저는의 권한에 의존합니다. CDK CLI 사용자 및는 IAM 배포 자격 증명을 제한하려는 조직에 권장됩니다. 이 신디사이저는 교차 계정 배포 또는 CDK 파이프라인을 지원하지 않습니다. -
LegacyStackSynthesizer
-이 신디사이저는 CDK v1 합성 동작을 에뮬레이션합니다. 부트스트랩 계약에는 임의의 이름의 기존 Amazon S3 버킷이 필요하며 자산 위치가 CloudFormation 스택 파라미터로 전달될 것으로 예상됩니다. 이 신디사이저를 사용하는 경우를 사용해야 합니다. CDK CLI 배포를 수행합니다.
이러한 내장 신디사이저 중 사용 사례에 적합한 것이 없는 경우 자체 신디사이저를에서 신디사이저IStackSynthesizer
하거나 살펴보는 클래스로 작성할 수 있습니다.Construct
Hub.
DefaultStackSynthesizer
사용자 지정
DefaultStackSynthesizer
는 AWS CDK의 기본 신디사이저입니다. 이는 CDK 애플리케이션의 교차 계정 배포를 허용하고에 대한 명시적 지원이 없지만와 같은 정기적인 배포를 AWS CDK지원하는 CI/CD 시스템에서 CDK 앱을 CloudFormation 배포하도록 설계되었습니다 AWS CodePipeline. 이 신디사이저는 대부분의 사용 사례에 가장 적합한 옵션입니다.
DefaultStackSynthesizer
부트스트랩 계약
DefaultStackSynthesizer
에는 다음 부트스트랩 계약이 필요합니다. 부트스트래핑 중 생성해야 하는 리소스는 다음과 같습니다.
부트스트랩 리소스 | 설명 | 기본 예상 리소스 이름 | 용도 |
---|---|---|---|
Amazon S3 버킷 |
스테이징 버킷 |
cdk-hnb659fds-assets- |
파일 자산을 저장합니다. |
Amazon ECR리포지토리 |
스테이징 리포지토리 |
cdk-hnb659fds-container-assets- |
저장 및 관리 Docker 이미지 자산. |
IAM 역할 |
배포 역할 |
cdk-hnb659fds-deploy-role- |
에서 가정 CDK CLI 및 CodePipeline 는 잠재적으로 다른 역할을 수임하고 배포를 AWS CloudFormation 시작합니다. 이 역할의 신뢰 정책은이 AWS 환경에서를 사용하여 AWS CDK 를 배포할 수 있는 사용자를 제어합니다. |
IAM 역할 |
AWS CloudFormation 실행 역할 |
cdk-hnb659fds-cfn-exec-role- |
이 역할은에서 배포를 수행하는 AWS CloudFormation 데 사용됩니다. 이 역할의 정책은 CDK 배포가 수행할 수 있는 작업을 제어합니다. |
IAM 역할 |
조회 역할 |
cdk-hnb659fds-lookup-role- |
이 역할은가 CDK CLI 는 환경 컨텍스트 조회를 수행해야 합니다. 이 역할의 신뢰 정책은 환경에서 누가 정보를 조회할 수 있는지 제어합니다. |
IAM 역할 |
파일 게시 역할 |
cdk-hnb659fds-file-publishing-role- |
이 역할은 Amazon S3 스테이징 버킷에 자산을 업로드하는 데 사용됩니다. 배포 역할에서 수임합니다. |
IAM 역할 |
이미지 게시 역할 |
cdk-hnb659fds-image-publishing-role- |
이 역할은 업로드에 사용됩니다.Docker 이미지를 Amazon ECR 스테이징 리포지토리에 저장합니다. 배포 역할에서 수임합니다. |
SSM 파라미터 |
부트스트랩 버전 파라미터 |
/cdk-bootstrap/hnb659fds/ |
부트스트랩 템플릿의 버전입니다. 부트스트랩 템플릿과 CDK CLI 를 사용하여 요구 사항을 검증합니다. |
CDK 스택 합성을 사용자 지정하는 한 가지 방법은를 수정하는 것입니다DefaultStackSynthesizer
. Stack
인스턴스의 synthesizer
속성을 사용하여 단일 CDK 스택에 대해이 신디사이저를 사용자 지정할 수 있습니다. App
인스턴스의 defaultStackSynthesizer
속성을 사용하여 CDK 앱의 모든 스택에 DefaultStackSynthesizer
대해를 수정할 수도 있습니다.
한정자 변경
한정자는 부트스트래핑 중 생성된 리소스의 이름에 추가됩니다. 기본적으로 이 값은 hnb659fds
입니다. 부트스트래핑 중에 한정자를 수정할 때 동일한 한정자를 사용하도록 CDK 스택 합성을 사용자 지정해야 합니다.
한정자를 변경하려면 CDK의 qualifier
속성을 구성DefaultStackSynthesizer
하거나 프로젝트 cdk.json
파일의 컨텍스트 키로 한정자를 구성합니다.
다음은 qualifier
의 DefaultStackSynthesizer
속성을 구성하는 예입니다.
new MyStack(this, 'MyStack', {
synthesizer: new DefaultStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
});
다음은 cdk.json
에서 한정자를 컨텍스트 키로 구성하는 예입니다.
{
"app": "...",
"context": {
"@aws-cdk/core:bootstrapQualifier": "MYQUALIFIER"
}
}
리소스 이름 변경
다른 모든 DefaultStackSynthesizer
속성은 부트스트랩 템플릿의 리소스 이름과 관련이 있습니다. 부트스트랩 템플릿을 수정하고 리소스 이름 또는 이름 지정 체계를 변경한 경우에만 이러한 속성을 제공해야 합니다.
모든 속성은 특수 자리 표시자 ${Qualifier}
, ${AWS::Partition}
, ${AWS::AccountId}
, ${AWS::Region}
를 수락합니다. 이러한 자리 표시자는 qualifier
각각 파라미터의 값과 스택 환경의 AWS 파티션, 계정 ID 및 AWS 리전 값으로 대체됩니다.
다음 예에서는 신디사이저를 인스턴스화하는 것처럼 기본값과 함께 DefaultStackSynthesizer
에 대해 가장 일반적으로 사용되는 속성을 보여줍니다. 전체 목록은 섹션을 참조하세요DefaultStackSynthesizerProps.
new DefaultStackSynthesizer({
// Name of the S3 bucket for file assets
fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
bucketPrefix: '',
// Name of the ECR repository for Docker image assets
imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
dockerTagPrefix: '',
// ARN of the role assumed by the CLI and Pipeline to deploy here
deployRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}',
deployRoleExternalId: '',
// ARN of the role used for file asset publishing (assumed from the CLI role)
fileAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}',
fileAssetPublishingExternalId: '',
// ARN of the role used for Docker asset publishing (assumed from the CLI role)
imageAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}',
imageAssetPublishingExternalId: '',
// ARN of the role passed to CloudFormation to execute the deployments
cloudFormationExecutionRole: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}',
// ARN of the role used to look up context information in an environment
lookupRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}',
lookupRoleExternalId: '',
// Name of the SSM parameter which describes the bootstrap stack version number
bootstrapStackVersionSsmParameter: '/cdk-bootstrap/${Qualifier}/version',
// Add a rule to every template which verifies the required bootstrap stack version
generateBootstrapVersionRule: true,
})
CliCredentialsStackSynthesizer
사용
CDK 배포 중에 권한을 제공하는 데 사용되는 보안 자격 증명을 수정하려면를 사용하여 합성을 사용자 지정할 수 있습니다CliCredentialsStackSynthesizer
. 이 신디사이저는 부트스트래핑 중에 생성된 기본 AWS 리소스와 함께 작동하여 Amazon S3 버킷 및 Amazon ECR리포지토리와 같은 자산을 저장합니다. 부트스트래핑 CDK 중에에서 생성한 기본 IAM 역할을 사용하는 대신 배포를 시작하는 액터의 보안 자격 증명을 사용합니다. 따라서 액터의 보안 자격 증명에는 모든 배포 작업을 수행할 수 있는 유효한 권한이 있어야 합니다. 다음 다이어그램은 이 신디사이저를 사용할 때의 배포 프로세스를 보여줍니다.
CliCredentialsStackSynthesizer
사용 시
-
기본적으로는 액터의 권한을 사용하여 계정에서 API 호출을 CloudFormation 수행합니다. 따라서 현재 자격 증명에는 CloudFormation 스택의 AWS 리소스를 필요한 대로 변경할 수 있는 권한과
CreateStack
또는와 같은 필요한 CloudFormation 작업을 수행할 수 있는 권한이 있어야 합니다UpdateStack
. 배포 기능은 액터의 권한으로 제한됩니다. -
자산 게시 및 CloudFormation 배포는 현재 IAM 자격 증명을 사용하여 수행됩니다. 이 ID에는 자산 버킷 및 리포지토리에서 읽고 쓸 수 있는 충분한 권한이 있어야 합니다.
-
조회는 현재 IAM 자격 증명을 사용하여 수행되며 조회에는 해당 정책이 적용됩니다.
이 신디사이저를 사용하는 경우 --role-arn
옵션을 사용하여 별도의 CloudFormation 실행 역할을 CDK CLI 명령.
CliCredentialsStackSynthesizer
부트스트랩 계약
CliCredentialsStackSynthesizer
에는 다음 부트스트랩 계약이 필요합니다. 부트스트래핑 중 생성해야 하는 리소스는 다음과 같습니다.
부트스트랩 리소스 | 설명 | 기본 예상 리소스 이름 | 용도 |
---|---|---|---|
Amazon S3 버킷 |
스테이징 버킷 |
cdk-hnb659fds-assets- |
파일 자산을 저장합니다. |
Amazon ECR리포지토리 |
스테이징 리포지토리 |
cdk-hnb659fds-container-assets- |
저장 및 관리 Docker 이미지 자산. |
리소스 이름의 문자열 hnb659fds
를 한정자라고 합니다. 해당 기본값은 특별한 의미가 없습니다. 단일 환경에 부트스트랩 리소스의 사본이 여러 개 있을 수 있습니다. 단, 사본의 한정자가 서로 달라야 합니다. 사본이 여러 개 있으면 동일한 환경에서 서로 다른 애플리케이션의 자산을 분리하여 보관하는 데 유용할 수 있습니다.
기본 부트스트랩 템플릿을 배포하여 CliCredentialsStackSynthesizer
의 부트스트랩 계약을 충족할 수 있습니다. 기본 부트스트랩 템플릿은 IAM 역할을 생성하지만이 신디사이저는 역할을 사용하지 않습니다. 부트스트랩 템플릿을 사용자 지정하여 IAM 역할을 제거할 수도 있습니다.
CliCredentialsStackSynthesizer
수정
부트스트래핑 중 한정자 또는 기본 부트스트랩 리소스 이름을 변경하는 경우 동일한 이름을 사용하도록 신디사이저를 수정해야 합니다. 단일 스택 또는 앱의 모든 스택에 대해 신디사이저를 수정할 수 있습니다. 다음은 예제입니다.
new MyStack(this, 'MyStack', {
synthesizer: new CliCredentialsStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
});
다음 예에서는 CliCredentialsStackSynthesizer
에 대해 가장 일반적으로 사용되는 속성과 해당 기본값을 보여줍니다. 전체 목록은 섹션을 참조하세요CliCredentialsStackSynthesizerProps.
new CliCredentialsStackSynthesizer({
// Value for '${Qualifier}' in the resource names
qualifier: 'hnb659fds',
// Name of the S3 bucket for file assets
fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
bucketPrefix: '',
// Name of the ECR repository for Docker image assets
imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
dockerTagPrefix: '',
})
LegacyStackSynthesizer
사용
는 CDK v1 배포의 동작을 LegacyStackSynthesizer
에뮬레이션합니다. 배포를 수행하는 액터의 보안 자격 증명은 권한을 설정하는 데 사용됩니다. 파일 자산은 라는 AWS CloudFormation 스택을 사용하여 생성해야 하는 버킷에 업로드됩니다CDKToolkit
. CDK은 CLI 는 저장할 라는 비관리형 Amazon ECR리포지토리aws-cdk/assets
를 생성합니다.Docker 이미지 자산. 이 리포지토리를 정리하고 관리할 책임은 사용자에게 있습니다. 를 사용하여 합성된 스택은를 통해서만 배포할 LegacyStackSynthesizer
수 있습니다. CDK CLI.
CDK v1에서 CDK v2로 마이그레이션 중이고 환경을 재부팅할 수 없는 LegacyStackSynthesizer
경우를 사용할 수 있습니다. 새 프로젝트의 경우 LegacyStackSynthesizer
를 사용하지 않는 것이 좋습니다.
LegacyStackSynthesizer
부트스트랩 계약
LegacyStackSynthesizer
에는 다음 부트스트랩 계약이 필요합니다. 부트스트래핑 중 생성해야 하는 리소스는 다음과 같습니다.
부트스트랩 리소스 | 설명 | 기본 예상 리소스 이름 | 용도 |
---|---|---|---|
Amazon S3 버킷 |
스테이징 버킷 |
cdk-hnb659fds-assets- |
파일 자산을 저장합니다. |
CloudFormation 출력 |
버킷 이름 출력 |
스택 - 출력 이름 - |
스테이징 버킷의 이름을 설명하는 CloudFormation 출력 |
LegacyStackSynthesizer
는 고정된 이름의 Amazon S3 버킷이 있다고 가정하지 않습니다. 대신 합성된 CloudFormation 템플릿에는 각 파일 자산에 대한 세 가지 CloudFormation 파라미터가 포함됩니다. 이러한 파라미터는 각 파일 자산에 대해 Amazon S3 버킷 이름, Amazon S3 객체 키 및 아티팩트 해시를 저장합니다.
Docker 이미지 자산은 라는 Amazon ECR리포지토리에 게시됩니다aws-cdk/assets
. 이 이름은 자산별로 변경할 수 있습니다. 리포지토리가 존재하지 않는 경우 리포지토리가 생성됩니다.
CloudFormation 스택은 기본 이름 로 존재해야 합니다CDKToolkit
. 이 스택에는 스테이징 버킷을 CloudFormation 참조BucketName
하는 라는 내보내기가 있어야 합니다.
기본 부트스트랩 템플릿은 LegacyStackSynthesizer
부트스트랩 계약을 충족합니다. 그러나 부트스트랩 템플릿의 부트스트랩 리소스에서 Amazon S3 버킷만 사용됩니다. 부트스트랩 템플릿을 사용자 지정하여 Amazon ECR, IAM및 SSM 부트스트랩 리소스를 제거할 수 있습니다.
LegacyStackSynthesizer
배포 프로세스
이 신디사이저를 사용하면 배포 중 다음 프로세스가 수행됩니다.
-
CDK은 CLI 는 사용자 환경에서 라는 CloudFormation 스택
CDKToolkit
을 찾습니다. 이 스택에서 CDK CLI 는 라는 CloudFormation 출력을 읽습니다BucketName
.cdk deploy
와 함께--toolkit-stack-name
옵션을 사용하여 다른 스택 이름을 지정할 수 있습니다. -
배포를 시작하는 액터의 보안 자격 증명은 배포에 대한 권한을 설정하는 데 사용됩니다. 따라서 액터는 모든 배포 작업을 수행할 수 있는 충분한 권한이 있어야 합니다. 여기에는 Amazon S3 스테이징 버킷에 대한 읽기 및 쓰기, Amazon ECR리포지토리에 대한 생성 및 쓰기, AWS CloudFormation 배포 시작 및 모니터링, 배포에 필요한 모든 API 호출 수행이 포함됩니다.
-
필요한 경우 및 권한이 유효한 경우 파일 자산이 Amazon S3 스테이징 버킷에 게시됩니다.
-
필요한 경우 및 권한이 유효한 경우 Docker 이미지 자산은 자산의
repositoryName
속성에 의해 이름이 지정된 리포지토리에 게시됩니다. 리포지토리 이름을 제공하지 않는 경우 기본값은'aws-cdk/assets'
입니다. -
권한이 유효하면 AWS CloudFormation 배포가 수행됩니다. Amazon S3 스테이징 버킷 및 키의 위치는 CloudFormation 파라미터로 전달됩니다.