/ #AWS #CDK 

AWS CDK(Python)でサンプルアプリをデプロイしてみる

もくじ

AWSのリソースを管理する方法はterraformとかCloudFormationとか色々あります。

そんな中で、わたくしごとですがAWS CDKにハマっているので、

使ったことがない方向けに「CDKだとこんな感じにデプロイできますよー」ということを書こうと思います。

何がしたいの?

ゼロから aws cdk でサンプルアプリをデプロイします。

ちょっと言葉たらずで、コマンド優先で記事を書きますが、もし不明点とか質問があればTwitterとかで質問していただければ幸いですー

前提

  • npmコマンドが叩ける
  • python3が動く
  • aws-cliが使える環境

では 作っていきましょう👻

CDK の導入

$ npm install -g aws-cdk

動作確認

$ cdk --version
1.72.0 (build c2f38e8)

上記のようにversion番号が表示されれば大丈夫です。

ただし下記のように表示されたら、ちがうcdkが入ってます。

$ cdk --version
cdk

これは同名のpythonのライブラリーが入っちゃっているので$ pip uninstall cdkで削除してからターミナルを再起動してください👍

新規アプリを作る

開発用にディレクトを作成します

$ mkdir cdk-my-template
$ cd cdk-my-template

サンプルアプリを作成します

$ cdk init sample-app --language python

そうするとこんな感じにファイルが作られます

.
├── .git
│   └── 略...
├── .gitignore
├── .venv
│   └── 略...
├── README.md
├── app.py # <== アプリのエントリーポイント
├── cdk.json
├── 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

.gitも.venvも用意されているというありがたさですね。

ということで早速.venvの仮想環境を使います。

$ source .venv/bin/activate
$ pip install -r requirements.txt

これでほぼサンプルアプリが完成してます(笑)

サンプルアプリでデプロイされる内容を確認する

デプロイされるされる内容は下記のファイルの中にあります。

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


class CdkMyTemplateStack(core.Stack):

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

        queue = sqs.Queue( # <== SQSのキューを作成する
            self, "CdkMyTemplateQueue", # <== CloudFormationで使われる名前
            visibility_timeout=core.Duration.seconds(300), # <== 可視性タイムアウト300秒
        )

        topic = sns.Topic( # <== SNSのトピックを作成する
            self, "CdkMyTemplateTopic" # <== CloudFormationで使われる名前
        )

        topic.add_subscription(subs.SqsSubscription(queue)) # <== 作ったトピックのサブスクライバーとしてキューを追加

作成するという表現正しくないかもですね🤔

まぁ、新規でデプロイするときには作成されます。2回め以降なら更新されます。

デプロイしてみましょう

まずブートストラップスタックをデプロイします。

公式によると、これはAWSのリージョン毎に初めてcdkを使うときに作らないとだめなツールセットとのころです。

$ cdk bootstrap

からのデプロイ

$ cdk deploy

こんな(↓)確認がでるのでyでデプロイします👍

ちなみにオレゴン(us-west-2)にデプロイされます(笑)

ということで、コンソールにログインして確認してみましょう😊

たぶん、このあたり(↓)のURLからデプロイされたトピックを選択し、、、

https://us-west-2.console.aws.amazon.com/sns/v3/home?region=us-west-2#/topics

こんな感じでメッセージを作って、メッセージを送信します。

たぶん下記のURLらへんにデプロイされたキューをクリックして、キューに溜まったアイテムを確認します。

https://us-west-2.console.aws.amazon.com/sqs/v2/home?region=us-west-2#/queues

右上の「メッセージ送受信」から「メッセージをポーリング」をクリックしてー、、

ポーリングされたメッセージをクリックすると、こんな感じ

はい、SNSに送ったメッセージがきちんと取得されましたね👍

削除

$ cdk destroy

以上(笑)

まとめ

今回はAWS CDKを使ってAWSのリソース管理を体験するために、

Pythonを使ってゼロからサンプルのリソースをデプロイしました。

そしてデプロイしたリソースを、AWSのコンソール上から使ってみました。

個人的にはかなり直感的にリソースをいじれるので、その便利さが伝われば幸いかなーと思います😊

以上、ししぃでしたーノシ

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

。。。

流石にこれをリポジトリにそのまま上げるのは意味ないですね😅

サンプルを何一つもいじってないので(笑)

リポジトリなしでーす👍

Author

Sisii

インフラが好きなエンジニアぶってるなにか