プロジェクト構造

IDEを開く

お気に入りのIDEでプロジェクトを開いてみましょう。

VSCodeを使用する場合は、 code . コマンドをプロジェクトディレクトリ内で実行すれば簡単に開けます。

プロジェクトディレクトリを確認する

以下のようなものが表示されます。

  • README.md —このプロジェクトのREADME。
  • app.py —このサンプルアプリケーションの「メイン」。
  • cdk.json — CDKコンストラクトツリーを生成するために実行可能なCDKを実行する必要があるCDKの構成ファイル。
  • hello — Pythonモジュールディレクトリ。
    • hello_construct.py — CDKアプリケーションで使用するために定義されたカスタムCDKコンストラクト。
    • hello_stack.py - CDKアプリケーションで使用するカスタムCDKスタック構成。
  • requirements.txt — このファイルは、アプリケーションのすべての依存関係をインストールするためにpipによって使用されます。今回の場合、-eのみが含まれます。これは、setup.pyで指定された要件をインストールするようにpipに指示します。また、pipにpython setup.py developerを実行して、helloモジュールにコードをインストールし、その場で編集できるように指示します。
  • setup.py — このPythonパッケージの構築方法と依存関係を定義します。
  • tests — すべてのテストが含まれます。
    • unit — 単体テストが含まれています。
    • test_hello_construct.py - helloパッケージで作成されたカスタムCDKコンストラクトの簡単なテスト。これは主に、テストをプロジェクトに接続する方法を示すためのものです。

アプリのエントリポイント

app.pyを簡単に見てみましょう:

#!/usr/bin/env python3

from aws_cdk import core

from hello.hello_stack import MyStack


app = core.App()
MyStack(app, "hello-cdk-1", env={'region': 'us-east-2'})
MyStack(app, "hello-cdk-2", env={'region': 'us-west-2'})

app.synth()

このコードは、hello/hello_stack.pyファイルを開き、 MyStack クラス を初期化してロードするものです。一度読んだら、もうこのファイルを見る必要はありません。

メインスタック

hello/hello_stack.pyを開いてみましょう。これがアプリケーションの要です。

from aws_cdk import (
    aws_iam as iam,
    aws_sqs as sqs,
    aws_sns as sns,
    aws_sns_subscriptions as subs,
    core
)

from hello_construct import HelloConstruct


class MyStack(core.Stack):

    def __init__(self, app: core.App, id: str, **kwargs) -> None:
        super().__init__(app, id, **kwargs)

        queue = sqs.Queue(
            self, "MyFirstQueue",
            visibility_timeout=core.Duration.seconds(300),
        )

        topic = sns.Topic(
            self, "MyFirstTopic",
            display_name="My First Topic"
        )

        topic.add_subscription(subs.SqsSubscription(queue))

        hello = HelloConstruct(self, "MyHelloConstruct", num_buckets=4)
        user = iam.User(self, "MyUser")
        hello.grant_read(user)

ご覧のとおり、アプリはサンプルCDKスタック(HelloStack)です.

The stacks includes:

  • SQS キュー (new sqs.Queue)
  • SNS トピック (new sns.Topic)
  • キューをサブスクライブして、トピックに発行されたメッセージを受信します (topic.addSubscription)
  • HelloConstructは、アプリで定義されたカスタムコンストラクトです。スタックに可変数のS3バケットを作成します。