Claude Code × AWS CloudFormation/CDK पूर्ण गाइड | Infrastructure as Code को स्वचालित रूप से जनरेट करें
Claude Code के साथ AWS Infrastructure as Code को तेज़ बनाएं। CloudFormation टेम्पलेट, CDK TypeScript स्टैक और multi-stack डिज़ाइन के लिए काम करने वाला कोड — Masa के वास्तविक प्रोडक्शन अनुभव पर आधारित।
“मुझे हर बार infrastructure सेट करने के लिए AWS Console में क्लिक करते रहना बिल्कुल पसंद नहीं” — अगर आपने कभी ऐसा महसूस किया है, तो आप अकेले नहीं हैं। CloudFormation और CDK infrastructure को code के ज़रिए reproducible बनाते हैं, लेकिन वो templates लिखने में समय लगता है।
मैं इस साइट का infrastructure (Cloudflare Pages + Workers + D1) Claude Code से मैनेज करता हूं, और AWS business infrastructure के लिए भी Claude Code से CloudFormation/CDK templates जनरेट करवाता हूं। जो templates पहले घंटों में तैयार होते थे, वो अब 1/5 समय में पूरे हो जाते हैं।
CloudFormation vs CDK: कौन सा चुनें?
CloudFormation: AWS-native सर्विस जो JSON/YAML में infrastructure describe करती है
CDK (Cloud Development Kit): TypeScript/Python में infrastructure describe करने का framework
जो CloudFormation में synthesize होता है
| तुलना | CloudFormation | CDK |
|---|---|---|
| भाषा | JSON / YAML | TypeScript, Python, Java आदि |
| Type Safety | कोई नहीं | उत्कृष्ट (TypeScript के साथ पूरी तरह type-safe) |
| Reusability | कम (copy-paste) | अधिक (classes और functions से abstract) |
| Learning Curve | कम | मध्यम |
| Claude Code Compatibility | उत्कृष्ट | अति उत्कृष्ट |
नए projects के लिए CDK TypeScript की दृढ़ता से सिफारिश की जाती है। Claude Code के साथ इसकी compatibility बेहतरीन है और type completion के साथ मिलकर यह उच्च गुणवत्ता का code produce करता है।
Step 1: मौजूदा AWS Resources को CloudFormation में बदलें
यह pattern तब उपयोगी है जब आप किसी मौजूदा AWS environment को बाद में codify करना चाहते हैं।
claude -p "
निम्नलिखित AWS setup को CloudFormation template (YAML) में बदलो।
[वर्तमान setup]
- VPC: 10.0.0.0/16, 2 public subnets, 2 private subnets
- EC2: t3.medium, Amazon Linux 2023, public subnet में
- RDS: MySQL 8.0, db.t3.micro, private subnet में
- ALB: HTTPS (ACM certificate), EC2 पर forwarding
- Security Groups: ALB से 443 allow, EC2 से RDS पर 3306 allow
[Requirements]
- Environment (dev/staging/prod) parameter से switchable
- Resource names में environment name prefix लगाएं
- CloudFormation Outputs में ALB DNS name output करें
"
जनरेट हुआ CloudFormation template (excerpt):
AWSTemplateFormatVersion: "2010-09-09"
Description: "Web Application Infrastructure"
Parameters:
Environment:
Type: String
AllowedValues: [dev, staging, prod]
Default: dev
DBPassword:
Type: String
NoEcho: true # Password को mask करें
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub "${Environment}-vpc"
PublicSubnet1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC
CidrBlock: 10.0.1.0/24
AvailabilityZone: !Select [0, !GetAZs ""]
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub "${Environment}-public-1"
# ALB Security Group
ALBSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: ALB Security Group
VpcId: !Ref VPC
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: 0.0.0.0/0
Outputs:
ALBDnsName:
Value: !GetAtt ApplicationLoadBalancer.DNSName
Export:
Name: !Sub "${Environment}-alb-dns"
Step 2: CDK से Serverless Stack बनाएं
CDK के साथ TypeScript में लिखते हैं, जिससे logic की reuse आसान होती है।
# CDK project initialize करें
mkdir my-infra && cd my-infra
npx cdk init app --language typescript
claude -p "
lib/my-infra-stack.ts में निम्नलिखित serverless setup को CDK TypeScript में implement करो।
[Setup]
- API Gateway (REST API) + Lambda (Node.js 20)
- DynamoDB table (PAY_PER_REQUEST)
- S3 bucket (private, versioning enabled)
- CloudFront (S3 origin, custom domain support)
- DynamoDB table name और S3 bucket name को Lambda environment variables में pass करें
- Lambda को automatically least-privilege IAM role attach करें
सभी resources को appropriately tag करें,
और production में (NODE_ENV=production) deletion protection enable करें।
"
जनरेट हुआ CDK code:
// lib/my-infra-stack.ts
import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as apigateway from "aws-cdk-lib/aws-apigateway";
import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
import * as s3 from "aws-cdk-lib/aws-s3";
import * as cloudfront from "aws-cdk-lib/aws-cloudfront";
import * as origins from "aws-cdk-lib/aws-cloudfront-origins";
export class MyInfraStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const isProd = process.env.NODE_ENV === "production";
// DynamoDB table
const table = new dynamodb.Table(this, "AppTable", {
partitionKey: { name: "PK", type: dynamodb.AttributeType.STRING },
sortKey: { name: "SK", type: dynamodb.AttributeType.STRING },
billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
pointInTimeRecovery: true,
deletionProtection: isProd,
removalPolicy: isProd ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY,
});
// S3 bucket
const bucket = new s3.Bucket(this, "AssetsBucket", {
versioned: true,
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
encryption: s3.BucketEncryption.S3_MANAGED,
deletionProtection: isProd,
removalPolicy: isProd ? cdk.RemovalPolicy.RETAIN : cdk.RemovalPolicy.DESTROY,
});
// Lambda function
const apiLambda = new lambda.Function(this, "ApiLambda", {
runtime: lambda.Runtime.NODEJS_20_X,
handler: "index.handler",
code: lambda.Code.fromAsset("src/lambda"),
environment: {
TABLE_NAME: table.tableName,
BUCKET_NAME: bucket.bucketName,
NODE_ENV: process.env.NODE_ENV ?? "development",
},
timeout: cdk.Duration.seconds(30),
memorySize: 512,
});
// Lambda को least-privilege permissions दें
table.grantReadWriteData(apiLambda);
bucket.grantReadWrite(apiLambda);
// API Gateway
const api = new apigateway.RestApi(this, "AppApi", {
restApiName: "MyApp API",
defaultCorsPreflightOptions: {
allowOrigins: apigateway.Cors.ALL_ORIGINS,
allowMethods: apigateway.Cors.ALL_METHODS,
},
});
api.root.addProxy({
defaultIntegration: new apigateway.LambdaIntegration(apiLambda),
});
// CloudFront
const distribution = new cloudfront.Distribution(this, "Distribution", {
defaultBehavior: {
origin: new origins.S3Origin(bucket),
viewerProtocolPolicy: cloudfront.ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
},
});
// Output
new cdk.CfnOutput(this, "ApiUrl", { value: api.url });
new cdk.CfnOutput(this, "CloudFrontUrl", { value: distribution.distributionDomainName });
}
}
Step 3: मौजूदा Stacks अपडेट करें और Diff देखें
# Deploy से पहले diff देखें
npx cdk diff
# Claude Code से diff explain करवाएं
claude -p "
यह cdk diff output पढ़कर बताओ कि क्या बदला है।
Security group और IAM policy changes पर विशेष ध्यान दो।
$(npx cdk diff 2>&1)
"
Step 4: Multi-Stack Architecture डिज़ाइन करें
Production-scale infrastructure को multiple stacks में बांटकर manage करते हैं।
claude -p "
निम्नलिखित multi-stack setup को CDK TypeScript में design करो।
[Stack division strategy]
- NetworkStack: VPC, subnets, security groups
- DatabaseStack: RDS, ElastiCache (NetworkStack पर depend)
- ApplicationStack: ECS, ALB, AutoScaling (NetworkStack, DatabaseStack पर depend)
- MonitoringStack: CloudWatch dashboards, alarms, SNS notifications
Stack dependencies और CfnOutput / Fn.importValue का use भी शामिल करो।
"
// bin/app.ts
import * as cdk from "aws-cdk-lib";
import { NetworkStack } from "../lib/network-stack";
import { DatabaseStack } from "../lib/database-stack";
import { ApplicationStack } from "../lib/application-stack";
import { MonitoringStack } from "../lib/monitoring-stack";
const app = new cdk.App();
const env = { account: process.env.CDK_ACCOUNT, region: "ap-south-1" };
const network = new NetworkStack(app, "NetworkStack", { env });
const database = new DatabaseStack(app, "DatabaseStack", { env, vpc: network.vpc });
const application = new ApplicationStack(app, "ApplicationStack", {
env,
vpc: network.vpc,
database: database.cluster,
});
new MonitoringStack(app, "MonitoringStack", {
env,
alb: application.alb,
database: database.cluster,
});
Step 5: CloudFormation/CDK Debugging Claude Code पर छोड़ें
Deployment failure पर Claude Code समाधान भी निकाल सकता है।
claude -p "
CDK deploy निम्नलिखित error से fail हो रहा है।
कारण और fix बताओ:
$(npx cdk deploy 2>&1 | tail -30)
"
आम failure patterns:
- ROLLBACK_COMPLETE: पिछला deployment fail हुआ, stack खराब हो गया →
cdk destroyकरके फिर से deploy करें - UPDATE_ROLLBACK_FAILED: Manual changes से conflict → AWS Console में manually resolve करें
- Resource already exists: मौजूदा resource से नाम collision → resource का नाम बदलें या import करें
4 आम गलतियां जिनसे बचें
1. cdk destroy से deletion protection bypass करना
Development environment में removalPolicy: DESTROY नहीं लगाने पर cdk destroy के बाद resources रह जाते हैं। Production में गलती से delete होने से बचाने के लिए RETAIN use करें।
2. CloudFormation drift detection को ignore करना
AWS Console से manually resources change करने पर CloudFormation और reality में अंतर आ जाता है (drift)। महीने में एक बार CloudFormation Console में drift detection चलाएं।
3. Template में secrets सीधे लिखना
# गलत: password template में रह जाता है
DBPassword: "mysecretpassword"
# सही: Secrets Manager या Parameter Store से लें
DBPassword: !Sub "{{resolve:secretsmanager:prod/db-password}}"
4. CDK version pinning में लापरवाही
package.json में team के CDK versions match नहीं होने पर diffs आते हैं। सबके same version use करने के लिए package-lock.json commit करें।
सारांश
| Task | Claude Code का योगदान |
|---|---|
| CloudFormation generation | Requirements बताते ही complete YAML |
| CDK implementation | TypeScript में type-safe infrastructure code |
| Stack design | Multi-stack dependency architecture |
| Diff explanation | cdk diff output सरल भाषा में समझाया |
| Debugging | Error logs से कारण और fix |
Infrastructure as Code कुछ ऐसा है जो सब जानते हैं करना चाहिए लेकिन टालते रहते हैं। Claude Code के साथ बस “मुझे यह AWS setup चाहिए” कहने से template तैयार हो जाता है — IaC अपनाने की बाधा नाटकीय रूप से कम हो जाती है।
संबंधित लेख
- Claude Code × AWS Lambda पूर्ण गाइड
- Claude Code × AWS IAM पूर्ण गाइड
- Claude Code × AWS DynamoDB पूर्ण गाइड
संदर्भ
अपने Claude Code वर्कफ़्लो को अगले स्तर पर ले जाएँ
Claude Code में तुरंत कॉपी-पेस्ट करने योग्य 50 आज़माए हुए प्रॉम्प्ट टेम्पलेट।
मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट
बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।
हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।
लेखक के बारे में
Masa
Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।
संबंधित लेख
Claude Code × Amazon Bedrock संपूर्ण गाइड | AWS पर Claude को प्रोडक्शन में चलाएं
Claude Code के साथ Amazon Bedrock उपयोग करने की संपूर्ण गाइड। IAM प्रमाणीकरण, स्ट्रीमिंग, Lambda इंटीग्रेशन, RAG कार्यान्वयन से लेकर लागत अनुकूलन तक — Masa के वास्तविक प्रोडक्शन अनुभव पर आधारित।
Claude Code × AWS CodePipeline/CodeBuild पूर्ण गाइड | CI/CD पाइपलाइन स्वचालित रूप से बनाएं
Claude Code का उपयोग करके AWS CodePipeline और CodeBuild के साथ CI/CD स्वचालित रूप से बनाएं। पाइपलाइन डिज़ाइन, buildspec.yml जेनरेशन, टेस्ट ऑटोमेशन और CDK इन्फ्रास्ट्रक्चर के व्यावहारिक कोड उदाहरण।
Claude Code × AWS CloudWatch सम्पूर्ण गाइड | लॉग विश्लेषण, अलार्म सेटअप और डैशबोर्ड ऑटोमेशन
Claude Code से AWS CloudWatch को और प्रभावी बनाएं। लॉग पैटर्न विश्लेषण, स्वचालित अलार्म कॉन्फ़िगरेशन, मेट्रिक्स डैशबोर्ड और इंसिडेंट जांच के लिए व्यावहारिक कोड।