v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원을 종료했습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CDK Python에서 작업하기
Python은 에서 완전히 지원되는 클라이언트 AWS Cloud Development Kit (AWS CDK) 언어이며 안정적인 것으로 간주됩니다. Python으로 작업하면 AWS CDK 표준 Python 구현 (CPython), 를 사용한 virtualenv
가상 환경, Python 패키지 설치 프로그램 pip
등 친숙한 도구가 사용됩니다. AWS 구성 라이브러리를 구성하는 모듈은 pypi.org를snake_case
아무 편집기나 사용할 수 있습니다. IDE 많은 AWS CDK 개발자가 공식 확장을
Python 시작하기
를 사용하려면 AWS 계정과 자격 증명이 있어야 AWS CDK하며 Node.js 및 툴킷이 설치되어 있어야 합니다. AWS CDK 시작하기 AWS CDK을 참조하세요.
Python AWS CDK 응용 프로그램에는 Python 3.6 이상이 필요합니다. 아직 설치하지 않았다면 python.org에서yum
, apt
등) 를 사용하여 설치할 수 있습니다. Mac 사용자는 macOS용 리눅스 스타일 패키지 관리자인 Homebrew에
참고
타사 언어 지원 중단: 언어 버전은 공급업체 또는 커뮤니티에서 해당 버전 EOL (End Of Life) 을 공유할 때까지만 지원되며 사전 통지에 따라 변경될 수 있습니다.
Python 패키지 설치 프로그램과 가상 환경 관리자도 필요합니다. pip
virtualenv
호환되는 Python 버전의 Windows 설치에는 다음과 같은 도구가 포함됩니다. Linux에서는 pip
패키지 관리자에 별도의 패키지로 virtualenv
제공될 수 있습니다. 또는 다음 명령을 사용하여 설치할 수도 있습니다.
python -m ensurepip --upgrade python -m pip install --upgrade pip python -m pip install --upgrade virtualenv
권한 오류가 발생하는 경우 --user
플래그를 사용하여 위 명령을 실행하여 모듈이 사용자 디렉토리에 설치되도록 하거나 를 사용하여 sudo
모듈을 시스템 전체에 설치할 수 있는 권한을 얻으십시오.
참고
리눅스 배포판은 Python 3.x의 실행 파일 이름을 사용하는 것이 일반적이며 python3
Python 2.x python
설치를 참조합니다. 일부 배포판에는 python
명령이 Python 3을 참조하도록 하는 설치 가능한 선택적 패키지가 있습니다. 그렇지 않으면 프로젝트의 메인 cdk.json
디렉터리에서 편집하여 애플리케이션을 실행하는 데 사용되는 명령을 조정할 수 있습니다.
참고
윈도우에서는 py 실행 파일인 윈도우용 >Python 런처를
Windows 버전의 Python을 설치한 후에도 명령줄에 입력하여 python Windows Store에서 Python을 설치하라는 메시지가 표시되면 Windows의 앱 실행 별칭 관리 설정 패널을 열고 Python용 앱 설치 프로그램 항목 두 개를 끄십시오.
프로젝트 생성
빈 디렉터리에서 cdk init
호출하여 새 AWS CDK 프로젝트를 생성합니다. --language
옵션을 사용하고 다음을 지정합니다python
.
mkdir my-project cd my-project cdk init app --language python
cdk init
프로젝트 폴더 이름을 사용하여 클래스, 하위 폴더, 파일 등 프로젝트의 다양한 요소에 이름을 지정합니다. 폴더 이름의 하이픈은 밑줄로 변환됩니다. 하지만 이름은 Python 식별자의 형식을 따라야 합니다. 예를 들어, 숫자로 시작하거나 공백을 포함해서는 안 됩니다.
새 프로젝트를 사용하려면 해당 가상 환경을 활성화하세요. 이렇게 하면 프로젝트의 종속성을 전역적으로 설치하는 대신 프로젝트 폴더에 로컬로 설치할 수 있습니다.
source .venv/bin/activate
참고
이를 Mac/Linux 명령으로 인식하여 가상 환경을 활성화할 수 있습니다. Python 템플릿에는 Windows에서 동일한 명령을 사용할 수 있도록 하는 배치 파일인 source.bat
가 포함되어 있습니다. 기존 Windows .\venv\Scripts\activate
명령어인, 도 작동합니다.
CDKToolkit v1.70.0 또는 이전 버전을 사용하여 AWS CDK 프로젝트를 초기화한 경우 가상 환경이 대신 디렉토리에 있습니다. .env
.venv
중요
작업을 시작할 때마다 프로젝트의 가상 환경을 활성화하십시오. 그렇지 않으면 거기에 설치된 모듈에 액세스할 수 없으며 설치한 모듈은 Python 글로벌 모듈 디렉터리로 이동합니다 (또는 권한 오류가 발생합니다).
가상 환경을 처음 활성화한 후 앱의 표준 종속 항목을 설치하세요.
python -m pip install -r requirements.txt
AWS 구성 라이브러리 모듈 관리
Python 패키지 설치 프로그램을 사용하여 필요한 다른 패키지뿐 아니라 앱에서 사용할 수 있도록 AWS Construct Library 모듈을 설치하고 업데이트하십시오. pip pip또한 해당 모듈의 종속 항목을 자동으로 설치합니다. 시스템이 독립형 pip 명령으로 인식되지 않는 경우 다음과 pip 같이 Python 모듈로 호출하십시오.
python -m pip
PIP-COMMAND
대부분의 AWS CDK 구문은 안에 있습니다. aws-cdk-lib
실험 모듈은 와 같은 aws-cdk.
이름을 가진 별도의 모듈에 있습니다. 서비스 이름에는 aws 접두사가 포함됩니다. 모듈 이름이 확실하지 않은 경우 PyPI에서 검색하세요SERVICE-NAME
.alpha
python -m pip install aws-cdk.aws-codestar-alpha
일부 서비스의 구조는 둘 이상의 네임스페이스에 있습니다. 예를 들어, 이외에도aws-cdk.aws-route53
, 및 라는 aws-route53-targets
이름의 Amazon Route 53 네임스페이스가 세 개 더 있습니다. aws-route53-patterns
aws-route53resolver
참고
CDKAPIReference의 Python 버전에는 패키지 이름도 표시됩니다.
AWS Construct Library 모듈을 Python 코드로 가져오는 데 사용되는 이름은 다음과 같습니다.
import aws_cdk.aws_s3 as s3 import aws_cdk.aws_lambda as lambda_
응용 프로그램에서 AWS CDK 클래스와 AWS Construct Library 모듈을 가져올 때는 다음 방법을 따르는 것이 좋습니다. 이 가이드라인을 따르면 코드를 다른 AWS CDK 응용 프로그램과 일관되게 작성할 수 있을 뿐만 아니라 코드를 더 쉽게 이해할 수 있습니다.
-
일반적으로 최상위 수준에서
aws_cdk
개별 클래스를 가져옵니다.from aws_cdk import App, Construct
-
에서 많은 클래스가 필요한 경우 개별
aws_cdk
클래스를 가져오는cdk
대신 의 네임스페이스 별칭을 사용할 수 있습니다. 둘 다 하지 마세요.import aws_cdk as cdk
-
일반적으로 짧은 네임스페이스 별칭을 사용하여 AWS Construct Libraries를 가져오세요.
import aws_cdk.aws_s3 as s3
모듈을 설치한 후 프로젝트 파일을 업데이트하세요. 이 requirements.txt
파일에는 프로젝트의 종속성이 나열되어 있습니다. 를 사용하는 pip freeze
것보다 수동으로 수행하는 것이 가장 좋습니다. pip
freeze
Python 가상 환경에 설치된 모든 모듈의 현재 버전을 캡처합니다. 이는 다른 곳에서 실행할 프로젝트를 번들링할 때 유용할 수 있습니다.
하지만 일반적으로 최상위 종속성 (앱이 직접 의존하는 모듈) 만 나열하고 해당 라이브러리의 종속성은 나열하지 않아야 합니다. requirements.txt
이 전략을 사용하면 종속성을 더 간단하게 업데이트할 수 있습니다.
업그레이드를 requirements.txt
허용하도록 편집할 수 있습니다. 호환성이 더 높은 버전으로 ~=
업그레이드하려면 ==
앞의 버전 번호를 로 바꾸거나 버전 요구 사항을 완전히 제거하여 사용 가능한 최신 모듈 버전을 지정할 수 있습니다.
업그레이드가 가능하도록 적절하게 requirements.txt
편집한 후에는 다음 명령을 실행하여 프로젝트에 설치된 모듈을 언제든지 업그레이드할 수 있습니다.
pip install --upgrade -r requirements.txt
에서 종속성 관리 Python
Python에서는 응용 프로그램이나 setup.py
구성 라이브러리에 종속성을 삽입하여 종속성을 지정합니다. requirements.txt
그런 다음 도구를 사용하여 종속성을 관리합니다. PIP PIP다음 방법 중 하나로 호출됩니다.
pip
command
options
python -m pipcommand
options
python -m pip호출은 대부분의 시스템에서 pip 작동하므로 시스템 경로에 PIP 실행 파일이 있어야 합니다. pip작동하지 않으면 로 교체해 보세요. python -m pip
이 cdk init --language python 명령은 새 프로젝트를 위한 가상 환경을 만듭니다. 이렇게 하면 각 프로젝트에 고유한 버전의 종속성과 기본 requirements.txt
파일을 지정할 수 있습니다. 프로젝트 작업을 시작할 source .venv/bin/activate 때마다 이 가상 환경을 실행하여 활성화해야 합니다. Windows에서는 .\venv\Scripts\activate 대신 실행하십시오.
CDK애플리케이션
다음은 예 requirements.txt
파일입니다. 에는 종속성 잠금 기능이 PIP 없으므로 다음과 같이 == 연산자를 사용하여 모든 종속성에 대해 정확한 버전을 지정하는 것이 좋습니다.
aws-cdk-lib==2.14.0 aws-cdk.aws-appsync-alpha==2.10.0a0
로 모듈을 설치해도 모듈이 자동으로 pip install 추가되지는 않습니다. requirements.txt
직접 해야 합니다. 종속 항목의 최신 버전으로 업그레이드하려면 에서 requirements.txt
버전 번호를 편집하십시오.
프로젝트 생성 또는 편집 후 프로젝트 종속성을 설치하거나 requirements.txt
업데이트하려면 다음을 실행합니다.
python -m pip install -r requirements.txt
작은 정보
이 pip freeze 명령은 설치된 모든 종속성 버전을 텍스트 파일에 쓸 수 있는 형식으로 출력합니다. 와 함께 pip install -r
요구 사항 파일로 사용할 수 있습니다. 이 파일은 모든 종속성 (전이 종속성 포함) 을 테스트할 때 사용한 정확한 버전에 고정하는 데 편리합니다. 나중에 패키지를 업그레이드할 때 문제가 발생하지 않도록 하려면 freeze.txt
(not) 와 같은 별도의 파일을 사용하십시오. requirements.txt
그런 다음 프로젝트의 종속성을 업그레이드할 때 다시 생성하세요.
서드파티 구성 라이브러리
라이브러리에서는 종속성이 지정되므로 setup.py
애플리케이션에서 패키지를 사용할 때 전이적 종속성이 자동으로 다운로드됩니다. 그렇지 않으면 패키지를 사용하려는 모든 애플리케이션이 종속성을 해당 패키지로 복사해야 합니다. requirements.txt
여기에 setup.py
예가 나와 있습니다.
from setuptools import setup setup( name='my-package', version='0.0.1', install_requires=[ 'aws-cdk-lib==2.14.0', ], ... )
개발용 패키지를 작업하려면 가상 환경을 만들거나 활성화한 후 다음 명령을 실행합니다.
python -m pip install -e .
전이적 종속성을 PIP 자동으로 설치하지만 한 패키지의 복사본은 하나만 설치할 수 있습니다. 종속성 트리에서 가장 높게 지정된 버전이 선택되며, 설치되는 패키지 버전의 최종 결정권은 항상 응용 프로그램에 표시됩니다.
AWS CDK Python의 관용구
언어 충돌
Python에서 lambda
는 언어 키워드이므로 AWS Lambda 구성 라이브러리 모듈 또는 Lambda 함수의 이름으로 사용할 수 없습니다. 이러한 충돌에 대한 Python 규칙은 변수 이름에서와 lambda_
같이 후행 밑줄을 사용하는 것입니다.
규칙에 따라 구문의 두 번째 인수에는 이름이 AWS CDK 지정됩니다. id
스택과 구문을 직접 작성할 때 매개 변수를 호출하면 객체의 고유 식별자를 반환하는 Python 내장 함수를 id
id()
“그림자”로 만듭니다. 이 함수는 자주 사용되지는 않지만, 예를 들어 구문에 이 함수가 필요할 경우 인수 이름을 바꾸세요. construct_id
인수 및 속성
모든 AWS Construct Library 클래스는 구문이 정의되는 범위 (구성 트리의 부모), id, props라는 세 가지 인수를 사용하여 인스턴스화됩니다. props는 구문이 생성하는 리소스를 구성하는 데 사용하는 키/값 쌍의 번들입니다. 다른 클래스와 메서드에서도 인수에 “속성 번들” 패턴을 사용합니다.
scope 및 id는 항상 키워드 인수가 아닌 위치 인수로 전달되어야 합니다. 구문이 scope 또는 id라는 속성을 허용하는 경우 이름이 변경되기 때문입니다.
Python에서 props는 키워드 인자로 표현됩니다. 인수에 중첩된 데이터 구조가 포함된 경우 인스턴스화 시 자체 키워드 인수를 취하는 클래스를 사용하여 이러한 데이터 구조를 표현합니다. 구조화된 인수를 사용하는 다른 메서드 호출에도 동일한 패턴이 적용됩니다.
예를 들어, Amazon S3 버킷의 add_lifecycle_rule
메서드에서 transitions
속성은 Transition
인스턴스 목록입니다.
bucket.add_lifecycle_rule( transitions=[ Transition( storage_class=StorageClass.GLACIER, transition_after=Duration.days(10) ) ] )
클래스를 확장하거나 메서드를 재정의할 때 부모 클래스에서는 이해할 수 없는 추가 인수를 원하는 용도로 사용할 수 있습니다. 이 경우 관용구를 사용해도 상관없는 인수는 받아들이고, 키워드 전용 인수를 사용하여 원하는 인수를 받아들여야 합니다. **kwargs
부모 생성자나 오버라이드된 메서드를 호출할 때는 예상한 인수만 전달하세요 (대개 그냥). **kwargs
부모 클래스나 메서드가 예상하지 않은 인수를 전달하면 오류가 발생합니다.
class MyConstruct(Construct): def __init__(self, id, *, MyProperty=42, **kwargs): super().__init__(self, id, **kwargs) # ...
향후 릴리스에서 우연히 귀하의 재산에 사용한 이름을 가진 새 부동산이 AWS CDK 추가될 수 있습니다. 이렇게 해도 구문이나 메서드 사용자에게 기술적인 문제는 발생하지 않지만 (속성이 '체인' 위로 '전달되지 않기 때문에 부모 클래스나 오버라이드된 메서드는 단순히 디폴트 값을 사용함) 혼란을 야기할 수 있습니다. 속성의 이름을 지정하여 구문에 명확하게 속하도록 하면 이러한 잠재적 문제를 피할 수 있습니다. 새 속성이 많으면 해당 속성을 적절한 이름의 클래스로 묶어 단일 키워드 인수로 전달하십시오.
누락된 값
누락되거나 AWS CDK 정의되지 None
않은 값을 나타내는 데 사용됩니다. 를 사용하여 작업할 **kwargs
때는 속성이 제공되지 않은 경우 사전의 get()
메서드를 사용하여 기본값을 제공하십시오. 이 kwargs[...]
경우 값이 누락될 수 KeyError
있으므로 사용하지 마십시오.
encrypted = kwargs.get("encrypted") # None if no property "encrypted" exists encrypted = kwargs.get("encrypted", False) # specify default of False if property is missing
일부 AWS CDK 메서드 (예tryGetContext()
: 런타임 컨텍스트 값 가져오기) 가 반환될 수 있으며None
, 이 경우 명시적으로 확인해야 합니다.
인터페이스 사용
Python에는 다른 언어처럼 인터페이스 기능이 없지만 비슷한 추상 기본 클래스가
클래스가 특정 인터페이스를 구현한다는 것을 나타내기 위해 @jsii.implements
데코레이터를 사용할 수 있습니다.
from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
타입에 대한 함정
Python은 모든 변수가 모든 유형의 값을 참조할 수 있는 동적 타이핑을 사용합니다. 매개 변수와 반환 값에는 유형으로 주석을 달 수 있지만 이는 “힌트”이므로 적용되지 않습니다. 즉, Python에서는 잘못된 유형의 값을 구문에 쉽게 전달할 수 AWS CDK 있습니다. 정적 형식 언어에서처럼 빌드 중에 유형 오류가 발생하는 대신 JSII 레이어 (Python과 TypeScript 코어 사이를 변환함) 가 예상치 못한 유형을 처리하지 못할 때 런타임 오류가 발생할 수 있습니다. AWS CDK
경험상 Python 프로그래머가 범하는 유형 오류는 이러한 범주에 속하는 경향이 있습니다.
-
구문에 컨테이너 (Python 목록 또는 사전) 가 필요한 경우 단일 값을 전달하거나 그 반대의 경우도 마찬가지입니다.
-
layer 1 (
CfnXxxxxx
) 구문과 관련된 유형의 값을 L2 또는 L3 구문에 전달하거나 그 반대로 전달합니다.
AWS CDK Python 모듈에는 유형 주석이 포함되어 있으므로 이를 지원하는 도구를 사용하여 유형을 쉽게 처리할 수 있습니다. 예를 들어 이러한 기능을 IDE 지원하는 코드를 사용하지 않는 경우 빌드 프로세스의 한 PyCharm