AWS CDK Python boto3でEC2の構築をしてみた

はじめに

今回はAWS CDKでEC2の構築を行いたいと思います。AWS CDKはコードでリソースの操作ができるIacツールです。様々なプログラミング言語をサポートしているので、使い慣れた言語を利用することで学習コストを抑えることができます。今回はPython boto3を使って構築していきます。

コードでリソースの操作をするのは最初はとっつきにくいですが、一度構築してしまえば、何度も同じ環境をコマンド一つで再現することができます。

例えば、本番環境と検証環境で同じ環境を用意したいというニーズがあった場合。コンソールからポチポチ画面を操作して同じ環境を構築するのは骨の折れる作業です。また、人が作業する以上ミスが発生するリスクがあります。Iacを導入することで確実に同じ環境を構築することができミスも削減できます。

作成するリソースの構成図

サブネット1つにEC2を1台たてるシンプルな構成で構築していきたいと思います。
boto3.drawio.png

実装

それでは実際にコードを書いて実装してみます。以下のコードで構成図通りの環境を構築することができます。

それではコードの解説をしていきます。

まずはライブラリをインポートします。

EC2サービスへのクライアントインターフェースを作成しています。これにより、EC2インスタンスに関連する操作をプログラムから行うことができます。

VPCの作成

新しいVPC(Virtual Private Cloud)を作成しています。CIDRブロックとして192.0.0.0/24をしていします。このVPCはNameタグをboto3-test-vpcとして設定します。

boto3のclientは戻り値としてdict型を返します。上記のコードでVPC IDを取得しています。

サブネットの作成

作成したVPC内に新しいサブネットを作成しています。このサブネットはアベイラビリティーゾーンap-northeast-1a(東京リージョンのAZ)に配置され、CIDRブロックとしては192.0.0.0/28が割り当てられています。先ほど取得したVPCIDを指定します。

作成したサブネットからサブネットIDを取得しています。

インターネットゲートウェイの作成

インターネットゲートウェイを作成し、Nameタグでboto3-test-igwと命名しています。

作成したインターネットゲートウェイからIDを取得しています。

VPCに対してインターネットゲートウェイをアタッチ(接続)しています。これにより、VPC内のインスタンスがインターネットと通信できるようになります。

ルートテーブルの作成

新しいルートテーブルを作成し、Nameタグでboto3-test-route-tableと命名しています。

作成したルートテーブルからIDを取得しています。

インターネットへのルート(全てのトラフィックを0.0.0.0/0でキャッチしてインターネットゲートウェイへと流すためのルール)をルートテーブルに追加しています。

ルートテーブルをサブネットに関連付けています。これによりサブネット内のインスタンスが作成したルートテーブルを利用してインターネットに出ることが可能になります。

セキュリティグループの作成

新しいセキュリティグループを作成しています。インスタンスに適用されるファイアウォールです。

作成したセキュリティグループからIDを取得します。

セキュリティグループのインバウンドルールを設定しており、指定のIPアドレス(myipからのSSH(ポート22)接続を許可しています。ここは自身の環境のIPアドレスを設定してください。

キーペアの作成

キーペアを作成します。フォーマットはppk(PuTTY用のフォーマット)をしていします。これによりプライベートキーが生成され、セキュリティで保護された方法でインスタンスに接続する際に使用します。

生成したキーペアから実際のキー情報を取得しています。

プライベートキーをファイルとして保存しています。このファイルはSSHログインに使用します。ファイル名は先ほど設定したキーペア名に.ppk拡張子をつけたものです。

EC2インスタンスの起動

最後に、EC2インスタンスを起動します。使用するAMIはAmazon Linux2023を指定しています。、インスタンスタイプ、キーペア、セキュリティグループ、サブネットを指定し、最低1つ、最高1つのインスタンスを起動するように設定します。インスタンスにはboto3という名前タグを設定しました。

おわりに

今回はEC2インスタンス1台を起動するという簡単なものでしたがカスタマイズしていくことで独自のニーズに合わせたインフラの構築が可能です。ご活用いただけたら幸いです。

===

ナレッジコミュニケーションでは「Musubite」というエンジニア同士のカジュアルトークサービスを利用しています。
生成 AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください!

今後もクラウド AI の最新情報を皆さんに届けていきたいと思います。お楽しみに。

この記事を書いた人

aws-recipe-user