これは AWS CDK v2 デベロッパーガイドです。古い v1 CDK は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Python AWS CDK での の操作
Python は で完全にサポートされているクライアント言語であり AWS Cloud Development Kit (AWS CDK) 、安定していると見なされます。Python AWS CDK で を操作するには、標準の Python 実装 (CPython)、 を使用した仮想環境、Python パッケージインストーラ などvirtualenv
、使い慣れたツールを使用しますpip
。 AWS コンストラクトライブラリを構成するモジュールは、pypi.orgsnake_case
メソッド名など) を使用します。
任意のエディタまたは を使用できますIDE。多くの AWS CDK デベロッパーは、Visual Studio Code
Python の開始方法
を使用するには AWS CDK、 AWS アカウントと認証情報が必要で、Node.js AWS CDK と Toolkit がインストールされている必要があります。「の開始方法 AWS CDK」を参照してください。
Python AWS CDK アプリケーションには Python 3.6 以降が必要です。まだインストールしていない場合は、python.orgyum
、 apt
など) を使用してインストールできます。Mac ユーザーは、macOS 用の Linux スタイルのパッケージマネージャーである Homebrew
注記
サードパーティー言語の非推奨: 言語バージョンは、ベンダーまたはコミュニティによって共有される EOL (サポート終了) までのみサポートされ、事前通知により変更される可能性があります。
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
を使用してシステム全体でモジュールをインストールするアクセス許可を取得します。
注記
Linux ディストリビューションでは、Python 3python3
.x の実行ファイル名を使用することが一般的であり、Python 2.x のインストールpython
を参照しています。一部の Distros には、Python 3 を参照するようにpython
コマンドにインストールできるオプションのパッケージがあります。これを行わない場合は、プロジェクトのメインディレクトリcdk.json
で を編集することで、アプリケーションの実行に使用するコマンドを調整できます。
注記
Windows では、実行可能ファイル >Python launcher for Windows を使用して py Python (および pip) を呼び出すことができます。 https://docs.python.org/3/using/windows.html#launcher
コマンドラインpythonで と入力すると、Windows ストアからの Python のインストールに関するメッセージが表示される場合、Python の Windows バージョンをインストールした後でも、Windows の「アプリケーション実行エイリアス設定の管理」パネルを開き、Python の 2 つの App Installer エントリをオフにします。
「プロジェクトの作成」
空のディレクトリ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
機能します。
CDK Toolkit v1.70.0 以前を使用して AWS CDK プロジェクトを初期化した場合、仮想環境は ではなく .env
ディレクトリにあります.venv
。
重要
作業を開始するたびに、プロジェクトの仮想環境をアクティブ化します。そうしないと、そこにインストールされたモジュールにアクセスできなくなり、インストールしたモジュールは Python グローバルモジュールディレクトリに移動します (または、アクセス許可エラーが発生します)。
仮想環境を初めてアクティブ化したら、アプリケーションの標準依存関係をインストールします。
python -m pip install -r requirements.txt
AWS 構築ライブラリモジュールの管理
Python パッケージインストーラー pipを使用して、アプリケーションで使用する Construct Library AWS モジュール、および必要なパッケージをインストールおよび更新します。 pip は、それらのモジュールの依存関係も自動的にインストールします。システムがスタンドアロンコマンドpipとして認識しない場合は、次のように Python モジュールpipとして を呼び出します。
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
、、、 という名前の Amazon Route 53 名前空間が aws-route53-targets
3 つ追加されていますaws-route53-patterns
aws-route53resolver
。
注記
CDK API リファレンスの Python エディションにはパッケージ名も表示されます。
Construct Library モジュールを AWS Python コードにインポートするために使用される名前は次のようになります。
import aws_cdk.aws_s3 as s3 import aws_cdk.aws_lambda as lambda_
アプリケーションに AWS CDK クラスと AWS コンストラクトライブラリモジュールをインポートするときは、次のプラクティスをお勧めします。これらのガイドラインに従うことで、コードが他の AWS CDK アプリケーションと一貫性を持ち、理解しやすくなります。
-
通常、最上位の から個々のクラスをインポートします
aws_cdk
。from aws_cdk import App, Construct
-
から多数のクラスが必要な場合は
aws_cdk
、個々のクラスをインポートcdk
する代わりに、 の名前空間エイリアスを使用できます。両方は避けてください。import aws_cdk as cdk
-
通常、短い名前空間エイリアスを使用して AWS ライブラリの作成 をインポートします。
import aws_cdk.aws_s3 as s3
モジュールをインストールしたら、プロジェクトの依存関係を一覧表示するプロジェクトの requirements.txt
ファイルを更新します。これを行うのは、 を使用するのではなく、手動で行うのが最善ですpip freeze
。 は、Python 仮想環境にインストールされているすべてのモジュールの最新バージョンをpip freeze
キャプチャします。これは、プロジェクトをバンドルして他の場所で実行する場合に役立ちます。
ただし、通常、 requirements.txt
は最上位の依存関係 (アプリケーションが直接依存するモジュール) のみをリストし、それらのライブラリの依存関係をリストしないでください。この戦略により、依存関係の更新が簡単になります。
を編集requirements.txt
してアップグレードを許可できます。==
前述のバージョン番号を に置き換えて、互換性のある上位バージョンへのアップグレード~=
を許可するか、バージョン要件を完全に削除して、利用可能な最新バージョンのモジュールを指定します。
アップグレードを許可するように適切にrequirements.txt
編集された では、次のコマンドを実行して、プロジェクトにインストールされているモジュールをいつでもアップグレードします。
pip install --upgrade -r requirements.txt
での依存関係の管理 Python
Python では、依存関係を指定するには、requirements.txt
アプリケーションまたはコンストラクトライブラリsetup.py
に を入力します。その後、依存関係は PIP ツールで管理されます。PIP は、次のいずれかの方法で呼び出されます。
pip
command
options
python -m pipcommand
options
python -m pip 呼び出しはほとんどのシステムで機能します。 PIPpipでは、 の実行可能ファイルがシステムパス上にある必要があります。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
( ではなく) などの別のファイルを使用します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を自動的にインストールしますが、インストールできるパッケージのコピーは 1 つだけです。依存関係ツリーで最も高いバージョンが選択されます。アプリケーションには、インストールされるパッケージのバージョンが常に最後の単語になります。
AWS CDK Python の idioms
言語の競合
Python では、 lambda
は言語キーワードであるため、 AWS Lambda コンストラクトライブラリモジュールまたは Lambda 関数の名前として使用することはできません。このような競合の Python の規則は、lambda_
変数名に のように末尾のアンダースコアを使用することです。
慣例により、 AWS CDK コンストラクトの 2 番目の引数は という名前になりますid
。独自のスタックとコンストラクトを記述するときは、Python 組み込み関数 をパラメータid
「シャドウ」を呼び出しid()
、オブジェクトの一意の識別子を返します。この関数はあまり使用されませんが、コンストラクトで必要になった場合は、 などの引数の名前を変更しますconstruct_id
。
引数とプロパティ
すべての AWS Construct Library クラスは、3 つの引数を使用してインスタンス化されます。つまり、コンストラクトが定義されているスコープ (コンストラクトツリー内の親)、id 、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 と AWS CDKの TypeScript コアの間で変換されます) が予期しないタイプに対応できない場合にランタイムエラーが発生することがあります。
経験上、Python プログラマーが行うタイプエラーは、これらのカテゴリに分類される傾向があります。
-
コンストラクトがコンテナ (Python リストまたはディクショナリ) を期待する単一の値を渡す、またはその逆。
-
レイヤー 1 (
CfnXxxxxx
) コンストラクトに関連付けられたタイプの値を L2 または L3 コンストラクトに、またはその逆に渡す。
AWS CDK Python モジュールには型注釈が含まれているため、それらをサポートするツールを使用して型をサポートできます。など、これらIDEをサポートする を使用していない場合はPyCharm