mei_13のPython講座 ロゴ

【解説】Pythonでインフラを管理する:CDK for Terraform(CDKTF)入門




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

Pythonでインフラを管理する:CDK for Terraform(CDKTF)入門


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは。最近「IaC(Infrastructure as Code)」という言葉をよく耳にするようになったのですが、その中でも「Terraform」をPythonで扱える仕組みがあるって本当ですか?


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。……はい、本当ですよ。一般的にTerraformは「HCL」という独自の言語を使いますが、Pythonなどのプログラミング言語を使ってインフラを構成できる「CDK for Terraform(CDKTF)」というツールがあるんです。


Hirokiのアイコン
【Hiroki】 へぇ、Pythonでインフラが作れるんですね!でも、そもそもTerraformがどういうものなのか、あまり詳しくなくて……。


Yukiのアイコン
【Yuki】 そうですよね、まずはそこからお話ししたほうがいいかもしれません。Terraformは、クラウド上のサーバーやネットワークなどの設定を「コード」として記述して、自動で作成・管理するためのツールなんです。わたしも、誰かの役に立つために開発された小さなツールのお話を聞くと、なんだか少しだけ、自分も誰かの体の一部になれたような気がして……好きなんです。このTerraformも、エンジニアの皆さんの負担を減らすために生まれた、とても優しいツールだと思います。


Hirokiのアイコン
【Hiroki】 なるほど、「誰かのために」という視点は素敵ですね。Pythonで扱えるようになると、どんなメリットがあるんでしょうか?


Yukiのアイコン
【Yuki】 はい。通常のTerraform(HCL)も素晴らしいのですが、Pythonを使うことで、普段使い慣れているループ(for文)や条件分岐(if文)がそのまま使えたり、エディタの強力な補完機能の恩恵を受けられたりするんです。これから、具体的な仕組みについて、わたしと一緒に見ていきましょう。

そもそもTerraformとは何でしょうか?


Yukiのアイコン
【Yuki】 Terraformは、HashiCorp社が提供しているオープンソースのインフラ構成管理ツールです。AWS(Amazon Web Services)やGoogle Cloud、Azureといったクラウドサービスの操作を、ブラウザの管理画面をポチポチ操作するのではなく、宣言的な設定ファイルで行うことができます。


Hirokiのアイコン
【Hiroki】 「宣言的」……ですか?


Yukiのアイコン
【Yuki】 ええ。例えば「サーバーを1台作って、次にOSをインストールして……」という手順を書くのではなく、「最終的にこのスペックのサーバーが1台ある状態にしてください」という「完成図」を記述するスタイルなんです。Terraformが現在の状況と完成図を比較して、足りない部分だけを自動で補ってくれるんですよ……便利だと思いませんか?


Hirokiのアイコン
【Hiroki】 手順を指示するんじゃなくて、ゴールを教えるだけなんですね。それなら間違いも少なそうです。


Yukiのアイコン
【Yuki】 そうですね。ただ、標準の言語であるHCLは、プログラミング言語というよりは「設定ファイル」に近い性質を持っています。そのため、複雑なロジックを組もうとすると少し工夫が必要になることもあるんです。


Hirokiのアイコン
【Hiroki】 そこでPythonの出番、というわけですね!

なぜPythonでTerraformを使う必要があるのでしょうか?


Yukiのアイコン
【Yuki】 はい。PythonでTerraformを扱うための仕組みが、先ほどお話ししたCDK for Terraform(CDKTF)です。これを使うメリットは、大きく分けて3つあると思います。


Yukiのアイコン
【Yuki】 1つ目は、「慣れ親しんだ言語が使えること」です。HirokiくんのようにPythonを学んでいる方なら、新しい言語を覚え直さなくても、いつもの書き方でインフラを定義できます。


Yukiのアイコン
【Yuki】 2つ目は、「強力な抽象化」です。共通の設定をクラス(Class)として定義して再利用したり、他のPythonライブラリと組み合わせて、例えば「外部のAPIから値を取得して、それを元にインフラを作る」といった高度なことも比較的簡単にできます。


Yukiのアイコン
【Yuki】 3つ目は、「テストのしやすさ」かもしれません。Pythonには豊富なテストフレームワークがありますから、作成したインフラの定義が正しいかどうかを、コードとしてテストすることが可能なんです。


Hirokiのアイコン
【Hiroki】 インフラの構成もPythonのプログラムの一部として扱えるようになる、というイメージですね。

CDKTF(CDK for Terraform)の仕組み


Yukiのアイコン
【Yuki】 仕組みについても少しだけ触れておきますね。CDKTFは、内部的に「jsii」という技術を使っています。これによって、Pythonで書かれたコードが最終的にTerraformが理解できるJSON形式の設定ファイルに変換(シンセサイズ)される仕組みになっているんです。


Hirokiのアイコン
【Hiroki】 中身は結局Terraformが動いているんですね。


Yukiのアイコン
【Yuki】 はい、その通りです。Terraformの「プロバイダー」というエコシステムをそのまま利用できるので、AWSだけでなく、GitHubの設定やDatadogの監視設定など、数多くのサービスを操作できるんですよ。

開発環境を整えてみましょう


Yukiのアイコン
【Yuki】 実際に動かしてみるのが一番分かりやすいと思うので、準備の手順を説明しますね。少し手順が多いですが、ゆっくり進めていきましょう。


Yukiのアイコン
【Yuki】 まず、必要なものは以下の通りです。 1. Node.js(CDKTF自体がNode.jsで動いているためです。16.x以上が必要です) 2. Python 3.7以上 3. Terraform CLI(本体ですね) 4. cdktf-cli(CDKTFを操作するためのツールです)


Hirokiのアイコン
【Hiroki】 Node.jsも必要なんですね。ちょっと意外です。


Yukiのアイコン
【Yuki】 そうなんです、ちょっと複雑ですよね……。まずは、cdktf-cliをインストールするところから始めます。ターミナルで以下のコマンドを実行してみてください。

npm install --global cdktf-cli@latest


Yukiのアイコン
【Yuki】 次に、作業用のディレクトリを作って、Pythonプロジェクトとして初期化します。

mkdir my-terraform-project
cd my-terraform-project
cdktf init --template=python --local


Hirokiのアイコン
【Hiroki】 cdktf initを実行したら、たくさんファイルが出てきました!


Yukiのアイコン
【Yuki】 はい、プロジェクトの雛形が作成されました。特に大事なのは main.py というファイルです。ここに、Pythonでインフラの定義を書いていくことになります。

実際にPythonでコードを書いてみる


Yukiのアイコン
【Yuki】 では、例としてAWSに「S3バケット」という、ファイルを保存するための場所を作ってみましょう。まずはAWS用のライブラリをインストールする必要がありますね。

cdktf provider add aws


Yukiのアイコン
【Yuki】 これを実行すると、AWSを操作するためのPythonクラスが生成されます。準備ができたら、main.pyを以下のように書き換えてみてください。

#!/usr/bin/env python
from constructs import Construct
from cdktf import App, TerraformStack
from cdktf_cdktf_provider_aws.provider import AwsProvider
from cdktf_cdktf_provider_aws.s3_bucket import S3Bucket

class MyStack(TerraformStack):
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, id)

        # AWSプロバイダーの設定(リージョンを東京に指定)
        AwsProvider(self, "AWS", region="ap-northeast-1")

        # S3バケットの定義
        S3Bucket(
            self, 
            "MyFirstBucket",
            bucket="yuki-sample-bucket-202310", # 世界で唯一の名前である必要があります
        )

app = App()
MyStack(app, "python-terraform")
app.synth()


Hirokiのアイコン
【Hiroki】 おお、本当に普通のPythonコードですね!S3Bucketというクラスをインスタンス化するだけでいいんだ。


Yukiのアイコン
【Yuki】 はい。このコードは「東京リージョンに yuki-sample-bucket-202310 という名前のS3バケットを1つ用意してください」というお願いを書いていることになります。

コードの実行とデプロイの流れ


Hirokiのアイコン
【Hiroki】 このコードを書いた後は、どうやってクラウドに反映させるんですか?


Yukiのアイコン
【Yuki】 いい質問ですね。手順は主に3つのステップに分かれています。


Yukiのアイコン
【Yuki】 1つ目は cdktf diff です。これを実行すると、「現在のクラウドの状態」と「今書いたコードの状態」の差分を表示してくれます。いきなり実行するのではなく、何が起きるかを確認するのが大切なんです……。


Hirokiのアイコン
【Hiroki】 いきなり作っちゃって、後で「あ、間違えた!」ってなるのは怖いですもんね。


Yukiのアイコン
【Yuki】 ええ、わたしも失敗すると、しばらく落ち込んでしまうので……。事前の確認はとても大事だと思います。


Yukiのアイコン
【Yuki】 2つ目は cdktf deploy です。差分に問題がなければ、このコマンドで実際にクラウドへ設定を反映させます。実行時に確認を求められるので、yesと入力すると作成が始まりますよ。


Yukiのアイコン
【Yuki】 3つ目は cdktf destroy です。実験が終わって、作ったものを片付けたい時に使います。クラウドはお金がかかってしまうこともあるので、使わないものはこまめに消しておくのがいいかもしれません。


Hirokiのアイコン
【Hiroki】 deployで作って、destroyで片付ける。流れがシンプルで分かりやすいです!

CDKTFを使う上での注意点


Yukiのアイコン
【Yuki】 とても便利なCDKTFですが、少しだけ気をつけておいたほうがいいこともあります。


Yukiのアイコン
【Yuki】 まず、比較的新しいツールなので、インターネット上の情報は標準の「HCL」で書かれたものの方が多いです。何かわからないことがあった時に、HCLのコードをPythonに読み替える力が必要になることもあるかもしれません。


Hirokiのアイコン
【Hiroki】 なるほど。標準のTerraformの知識も、全く不要というわけではないんですね。


Yukiのアイコン
【Yuki】 はい、基礎を知っておくことは大切だと思います。それから、先ほどお話ししたようにNode.jsとPythonの両方が環境に必要なので、セットアップが少しだけ煩雑に感じるかもしれませんね。

まとめ


Yukiのアイコン
【Yuki】 今日はPythonでTerraformを扱う「CDKTF」についてお話ししました。簡単に振り返ってみましょうか。

  • Terraformは、インフラをコードで管理するためのツール
  • CDKTFを使えば、Pythonの文法でインフラを定義できる
  • 宣言的な記述なので、手順ではなく「あるべき姿」を書けばいい
  • cdktf diff で確認、deploy で反映、destroy で削除


Hirokiのアイコン
【Hiroki】 ありがとうございます!Pythonならプログラミングの勉強をしながらインフラも学べるので、一石二鳥な気がしてきました。


Yukiのアイコン
【Yuki】 そう言ってもらえると嬉しいです。複雑なネットワークやデータベースの設定も、Pythonのコードなら整理して書きやすいと思います。Hirokiくんのペースで、少しずつ触れてみてくださいね。


Yukiのアイコン
【Yuki】 もし興味が湧いたら、こちらの公式サイトなども参考にしてみてください。 CDK for Terraform - HashiCorp CDKTF Python Example - GitHub


Hirokiのアイコン
【Hiroki】 はい!さっそく自分のAWSアカウントで小さなバケットを作ってみるところから始めてみます。Yukiさん、丁寧に教えてくださってありがとうございました!


Yukiのアイコン
【Yuki】 いいえ……どういたしまして。Hirokiくんが新しいことを学ぼうとする姿、とても素敵だと思います。また何かあれば、いつでも聞いてくださいね。夜は静かで作業も捗るかもしれませんが、あまり無理はしないでくださいね。



< Boto3
コラム一覧に戻る
Prometheus Client Library >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki