파라미터 - AWS Cloud Development Kit (AWS CDK) v2

AWS CDK v2 개발자 안내서입니다. 구형 CDK v1은 2022년 6월 1일에 유지 보수에 들어갔고 2023년 6월 1일에 지원이 종료되었습니다.

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

파라미터

매개변수는 배포 시 제공되는 사용자 지정 값입니다. 매개변수는 의 기능입니다 AWS CloudFormation. AWS CloudFormation 템플릿을 AWS Cloud Development Kit (AWS CDK) 합성하므로 배포 시 파라미터에 대한 지원도 제공합니다.

파라미터에 대한 정보

를 AWS CDK사용하여 매개변수를 정의한 다음 작성한 구문의 속성에 사용할 수 있습니다. 파라미터가 포함된 스택을 배포할 수도 있습니다.

AWS CDK 툴킷을 사용하여 AWS CloudFormation 템플릿을 배포할 때는 명령줄에 매개변수 값을 입력합니다. AWS CloudFormation 콘솔을 통해 템플릿을 배포하는 경우 매개변수 값을 입력하라는 메시지가 표시됩니다.

일반적으로 AWS CloudFormation 매개 변수를 와 함께 사용하지 않는 것이 좋습니다 AWS CDK. AWS CDK 앱에 값을 전달하는 일반적인 방법은 컨텍스트 값과 환경 변수입니다. 합성 시에는 매개변수 값을 사용할 수 없으므로 CDK 앱에서 흐름 제어 및 기타 용도로 매개변수 값을 쉽게 사용할 수 없습니다.

참고

CfnCondition구문을 사용하여 파라미터를 사용하여 흐름을 제어할 수 있지만, 이는 네이티브 명령문에 비해 어색하긴 하지만 말입니다. if

매개 변수를 사용하려면 작성 중인 코드가 배포 시점과 합성 시 어떻게 동작하는지 염두에 두어야 합니다. 이로 인해 AWS CDK 응용 프로그램을 이해하고 추론하기가 더 어려워지지만 대부분의 경우 별 도움이 되지 않습니다.

일반적으로 CDK 앱이 필요한 정보를 잘 정의된 방식으로 받아들이고 이를 직접 사용하여 CDK 앱에서 구문을 선언하도록 하는 것이 좋습니다. 이상적인 AWS CDK생성 AWS CloudFormation 템플릿은 구체적이며 배포 시 지정할 값이 남아 있지 않습니다.

그러나 AWS CloudFormation 매개변수가 고유하게 적합한 사용 사례가 있습니다. 예를 들어 인프라를 정의하고 배포하는 별도의 팀이 있는 경우 매개변수를 사용하여 생성된 템플릿을 더 광범위하게 유용하게 사용할 수 있습니다. 또한 AWS CloudFormation 매개 변수가 AWS CDK 지원되므로 AWS CloudFormation 템플릿을 사용하는 AWS 서비스 (예: Service Catalog) 에서 를 사용할 수 있습니다. AWS CDK 이러한 AWS 서비스는 매개 변수를 사용하여 배포되는 템플릿을 구성합니다.

매개변수 정의

CfnParameter클래스를 사용하여 매개변수를 정의합니다. 엄밀히 따지자면 둘 다 선택사항이긴 하지만 대부분의 매개 변수에 대해 최소한 한 가지 유형과 설명을 지정하는 것이 좋습니다. 설명은 AWS CloudFormation 콘솔에서 사용자에게 매개변수 값을 입력하라는 메시지가 표시될 때 나타납니다. 사용 가능한 유형에 대한 자세한 내용은 유형을 참조하십시오.

참고

모든 범위에서 매개변수를 정의할 수 있습니다. 하지만 코드를 리팩토링할 때 논리 ID가 변경되지 않도록 스택 수준에서 매개변수를 정의하는 것이 좋습니다.

TypeScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
JavaScript
const uploadBucketName = new CfnParameter(this, "uploadBucketName", { type: "String", description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
Python
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String", description="The name of the Amazon S3 bucket where uploaded files will be stored.")
Java
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName") .type("String") .description("The name of the Amazon S3 bucket where uploaded files will be stored") .build();
C#
var uploadBucketName = new CfnParameter(this, "uploadBucketName", new CfnParameterProps { Type = "String", Description = "The name of the Amazon S3 bucket where uploaded files will be stored" });

파라미터 사용

CfnParameter인스턴스는 토큰을 통해 해당 값을 AWS CDK 앱에 노출합니다. 모든 토큰과 마찬가지로 파라미터의 토큰도 합성 시 확인됩니다. 하지만 이는 구체적인 값이 아니라 AWS CloudFormation 템플릿에 정의된 파라미터 (배포 시 확인됨) 에 대한 참조로 해석됩니다.

토큰은 Token 클래스의 인스턴스나 문자열, 문자열 목록 또는 숫자 인코딩으로 검색할 수 있습니다. 선택 사항은 매개 변수를 사용할 클래스 또는 메서드에 필요한 값의 종류에 따라 달라집니다.

TypeScript
속성 값 종류
value Token클래스 인스턴스
valueAsList 문자열 목록으로 표시되는 토큰
valueAsNumber 숫자로 표시되는 토큰
valueAsString 문자열로 표시되는 토큰
JavaScript
속성 값 종류
value Token클래스 인스턴스
valueAsList 문자열 목록으로 표시되는 토큰
valueAsNumber 숫자로 표시되는 토큰
valueAsString 문자열로 표시되는 토큰
Python
속성 값 종류
value Token클래스 인스턴스
value_as_list 문자열 목록으로 표시되는 토큰
value_as_number 숫자로 표시되는 토큰
value_as_string 문자열로 표시되는 토큰
Java
속성 값 종류
getValue() Token클래스 인스턴스
getValueAsList() 문자열 목록으로 표시되는 토큰
getValueAsNumber() 숫자로 표시되는 토큰
getValueAsString() 문자열로 표시되는 토큰
C#
속성 값 종류
Value Token클래스 인스턴스
ValueAsList 문자열 목록으로 표시되는 토큰
ValueAsNumber 숫자로 표시되는 토큰
ValueAsString 문자열로 표시되는 토큰

예를 들어, Bucket 정의에서 매개변수를 사용하려면

TypeScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
JavaScript
const bucket = new Bucket(this, "myBucket", { bucketName: uploadBucketName.valueAsString});
Python
bucket = Bucket(self, "myBucket", bucket_name=upload_bucket_name.value_as_string)
Java
Bucket bucket = Bucket.Builder.create(this, "myBucket") .bucketName(uploadBucketName.getValueAsString()) .build();
C#
var bucket = new Bucket(this, "myBucket") { BucketName = uploadBucketName.ValueAsString };

파라미터를 사용하여 배포하기

AWS CloudFormation 콘솔을 통해 생성된 AWS CloudFormation 템플릿을 배포할 때 각 매개변수의 값을 제공하라는 메시지가 표시됩니다.

CDK CLI cdk deploy 명령을 사용하거나 CDK 프로젝트의 스택 파일에 매개변수 값을 지정하여 매개변수 값을 제공할 수도 있습니다.

파라미터 값 제공은 다음과 같습니다. cdk deploy

CDK CLI cdk deploy 명령을 사용하여 배포하는 경우 배포 시 --parameters 옵션과 함께 매개변수 값을 제공할 수 있습니다.

다음은 cdk deploy 명령 구조의 예시입니다.

$ cdk deploy stack-logical-id --parameters stack-name:parameter-name=parameter-value

CDK 앱에 단일 스택이 포함된 경우 스택 논리적 ID 인수나 --parameters 옵션의 stack-name 값을 제공할 필요가 없습니다. CLICDK는 이러한 값을 자동으로 찾아 제공합니다. 다음은 CDK 앱에서 단일 스택의 uploadBucketName 파라미터 uploadbucket 값을 지정하는 예시입니다.

$ cdk deploy --parameters uploadBucketName=uploadbucket

멀티스택 애플리케이션을 위한 cdk deploy로 파라미터 값 제공

다음은 두 개의 CDK 스택이 TypeScript 포함된 CDK 애플리케이션의 예시입니다. 각 스택에는 Amazon S3 버킷 인스턴스와 Amazon S3 버킷 이름을 설정하는 파라미터가 포함되어 있습니다.

import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; // Define the CDK app const app = new cdk.App(); // First stack export class MyFirstStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'myfirststackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MyFirstBucket', { bucketName: bucketNameParam.valueAsString }); } } // Second stack export class MySecondStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set a default parameter name const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', { type: 'String', default: 'mysecondstackdefaultbucketname' }); // Define an S3 bucket new s3.Bucket(this, 'MySecondBucket', { bucketName: bucketNameParam.valueAsString }); } } // Instantiate the stacks new MyFirstStack(app, 'MyFirstStack', { stackName: 'MyFirstDeployedStack', }); new MySecondStack(app, 'MySecondStack', { stackName: 'MySecondDeployedStack', });

여러 스택이 포함된 CDK 앱의 경우 다음을 수행할 수 있습니다.

  • 매개변수를 사용하여 스택 1개 배포 - 다중 스택 애플리케이션에서 단일 스택을 배포하려면 스택 논리 ID를 인수로 제공하십시오.

    다음은 를 파라미터 MySecondStack mynewbucketname 값으로 배포하는 예제입니다. bucketNameParam

    $ cdk deploy MySecondStack --parameters bucketNameParam='mynewbucketname'
  • 모든 스택 배포 및 각 스택의 파라미터 값 지정 — '*' 와일드카드 또는 모든 스택을 배포하는 --all 옵션을 제공하십시오. 단일 명령으로 --parameters 옵션을 여러 번 제공하여 각 스택의 파라미터 값을 지정합니다. 다음은 그 예제입니다.

    $ cdk deploy '*' --parameters MyFirstDeployedStack:bucketNameParam='mynewfirststackbucketname' --parameters MySecondDeployedStack:bucketNameParam='mynewsecondstackbucketname'
  • 모든 스택 배포 및 단일 스택의 파라미터 값 지정 — '*' 와일드카드 또는 모든 스택을 배포하는 --all 옵션을 제공합니다. 그런 다음 옵션에서 파라미터를 정의할 스택을 지정합니다. --parameters 다음은 CDK 앱에 모든 스택을 배포하고 스택의 매개변수 값을 지정하는 예제입니다. MySecondDeployedStack AWS CloudFormation 다른 모든 스택은 디폴트 파라미터 값을 배포하고 사용합니다.

    $ cdk deploy '*' --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname' $ cdk deploy --all --parameters MySecondDeployedStack:bucketNameParam='mynewbucketname'

중첩된 스택이 있는 cdk deploy 애플리케이션에 매개변수 값 제공

중첩된 스택이 포함된 애플리케이션으로 작업할 때의 CDK CLI 동작은 다중 스택 애플리케이션과 유사합니다. 주요 차이점은 모든 중첩된 스택을 배포하려는 경우 와일드카드를 사용한다는 것입니다. '**' '*'와일드카드는 모든 스택을 배포하지만 중첩된 스택은 배포하지 않습니다. '**'와일드카드는 중첩된 스택을 포함한 모든 스택을 배포합니다.

다음은 중첩 스택 하나에 매개 변수 값을 지정하면서 중첩 스택을 배포하는 예제입니다.

$ cdk deploy '**' --parameters MultiStackCdkApp/SecondStack:bucketNameParam='mysecondstackbucketname'

cdk deploy명령 옵션에 대한 자세한 내용은 을 참조하십시오. cdk deploy