AWSIaCPython

AWS CDKでphase単位でスタックを構築する方法

AWS

AWS CDKを使ってAWSのリソース構築などを行っている際に、1つのCDKコードでPhaseに応じて複数のスタックを作成したい場合があります。

CloudFormationではParameterなどを利用していましたが、AWS CDKでのよやり方を調べた際のことをメモします。

1. 前提

  • Pythonはインストール済
  • AWS CDKはインストール済
  • PythonでCDKプロジェクト作成済(例としてプロジェクト名はcdk-project)

2. Contextの利用

調べて見たところ、cdk deployコマンドを実行する際に「-c」オプションをつけることで引数として利用できる様です。
以下のような感じです。

cdk deploy -c "phase=prod"

3. app.pyで値を受け取る

コンテキストで渡された値を受け取ります。
まずは、app.py内でスタックを構築しているので以下のようにして受け取って利用します。

「app.node.try_get_context」で値を取得できます。
今回はデフォルトを[dev]とし、スタックの先頭にphaseをつけるようにしました。

from aws_cdk import core
from aws_cdk_getamzndata.aws_cdk_getamzndata_stack import AwsCdkGetamzndataStack
app = core.App()

phase = "dev"  # default value
if app.node.try_get_context("phase"):
    phase = str(app.node.try_get_context("phase"))

CdkProjectStack(app, phase+"-cdk-project",)

4. リソース定義コード(cdk_project_stack.py)で値を受け取る

あとは、実際にリソースを構築している「cdk_project_stack.py」で値を使ってphaseごとのリソースを作成します。

先ほどと同様にコンテキストから値を受け取って、各リソースの先頭にphaseを付けています。
例としてDynamoDBを作成しています。

class CdkProjectStack(cdk.Stack):

    def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
        super().__init__(scope, construct_id, **kwargs)

        phase = "dev"  # default value
        if self.node.try_get_context("phase"):
            phase = str(self.node.try_get_context("phase"))

        # dynamodb
        dynamo_table = ddb.Table(
            self, phase+'-cdk-project-table',
            partition_key={'name': 'user_id',
                           'type': ddb.AttributeType.STRING},
            sort_key={'name': 'sample_id',
                      'type': ddb.AttributeType.STRING},
        )

5. まとめ

AWS CDKでPhaseに応じたスタックを複数作成することができました。
もっといい方法がありそうなので引き続き調べて見たいと思います。

AWSを効率的に学習する方法

私が効率的にAWSを学習するために実施した方法は以下の通りです。
 ①最初に書籍(ハンズオンができる)を購入、座学でAWSの基礎を学習
 ②AWS資格試験を取得ための学習

※私の場合は①と②を合わせて2か月でソリューションアーキテクトを取得できました。

①AWS基礎学習

最初に購入した書籍は「Amazon Web Services 基礎からのネットワーク&サーバー構築」です。

Amazon Web Services 基礎からのネットワーク&サーバー構築

この本では、AWSの基本サービスを利用したハンズオンを通じて、AWSの基礎を学習することができます。

また、タイトル通りAWSのネットワークやインフラに関しても網羅しているため、もともとインフラ系の技術者ではない人たちにとっても分かりやすい内容だと思います。

とりあえずAWS上にサーバーを設定して開発を行うための準備までするには最良の一冊です。

Amazon Web Services 基礎からのネットワーク&サーバー構築

②AWS資格取得

AWSの基礎をある程度学習することができたら、次はAWS資格を取得しましょう。まずはAWSソリューションアーキテクトを目指しましょう。

資格勉強のための問題集をひたすら解きながら、AWSの知識を積み重ねて習得していきましょう!

苦行ではありますがこの問題集を3周ほどすればAWS用語や構成に関しても習得できているはずです。

AWS認定ソリューションアーキテクト-アソシエイト問題集

今回は以上となります。

コメント