AWS CDKでVPC構成を作成してみた
はじめに
かつまたです。リソース作成の検証の一環として、いくつかの方法でVPC、サブネット、IGW、EC2を利用した簡単な構成を作成してみました。このブログではAWS CDKを利用し、pythonコードでリソースを定義し、作成しました。
別の方法でのリソース作成については以下のブログに記載しました。
構成図は以下の通りです。
前提条件
- MacOS
- AWS CLI
- Node.js 10.8.2
- Python 3.9.6
- AWS CDK v2.154.1
セットアップ例↓
AWS CDKの開始方法
セットアップとプロジェクト作成
1.AWS CDKを以下コマンドでインストールします。
sudo npm install -g aws-cdk
2.フォルダを作成して移動し、使用言語を指定してプロジェクトを作成します(今回はPython)。
mkdir my_cdk_app
cd my_cdk_app
cdk init app --language python
3.必要なPythonパッケージのインストールを行います。
pip3 install -r requirements.txt
リソース記述
セットアップ完了後、プロジェクトのフォルダ内でリソースを記述します。
my_cdk_app_stack.py
from aws_cdk import (
Stack,
aws_ec2 as ec2,
)
from constructs import Construct
class MyCdkAppStack(Stack):
def __init__(self, scope: Construct, id: str, **kwargs) -> None:
super().__init__(scope, id, **kwargs)
# パラメータの定義
my_ip = self.node.try_get_context("MyIP") or "自身のIPアドレス"
# VPCの作成
vpc = ec2.Vpc(self, "katsumataVPCCFn",
cidr="10.0.0.0/16",
max_azs=2,
subnet_configuration=[
{
'cidrMask': 24,
'name': 'Public',
'subnetType': ec2.SubnetType.PUBLIC
}
])
# セキュリティグループの作成
security_group = ec2.SecurityGroup(self, "katsumataSgCFn",
vpc=vpc,
description="Allow HTTP",
allow_all_outbound=True)
# セキュリティグループにインバウンドルールを追加
security_group.add_ingress_rule(ec2.Peer.ipv4(my_ip),
ec2.Port.tcp(80),
"Allow HTTP from MyIP")
security_group.add_ingress_rule(ec2.Peer.ipv4(my_ip),
ec2.Port.tcp(22),
"Allow SSH from MyIP")
# EC2インスタンスの作成
ec2_instance = ec2.Instance(self, "katsumataEC2CFn",
instance_type=ec2.InstanceType("t2.micro"),
machine_image=ec2.MachineImage.generic_linux({
"ap-northeast-1": "ami-00c79d83cf718a893" #自身のリージョンに存在するAMI IDを記入
}),
vpc=vpc,
security_group=security_group,
vpc_subnets={
'subnet_type': ec2.SubnetType.PUBLIC
})
app.py
#!/usr/bin/env python3
import aws_cdk as cdk
from my_cdk_app.my_cdk_app_stack import MyCdkAppStack
app = cdk.App()
MyCdkAppStack(app, "MyCdkAppStack")
app.synth()
デプロイ
1.CDKで初めてデプロイする際はbootstrapコマンドを使用します。
CDKのデプロイプロセスで使用されるアーティファクトを保存するためのS3バケットといったCDKアプリケーションをデプロイするために必要なリソースをAWSアカウントとリージョンに作成します。
cdk bootstrap aws://<AWS_ACCOUNT_ID>/<AWS_REGION>
2.CDKをデプロイします。
cdk deploy
出力例
コンソール上でリソースを確認することができました。
3.必要に応じてスタックを削除します
cdk destroy <スタック名>
出力例
おわりに
AWS CDKでPythonを用いてリソースを作成しました。使い慣れた言語を用いて、YAMLテンプレートを記述することなくリソースが作成することができ、今後も積極的に活用していきたいサービスだと感じました。
ご覧いただきありがとうございました。
アノテーション株式会社について
アノテーション株式会社はクラスメソッドグループのオペレーション専門特化企業です。サポート・運用・開発保守・情シス・バックオフィスの専門チームが、最新 IT テクノロジー、高い技術力、蓄積されたノウハウをフル活用し、お客様の課題解決を行っています。当社は様々な職種でメンバーを募集しています。「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、アノテーション株式会社 採用サイトをぜひご覧ください。