はじめに
AWS CDK のエントリーポイントを見ると、以下の様に実行するスタック名がハードコーディングされている。
app.py
app = core.App()
CdkPythonStack(app, "CdkPythonStack")
しかし、例えば「開発環境」と「本番環境」同一のテンプレートを使って複数のスタックを構築したい場合もあると思う。 そのような場合にスタック名を動的に指定して環境構築をしたい。
解決策
同様の質問が StackOverflow で見つかった。
こちらでは、システムの環境変数を使って実行時に引き渡す方法を採っている。
もうちょっといい方法はないかと思って cdk
コマンドを探したり、app.py
に argparse
を追加してみたが、調べた限りではコマンドラインの値をそのまま app.py
に引き渡す方法は見当たらなかった。 そのため、上記質問の回答に倣って環境変数を使う方法で対処する。
app.py
import os
STACK_NAME = os.environ.get('STACK_NAME') or 'CDKPythonStack'
app = cdk.App()
CdkPythonStack(app, 'CDKPythonStack', stack_name=STACK_NAME)
Python で書くとスタック生成時のパラメータとして stack_name
を渡せばよい。 ここでは単に環境変数を使っているが、さらに踏み込んで環境変数をベースにメタファイルを読み込んで名前を決定してもよい。
# スタック名指定
$ export STACK_NAME=CustomNameStack && pipenv run cdk deploy
# スタック名未指定 (デフォルトを利用)
$ export STACK_NAME= && pipenv run cdk deploy
これら2つを実行することで、別名のスタックを作成できた。