既存のCloudFormationテンプレートファイルをAWS CDKに移行してみた

2020.11.18

どーもsutoです。

過去にCloudFormationで作成したテンプレートファイルをAWS CDKのプロジェクトとして管理するための移行方法についてご紹介します。とは言っても、コードを書き直すのではなく、CDKコマンドでスタック作成するようにテンプレートファイルをCDKプロジェクトの管理下に置くための手順です。

前提条件

  • ローカルPCにDCK CLIがインストールされている(未実施の方は以下のリンクを参考)

  • 検証環境
    • OS:Mac
    • 使用言語:Python3.7.3
    • CDK CLI:1.74.0
  • 事前準備として、「migration」というプロジェクト名でCDK環境を作っておきます

mkdir migration && cd migration
cdk init migration --language python
source .venv/bin/activate

実際にやってみた

手順1:cloudformation-includeモジュールのインストール

  • setup.pyのcloudformation-includeモジュールをインストールするように以下を部分を編集します。
    install_requires=[
        "aws-cdk.core==1.74.0",
        "aws_cdk.cloudformation_include",
    ],
  • setup.pyを保存したらモジュールのインストールを行います。
pip install -r requirements.txt

手順2:コードを記述

  • ここから「migration」フォルダ内のmigration_stack.pyに以下のように追記して保存します。
from aws_cdk import core
from aws_cdk import cloudformation_include as cfn_inc

class MigrationStack(core.Stack):

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

    # The code that defines your stack goes here
    cfnInclude = cfn_inc.CfnInclude(
        self,
        id="Template",
        template_file="migration-bk.yaml",
    )
  • 上記の migration-bk.yaml は今回使用する既存テンプレートとなります。
    • こちらのファイルはプロジェクト名である「migration」フォルダ直下(cdk.jsonと同じ場所)に保存してください。

  • ちなみに migration-bk.yaml の内容は以下の記事で作成したBackup設定用のテンプレートです。

手順3:デプロイと確認

  • ではデプロイを実行して実際にスタックが作成されるか見てみましょう。
(.venv) ~ migration % cdk deploy migration

無事スタックCOMPLETEしました。

まとめ

既存にあるJSONやYAMLのテンプレートファイルをCDKプロジェクト内に組み入れて管理したいときに、わざわざコードを書き直すのは手間だし生産性も良くないので、手っ取り早くcloudformation-includeモジュールを使ってしまうのも1つの手ですね。

参考