Identifiers(識別子)
識別子は、作成されたスコープ内で一意である必要があります。
使用される識別子の種類について理解しておきます。
CloudFormation を利用したことのある方であれば、さらっと読んでおく程度で良いかと思います。
Construct IDs(コンストラクト ID) のみ理解しておれば良さそうである。
Construct IDs(コンストラクト ID)
コンストラクトをインスタンス化するときに 2 番目の引数として渡されます。
以下の例では、アプリに MyBucket
という識別子を持つ 2 つのコンストラクトがある例です。
1 つ目は、識別子 Stack1
を持つスタックのスコープで定義されています。
2 つ目は、識別子 Stack2
を持つスタックのスコープで定義されています。
これらは異なるスコープで定義されているため、競合は発生せず、同じアプリ内で問題なく共存できます。
from aws_cdk import App, Construct, Stack, StackProps
from constructs import Construct
from aws_cdk import aws_s3 as s3
class MyStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "MyBucket")
app = App()
MyStack(app, 'Stack1')
MyStack(app, 'Stack2')
Paths(パス)
CDK アプリケーションのコンストラクトは、App クラスをルートとする階層を形成します。この階層がパスです。
たとえば、前のコード例の 2 つの S3 バケットのリソースのパスは、
Stack1/MyBucket と
Stack2/MyBucket です。
Unique IDs(一意の ID)
CDK では、CloudFormation テンプレート内のすべての識別子が一意である必要がある。
Logical IDs(論理 ID)
CloudFormation テンプレートで、AWS リソースを表すコンストラクトのリソースの論理識別子として機能します。
前の例で作成された VPC は、CloudFormation テンプレートで、論理 ID が MyVpcF9F0CA6F である AWS::EC2::VPC リソースになります。