/ #aws #cdk 

AWS CDK(python)のサンプルアプリから不要な要素を削除してまっさらスタックを作る

もくじ

AWS CDKでかつPythonを使ったドキュメントって結構すくないかなー?

と個人的に感じたので、自分が作ったリソースを部分的に晒していければーと思いますがー、、

そのためにはまっさらなテンプレートが必要なので、つくっていきたいと思います。

何がしたいの?

今後さっくりCDKの動作を確認したので、何も入ってないクリアなテンプレートを作成する

前提

前回の記事のサンプルアプリから不要な要素を削っていきます(笑)

⚠ 削除しかたや、ファイルの不要/必要の判断は各々異なると思いますで、ここに書くにはあくまでも私の判断です

では 作っていきましょう👻(削っていきましょう❓)

隠しファイルを非表示でサンプルアプリのファイルを一覧を確認します

.
├── README.md
├── app.py
├── cdk.json
├── cdk.out
│   └── 略...
├── cdk_my_template
│   ├── __init__.py
│   └── cdk_my_template_stack.py
├── requirements.txt
├── setup.py
├── source.bat
└── tests
    ├── __init__.py
    └── unit
        ├── __init__.py
        └── test_cdk_my_template_stack.py

testsディレクトリを削除

テストディレクトリを削除します。

このサンプルアプリのテストですが、CloudFormationのテンプレートを取得して、そこに自分が作りたいリソースは追加されてるよね?

ってことを確認するコードのようですが、個人的には「私達がテストしたいテストはそれじゃない」感がかなり強いので削除します。

ノシ

$ rm -rf tests

README.md削除

デフォルトのREADMEには色々説明が書いてあってありがたいです。

が、「不要な要素をクリアする」という目的の前だったら削除です。

$ rm README.md

必要なモジュールをrequirements.txtに集める

requirements.txtを開くと、たった一言こんなことが書いてあります。

-e .
pytest

ちなみにこれ、私の理解の範囲を超えて挙動が分からず調べました😅

pipのリファレンスを読み返してみるとsetuptoolsでインストールをするオプションとのこと。

はいはいーsetuptools、、、ファイルだとsetup.pyが対応してますね。

次はこっちのドキュメントを読んでいく感じです。

ぱっと読んだ感じメタ情報追加したり 依存関係を列挙してインストールしてくれる感じですね

ということでsetup.pyの依存関係(install_requires)をコピーしてきてrequirements.txtに貼っ付ける感じですね。

aws-cdk.core==1.72.0
aws-cdk.aws_iam==1.72.0
aws-cdk.aws_sqs==1.72.0
aws-cdk.aws_sns==1.72.0
aws-cdk.aws_sns_subscriptions==1.72.0
aws-cdk.aws_s3==1.72.0

こんな(↑)感じですね。

pytestも削除してます。さっきtestsディレクトリ削除したので(笑)

で、ここでsetup.pyも不要にあったのでノシです。

$ rm setup.py

後、まっさらなテンプレート(AWSのリソース無しのテンプレート)をいったん作りたいので、aws-cdk.core以外不要なので削除です

aws-cdk.core==1.72.0

となると、最終的にrequirements.txtはこんな(↑)感じ

source.batを削除する

このファイルを開いて、コメントを読むとWindowsで仮想環境を使うのに使うっぽいですが、

Mac or Linux 以外で動かす予定がないので削除します

※ Windowsで動かすにしろ、Windowsの中にLinux入れてそこで動かします(笑)

$ rm source.bat

aws cliで設定してるリージョンにデプロイされる用にエントリーポイントを修正する

詳細はこのあたり(↓)

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_core.Stack.html#env

デフォルトだとオレゴンにデプロイするので、それをaws cliで設定している設定の場所にデプロイするように変更します。

※ 個人的にはこの設定はやらなくても良い気がします。テストで遊ぶ的な環境なので値段の安いバージニアあたりにデプロイするのが個人的には良いかと。

import os

from aws_cdk import core

from cdk_my_template.cdk_my_template_stack import CdkMyTemplateStack

app = core.App()
env = core.Environment(
    account=os.getenv("CDK_DEFAULT_ACCOUNT"), region=os.getenv("CDK_DEFAULT_REGION")
)
CdkMyTemplateStack(app, "cdk-my-template", env=env)

app.synth()

とりあえず一旦こんな(↑)感じで。

テンプレート名とかディレクトリ名とかが好みでないので変える

完全に好みの話(笑)

# スタックを保存してるディレクトリ名を変更
$ mv cdk_my_template stacks

# Stack定義のファイル名を変更
$ mv stacks/cdk_my_template_stack.py stacks/clear_stack.py

stackのファイルのパスを引き直す&無駄なリソースを削除

from aws_cdk import core


class ClearStack(core.Stack):
    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

エントリーポイントのパスを変える

import os

from aws_cdk import core

from stacks.clear_stack import ClearStack

app = core.App()
env = core.Environment(
    account=os.getenv("CDK_DEFAULT_ACCOUNT"), region=os.getenv("CDK_DEFAULT_REGION")
)
ClearStack(app, "clear-stack", env=env)

app.synth()

.gitを初期化

そのまま.git使おうかなと思ったのですが、よく考えると$ mvとかで普通に動かしちゃったので面倒になったのです初期化します(笑)

$ rm -rf .git
$ git init

完了したのでデプロイしてみる

デプロイするとこんな感じです

※ 「エラーがでるかな?」と思ってたらそのままデプロイできてしまった😅

コンソールで確認

空っぽなテンプレートがデプロイされていることを、確認できました👍

まとめ

たたき台で使う空のStackをCDKを使ってAWSにデプロイしました。

想像より長文になりまいしたが、全然大したことをしていないという😅

今回のリポジトリはこちら

https://github.com/sisi100/cdk-my-template/tree/20201107.0

最終的にリポジトリに入ったファイルは下記の6個です(笑)

.
├── .gitignore
├── app.py
├── requirements.txt
└── stacks
    ├── __init__.py
    └── clear_stack.py

以上、おつかれさまでした👻

Author

Sisii

AWSが好きなフリーランスのエンジニア。主にAWSを使ったバックエンドの開発をしています😊最近Frontも始めました