これは v2 AWS CDK デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Cloud Development Kit (AWS CDK) ライブラリをインポートして使用し、サポートされているプログラミング言語で AWS クラウド インフラストラクチャを定義します。
AWS CDK ライブラリをインポートする
AWS CDK ライブラリは、多くの場合は aws-cdk-lib
という TypeScript パッケージ名で参照されます。実際のパッケージ名は言語によって異なります。次の内容は、CDK ライブラリをインストールしてインポートする方法の例です。
インストール | npm install aws-cdk-lib |
---|---|
Import | import * as cdk from 'aws-cdk-lib'; |
construct
ベースクラスおよびサポートコードは constructs
ライブラリにあります。API がまだ改良中である実験コンストラクトは、個別のモジュールとして分散されます。
AWS CDK API リファレンスの使用
AWS CDKで開発するときは、AWS CDK API リファレンスを使用します。
各モジュールのリファレンスマテリアルは、次のセクションに分かれています。
-
概要: の概念や例など AWS CDK、 のサービスを使用する際に知っておくべき入門資料です。
-
コンストラクト: 1 つ以上の具体的な AWS リソースを表すライブラリクラス。これらは「キュレートされた」(L2) リソースまたはパターン (L3 リソース) であり、正しいデフォルトを持つ高レベルのインターフェイスを提供します。
-
クラス: モジュールのコンストラクトによって使用される機能を提供する非コンストラクトクラス。
-
構造: プロパティ (コンストラクトの
props
引数) やオプションなどの複合値の構造を定義するデータ構造 (属性バンドル)。 -
インターフェイス: 名前が「I」で始まるすべてのインターフェイスは、対応するコンストラクトまたは他のクラスの絶対最小機能を定義します。CDK はコンストラクトインターフェイスを使用して、 AWS CDK アプリの外部で定義され、 などのメソッドによって参照される AWS リソースを表します
Bucket.fromBucketArn()
。 -
列挙型: 特定のコンストラクトパラメータの指定に使用する名前付き値のコレクション。列挙値を使用すると、CDK が合成中にこれらの値の有効性を確認できるようにします。
-
CloudFormation リソース: 名前が「Cfn」で始まるこれらの L1 コンストラクトは、CloudFormation 仕様で定義されているリソースを正確に表しています。CDK リリースごとにその仕様から自動的に生成されます。各 L2 または L3 コンストラクトは、1 つ以上の CloudFormation リソースをカプセル化します。
-
CloudFormation のプロパティタイプ: 各 CloudFormation リソースのプロパティを定義する名前付き値のコレクション。
コンストラクトクラスと比較したインターフェイス
では、インターフェイスをプログラミングの概念として理解している場合でも、明確でない可能性のある特定の方法でインターフェイス AWS CDK を使用します。
は、 などのメソッドを使用して CDK アプリケーション外で定義されたリソースの使用 AWS CDK をサポートしますBucket.fromBucketArn()
。外部リソースは変更できず、Bucket
クラスなどを使用して CDK アプリで定義されたリソースで利用可能な機能がすべて揃っていない場合があります。次に、インターフェイスは、外部 AWS リソースなど、特定のリソースタイプの CDK で使用できる最低限の機能を表します。
CDK アプリでリソースをインスタンス化するとき、Bucket
などの具体的なクラスを常に使用する必要があります。独自のコンストラクトのいずれかで受け入れる引数のタイプを指定するとき、外部リソースを処理する準備ができている場合、IBucket
などのインターフェイスタイプを使用します (つまり、変更が不要)。CDK で定義されたコンストラクトが必要な場合、使用できる最も一般的なタイプを指定します。
一部のインターフェイスは、コンストラクトではなく、特定のクラスに関連付けられたプロパティまたはオプションバンドルの最小バージョンです。このようなインターフェイスは、親クラスに渡す引数を受け入れるようにサブクラス化するときに便利です。1 つ以上の追加プロパティが必要な場合、このインターフェイスまたはより具体的なタイプから実装または取得する必要があります。
注記
でサポートされている一部のプログラミング言語には、インターフェイス機能 AWS CDK がありません。これらの言語では、インターフェイスは通常のクラスにすぎません。頭文字の「I」の後に他のコンストラクトの名前 (例えば、IBucket
) が続くパターンに従う名前で特定できます。同じルールが適用されます。
依存関係の管理
AWS CDK アプリケーションまたはライブラリの依存関係は、パッケージ管理ツールを使用して管理されます。これらのツールはプログラミング言語で一般的に使用されます。
通常、 は言語の標準または公式のパッケージ管理ツールがある場合はそれ AWS CDK をサポートします。それ以外の場合、 AWS CDK は言語の最も人気のある、または広くサポートされている言語をサポートします。特にサポートされているツールに対応している場合、他のツールも使用できる場合があります。ただし、他のツールの公式サポートは限られています。
は、次のパッケージマネージャー AWS CDK をサポートしています。
言語 | サポートされているパッケージ管理ツール |
---|---|
TypeScript/JavaScript | NPM (ノードパッケージマネージャー) または Yarn |
Python | PIP (Python のパッケージインストーラ) |
Java | Maven |
C# | NuGet |
Go | Go モジュール |
cdk init
コマンドを使用して AWS CDK CLI新しいプロジェクトを作成すると、CDK コアライブラリと安定したコンストラクトの依存関係が自動的に指定されます。
サポートされているプログラミング言語の依存関係の管理における詳細については、次の内容を参照してください。
AWS CDKTypeScript と他の言語の比較
TypeScript は、 AWS CDK アプリケーションの開発でサポートされている最初の言語です。したがって、大量の CDK コード例は TypeScript に記述されています。別の言語で開発している場合は、TypeScript での AWS CDK コードの実装方法と選択した言語を比較することをお勧めします。ドキュメント全体の例を使用できるようになります。
モジュールのインポート
TypeScript は名前空間全体のインポート、あるいは名前空間から個々のオブジェクトのインポートのいずれかをサポートしています。各名前空間には、特定の AWS サービスで使用するコンストラクトやその他のクラスが含まれています。
// Import main CDK library as cdk
import * as cdk from 'aws-cdk-lib'; // ES6 import preferred in TS
const cdk = require('aws-cdk-lib'); // Node.js require() preferred in JS
// Import specific core CDK classes
import { Stack, App } from 'aws-cdk-lib';
const { Stack, App } = require('aws-cdk-lib');
// Import AWS S3 namespace as s3 into current namespace
import { aws_s3 as s3 } from 'aws-cdk-lib'; // TypeScript
const s3 = require('aws-cdk-lib/aws-s3'); // JavaScript
// Having imported cdk already as above, this is also valid
const s3 = cdk.aws_s3;
// Now use s3 to access the S3 types
const bucket = s3.Bucket(...);
// Selective import of s3.Bucket
import { Bucket } from 'aws-cdk-lib/aws-s3'; // TypeScript
const { Bucket } = require('aws-cdk-lib/aws-s3'); // JavaScript
// Now use Bucket to instantiate an S3 bucket
const bucket = Bucket(...);
TypeScript と同様に、Python は名前空間モジュールインポートおよび選択的インポートをサポートしています。Python の名前空間は aws_cdk.xxx のようになります。ここで、xxx は Amazon S33 の s3 などの AWS サービス名を表します。(Amazon S3 はこれらの例で使用されます)。
# Import main CDK library as cdk
import aws_cdk as cdk
# Selective import of specific core classes
from aws_cdk import Stack, App
# Import entire module as s3 into current namespace
import aws_cdk.aws_s3 as s3
# s3 can now be used to access classes it contains
bucket = s3.Bucket(...)
# Selective import of s3.Bucket into current namespace
from aws_cdk.s3 import Bucket
# Bucket can now be used to instantiate a bucket
bucket = Bucket(...)
コンストラクトのインスタンス化
AWS CDK コンストラクトクラスの名前は、サポートされているすべての言語で同じです。ほとんどの言語は、new
キーワードを使用してクラスをインスタンス化します (Python と Go はしません)。また、ほとんどの言語ではキーワードは this
現在のインスタンスを参照します。(Python は 規則で self
を使用します) 作成するすべてのコンストラクトに対し、scope
パラメータとして現在のインスタンスに参照を渡す必要があります。
AWS CDK コンストラクトの 3 番目の引数は です。これはprops
、コンストラクトの構築に必要な属性を含むオブジェクトです。この引数はオプションですが、必要なときはサポートされている言語が特異な方法で処理します。属性の名前は、言語の標準命名パターンにも適応されています。
// Instantiate default Bucket
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket');
// Instantiate Bucket with bucketName and versioned properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: true,
});
// Instantiate Bucket with websiteRedirect, which has its own sub-properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
websiteRedirect: {host: 'aws.amazon.com'}});
Python は、クラスをインスタンス化するときに new
キーワードを使用しません。プロパティ引数はキーワード引数を使用して表され、引数は snake_case
を使用して名前が付けられます。
props 値自体が属性のバンドルである場合、プロパティの後に名前が付けられたクラスで表され、サブプロパティのキーワード引数を受け入れます。
Python では、現在のインスタンスは最初の引数としてメソッドに渡されます。この引数は、規則によって self
という名前が付けられます。
# Instantiate default Bucket
bucket = s3.Bucket(self, "amzn-s3-demo-bucket")
# Instantiate Bucket with bucket_name and versioned properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name="amzn-s3-demo-bucket", versioned=true)
# Instantiate Bucket with website_redirect, which has its own sub-properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", website_redirect=s3.WebsiteRedirect(
host_name="aws.amazon.com"))
メンバーへのアクセス
コンストラクトやその他の AWS CDK クラスの属性やプロパティを参照し、これらの値を例えば、他のコンストラクトを構築するための入力として使用するのが一般的です。メソッドの前述の名前付けによる違いは、ここでも適用されます。さらに、Java ではメンバーに直接アクセスすることはできません。代わりに、ゲッターメソッドが用意されています。
名前は camelCase
です。
bucket.bucketArn
名前は snake_case
です。
bucket.bucket_arn
列挙型定数
列挙型定数はクラスにスコープされ、すべての言語で下線が付いた大文字の名前があります (SCREAMING_SNAKE_CASE
と呼ばれることもあります)。クラス名は Go を除くサポートされているすべての言語でも同じケーシングを使用するため、修飾された列挙型名はこれらの言語でも同じです。
s3.BucketEncryption.KMS_MANAGED
Go では、列挙型定数はモジュール名前空間の属性であり、次のように記述されます。
awss3.BucketEncryption_KMS_MANAGED
オブジェクトインターフェイス
AWS CDK は TypeScript オブジェクトインターフェイスを使用して、クラスが予想されるメソッドとプロパティのセットを実装していることを示します。オブジェクトインターフェイスの名前の頭文字が I
であるため、識別できます。具体的なクラスは、implements
キーワードを使用して実装するインターフェイスを示します。
注記
JavaScript にはインターフェイス機能はありません。implements
キーワードおよびその後に続くクラス名を無視してください。
import { IAspect, IConstruct } from 'aws-cdk-lib';
class MyAspect implements IAspect {
public visit(node: IConstruct) {
console.log('Visited', node.node.path);
}
}
Python にはインターフェイス機能はありません。ただし、 AWS CDK では、 クラスを でデコレートすることで、インターフェイスの実装を指定できます@jsii.implements(interface)
。
from aws_cdk import IAspect, IConstruct
import jsii
@jsii.implements(IAspect)
class MyAspect():
def visit(self, node: IConstruct) -> None:
print("Visited", node.node.path)