0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【欲張り】Pythonの学習もしたいしIaCも学びたい with AWS CDK Python

Posted at

はじめに

こんにちは
私事ですが、エンジニアという名を受けて働き始めてから、はや2年弱となってしまいました...。
今まではPL/Iというアセンブラ言語での開発を少しと、モバイルアプリのテスターとしての役割を担って活動していますが、コーディングに関する知識を持たぬまま、目標となるSAや設計といった役割をこのまま担うのには、今後のキャリアやエンジニアのステップとしては不健全なのではと考えました。(個人の感想です)

そのため、本記事で取り組むCDKのようなIaCや、今後取り組む可能性のある機械学習のようなトレンドで活躍するプログラミング言語であるPythonの学習を開始しています。

紀伊國屋で下記のPython本を購入し、ウキウキで学習を始めたのはいいのですが、型の取り扱いのような基礎的な部分であくびが出始め、学習の継続に不安を感じる結果となっています..。
(変数への代入やprintを用いた出力ハンズオンも大事なのは重々承知してはいますが、コードに関する知識は少しだけあったので、やや退屈になってしまいました)

今まで培ってきたAWSに関する知識を活かせるとともに、プログラミングの基礎を理解したうえでのプラクティスは無いかと考えたところ、AWS CDKに出会いました。

AWS CDKについて

AWS CDKとは簡単に言うと、「コードでインフラを定義し、構築できる」ツールを指します。
CDKのもとでコードを実行するとCloudFormationを作成し、テンプレートをもとにしたAWSリソースを作成することができるようです。

下記はCDKの仕組みを表しており、画像下に添付しているリンク(AWS BlackBeltより)より引用しております。リンク先のスライドではCDKの仕組みや、CDKが作られることになった経緯、CDKの具体的なコンセプト説明もあるため、CDKに対して持っているイメージが曖昧な方はぜひ読んでいただきたいです。

image.png
(画像抜粋:https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AWS-CDK-Basic-1-Overview_0731_v1.pdf)

実際に始めてみる

つべこべ言わずに始めます。
今回の目的は、「CDKによるリソースの生成を確認する」ことで、Python構文の基礎を身に着けつつ、AWSアカウントとの疎通確認を実施していきます。

リソースとしてはVPCのみを作成する予定で、マルチAZ等のベストプラクティスは本テーマのスコープ外としております。

0.必要なもの

必要なものは以下の3点です。

  1. お好みのIDE(私はVSCodeを使います)
  2. Python、AWSCLIのインストール(pipも必要です)
  3. アクセスキー、シークレットアクセスキーを発行したIAMユーザー

1.プロジェクトを作成する

コードを記述するプロジェクトを作成します。
空っぽのディレクトリのもとでcdk initを呼び出すことで、AWS CDKプロジェクトを作成できます。

今回はPythonを使用するため、--languageオプションでpythonを指定して実行します。

cdk init --language python

コマンドの実行に成功すると、CDKの実行に必要なテンプレートが生成されます。
(画像左にあるファイルは全て自動生成されたものです)

image.png

スタックのリソース定義など、CDKの根幹となるファイルは[~stack.py]という名前です。
コメントでAmazon SQSのリソース定義の例文が書かれており、とても参考になります。

image.png

2.~stack.pyにリソースを定義する

initコマンドが正常実行した後は、~stack.pyにリソースを定義します。
AWSドキュメントのチュートリアルやCDKライブラリ等を参考にし、構文エラーを修正した結果、下記のような記述になりました。
1つのVPC、1つのAZに、パブリックとプライベートのサブネットが作成される想定です。

vpc = ec2.Vpc(
            self,
            "MyVpc",
            max_azs=1,
            nat_gateways=0,
            subnet_configuration=[
                ec2.subnetConfiguration(
                    name = "Test_Public_Instance",
                    subnet_type=ec2.SubnetType.PUBLIC,
                    cidr_mask=24,
                ),
                ec2.subnetConfiguration(
                    name="Test_Private_Instance",
                    subnet_type=ec2.SubnetType.PRIVATE_WITH_EGRESS,
                    cidr_mask=24,
                )

            ],

        )

明示的に否定をしない限り、NATゲートウェイが設けられるそうです。
NATゲートウェイはデータ処理だけでなく、時間経過で料金がかかる金食い虫なので取っ払いましょう。
image.png
AWS CDKのドキュメントでNATゲートウェイに関する文字列が見つけられなかったのですが、[na]まで打てたら予測変換なるもので変数が選択できたのでありがたいです。
image.png

3.CloudFormationのスタックを作成する

リソースの定義を終えたら、スタック作成の準備をするため、synthコマンドを実行します。

cdk synth

エラー警告文がなかったり、下記のように長いログが流れ始めたら成功だと思います。

Wabis@Wabisabi_PC_V1 MINGW64 ~/LearningPython_withAWS (master)
$ cdk synth
Resources:
  MyVpcF9F0CA6F:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      InstanceTenancy: default
      Tags:
        - Key: Name
          Value: LearningPythonWithAwsStack/MyVpc
          
(いろいろなログ)

If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For example, "cdk acknowledge 34892".
(.venv)

cdk synthにおいて、構文不正のエラー失敗した場合、解決策はログに記載されていたので問題ないと思われます。(不正の行と文字列に対してDid you mean ~?と出てくる)
一方で、仮想環境にモジュールをインストールしていないことによるエラーが出ました。

Wabis@Wabisabi_PC_V1 MINGW64 ~/LearningPython_withAWS (master)
$ cdk synth
Traceback (most recent call last):
  File "C:\Users\Wabis\LearningPython_withAWS\app.py", line 4, in <module>
    import aws_cdk as cdk
ModuleNotFoundError: No module named 'aws_cdk'
NOTICES         (What's this? https://github.com/aws/aws-cdk/wiki/CLI-Notices)
34892   CDK CLI will collect telemetry data on command usage starting at version 2.1100.0 (unless opted out)
        Overview: We do not collect customer content and we anonymize the
                  telemetry we do collect. See the attached issue for more
                  information on what data is collected, why, and how to
                  opt-out. Telemetry will NOT be collected for any CDK CLI
                  version prior to version 2.1100.0 - regardless of
                  opt-in/out. You can also preview the telemetry we will start
                  collecting by logging it to a local file, by adding
                  --unstable=telemetry --telemetry-file=my/local/file to any
                  cdk command.
        Affected versions: cli: ^2.0.0
        More information at: https://github.com/aws/aws-cdk/issues/34892
If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For example, "cdk acknowledge 34892".
python app.py: Subprocess exited with error 1
(.venv)

対処法としては、依存パッケージのインストールをする必要があります。
cdk initを正常に実行できていれば、[requirements.txt]は自動で生成されているはずです。

pip install -r requirements.txt

その後、再度synthコマンドを実行すれば正常に完了できると思われます。
(それか構文エラーが発生する)

cdk synth

4.準備が整ったのでdeployする

cdk synthが無事完了したら、デプロイが可能になります。

cdk deploy

デプロイに成功する場合、作成されるCloudFormationスタックがログに流れてきて、見るからに成功という記述が流れ、実行を終了します。
image.png
スクリーンショット 2025-12-07 131317.png

実際にマネジメントコンソール上から確認してみると、CloudFormationスタックやVPCが作成されていることを確認できます。

image.png
image.png

5.後片付け

CDKとAWSアカウントとの疎通確認が取れたため、一旦テンプレートによって生成されたリソースを削除します。
(リソースが存在している場合に、cdkを更新後デプロイするとどのような挙動を取るかは次の学習で確認します)

cdk destroy

上記のコマンドを実行後、再度見るからに成功の文言が確認でき、マネジメントコンソール上でもCloudFormationからスタックが削除されていることが確認できます。

image.png
image.png

image.png

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?