๐ Project Structure
๐ฆ requirements.txt
aws-cdk-lib constructs>=10.0.0,<11.0.0
Install dependencies:
pip install -r requirements.txt
๐ง config/dev.json
{
"env_name": "dev",
"region": "us-east-1",
"account": "123456789012",
"bucket_name": "dev-bucket-example",
"instance_type": "t2.micro",
"lambda_memory": 512,
"lambda_timeout": 10,
"alb_listener_port": 80
}
๐งพ cdk.json
{
"app": "python app.py"
}
๐ app.py
import json
from aws_cdk import App, Environment
from my_cdk_app.network_stack import NetworkStack
from my_cdk_app.compute_stack import ComputeStack
from my_cdk_app.alb_lambda_stack import AlbLambdaStack
app = App()
# Load context
env_name = app.node.try_get_context("env") or "dev"
target_stack = app.node.try_get_context("target") or "all"
# Load config file
with open(f"config/{env_name}.json") as f:
config = json.load(f)
env = Environment(account=config["account"], region=config["region"])
# Deploy selected stacks
if target_stack in ["network", "all"]:
network_stack = NetworkStack(app, f"NetworkStack-{env_name}", config=config, env=env)
else:
network_stack = None
if target_stack in ["compute", "all"] and network_stack:
ComputeStack(app, f"ComputeStack-{env_name}", config=config, vpc=network_stack.vpc, env=env)
if target_stack in ["alb", "all"] and network_stack:
AlbLambdaStack(app, f"AlbLambdaStack-{env_name}", config=config, vpc=network_stack.vpc, env=env)
app.synth()
๐งฑ my_cdk_app/network_stack.py
from aws_cdk import Stack, aws_ec2 as ec2from constructs import Construct
class NetworkStack(Stack):
def __init__(self, scope: Construct, id: str, config: dict, **kwargs):
super().__init__(scope, id, **kwargs)
self.vpc = ec2.Vpc(self, "VPC", max_azs=2)
๐ป my_cdk_app/compute_stack.py
from aws_cdk import Stack, aws_s3 as s3, aws_ec2 as ec2
from constructs import Construct
class ComputeStack(Stack):
def __init__(self, scope: Construct, id: str, config: dict, vpc, **kwargs):
super().__init__(scope, id, **kwargs)
s3.Bucket(self, "Bucket", bucket_name=config["bucket_name"], versioned=True)
ec2.Instance(self, "Instance",
instance_type=ec2.InstanceType(config["instance_type"]),
machine_image=ec2.MachineImage.latest_amazon_linux(),
vpc=vpc
)
๐ my_cdk_app/alb_lambda_stack.py
from aws_cdk import ( Stack,
aws_lambda as _lambda,
aws_ec2 as ec2,
aws_elasticloadbalancingv2 as elbv2,
aws_elasticloadbalancingv2_targets as targets
)
from constructs import Construct
class AlbLambdaStack(Stack):
def __init__(self, scope: Construct, id: str, config: dict, vpc, **kwargs):
super().__init__(scope, id, **kwargs)
# Lambda Function
fn = _lambda.Function(self, "Lambda",
runtime=_lambda.Runtime.PYTHON_3_9,
handler="index.handler",
code=_lambda.Code.from_inline("def handler(event, context): return {'statusCode': 200, 'body': 'Hello from Lambda'}"),
memory_size=config["lambda_memory"],
timeout=config["lambda_timeout"]
)
# ALB
alb = elbv2.ApplicationLoadBalancer(self, "ALB", vpc=vpc, internet_facing=True)
listener = alb.add_listener("Listener", port=config["alb_listener_port"])
listener.add_targets("LambdaTarget", targets=[targets.LambdaTarget(fn)])
self.dns = alb.load_balancer_dns_name
๐ CDK Commands
✅ Bootstrap environment (once per region/account)
cdk bootstrap
✅ Deploy single stack
cdk deploy AlbLambdaStack-dev
✅ Deploy using context filtering
cdk deploy --context env=dev --context target=alb
✅ Deploy all stacks for dev
cdk deploy --context env=dev
✅ List available stacks
cdk list
✅ Destroy stack
cdk destroy AlbLambdaStack-dev
Task
Command
Description
✅ Initialize CDK project
cdk init app --language python
Run once when starting new project
✅ Install Python deps
pip install -r requirements.txt
Required for CDK code to run
✅ Bootstrap CDK
cdk bootstrap
Sets up initial resources like CDK bucket
๐ ️ Synthesize CloudFormation
cdk synth
Generates raw CloudFormation template
๐ฆ Deploy all stacks
cdk deploy
Deploys all stacks defined in app.py
๐ฆ Deploy single stack
cdk deploy AlbLambdaStack-dev
Deploy only the named stack
๐ฆ Deploy with context
cdk deploy --context env=dev --context target=alb
Load environment + filter stacks
๐️ Destroy a stack
cdk destroy AlbLambdaStack-dev
Clean up a single stack
๐ List all stacks
cdk list
Show all stacks CDK knows about
๐งฉ Diff template
cdk diff AlbLambdaStack-dev
Show what will change before deployment
No comments:
Post a Comment